2016-06-22 29 views
7

Tablo hücrelerini resim olarak çıkarmalıyım. Hücreler, tek bir görüntüde birleştirmem gereken karışık içerik (Metin + Resim) içerebilir. Çekirdek metini alabiliyorum ancak resim veya metin almam konusunda hiçbir fikrim yok. Apace POI'nin yardımcı olup olmayacağından emin değil.MS Word Tablo Hücresi görüntü olarak ayıklanıyor mu?

Daha önce böyle bir şey yapan oldu mu?

public static void readTablesDataInDocx(XWPFDocument doc) { 
    int tableIdx = 1; 
    int rowIdx = 1; 
    int colIdx = 1; 
    List table = doc.getTables(); 
    System.out.println("==========No Of Tables in Document=============================================" + table.size()); 
    for (int k = 0; k < table.size(); k++) { 
     XWPFTable xwpfTable = (XWPFTable) table.get(k); 
     System.out.println("================table -" + tableIdx + "===Data=="); 
     rowIdx = 1; 
     List row = xwpfTable.getRows(); 
     for (int j = 0; j < row.size(); j++) { 
      XWPFTableRow xwpfTableRow = (XWPFTableRow) row.get(j); 
      System.out.println("Row -" + rowIdx); 
      colIdx = 1; 
      List cell = xwpfTableRow.getTableCells(); 
      for (int i = 0; i < cell.size(); i++) { 
       XWPFTableCell xwpfTableCell = (XWPFTableCell) cell.get(i); 
       if (xwpfTableCell != null) { 
        System.out.print("\t" + colIdx + "- column value: " + xwpfTableCell.getText()); 
       } 
       colIdx++; 
      } 
      System.out.println(""); 
      rowIdx++; 
     } 
     tableIdx++; 
     System.out.println(""); 
    } 
} 

Şimdi bir hücre de birini içeriyorsa

System.out.print("\t" + colIdx + "- column value: " + xwpfTableCell.getText()); 

Nasıl Resmi alırım bu yöntemin yardımı ile Metin almak mümkün?

+1

fo sonra,() 'hücre' getParagraphs içinde paragraflar almayı deneyin Her paragrafta, getRuns() 'işlevlerini alın. Bu bir [XWPFRun] döndürür (https://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFRun.html). Bu, resimler elde etmenizi sağlayan bir yönteme sahiptir: 'getEmbeddedPictures()' – iggymoran

+0

@iggymoran Liste para = xwpfTableCell.getParagraphs(); if (para! = Null) { XWPFRun xWPFRun = (XWPFRun) para.get (i); (int l = 0; l

+1

Aşağıdaki gibi bir şey denemek istersiniz: "para.getRuns()", null olmadıklarını doğrulayın ve sonra "run.getEmbeddedPictures()" yi çağırın. – iggymoran

cevap

5

görüntü verileri, ad, bu benim için çalışıyor, bu kodu deneyin

XWPFDocument doc = new XWPFDocument(new FileInputStream(fileName)); 
      List<XWPFTable> table = doc.getTables(); 
      for (XWPFTable xwpfTable : table) { 
       List<XWPFTableRow> row = xwpfTable.getRows(); 
       for (XWPFTableRow xwpfTableRow : row) { 
        List<XWPFTableCell> cell = xwpfTableRow.getTableCells(); 
        for (XWPFTableCell xwpfTableCell : cell) { 
         if (xwpfTableCell != null) { 
          System.out.println(xwpfTableCell.getText()); 
          String s = xwpfTableCell.getText(); 
          for (XWPFParagraph p : xwpfTableCell.getParagraphs()) { 
           for (XWPFRun run : p.getRuns()) { 
            for (XWPFPicture pic : run.getEmbeddedPictures()) { 
             byte[] pictureData = pic.getPictureData().getData(); 
             System.out.println("picture : " + pictureData); 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
+0

iyi çalışıyor ...! –

3

Cell'a sahip olduğunuzda, o Hücreyi oluşturan paragraphs'u alabilirsiniz. Bu paragraflar sırasıyla getRuns yöntemini kullanarak edinebileceğiniz Run s tarafından oluşturulmuştur. Çalışır kendileri gömülü görüntüleri içerebilir, getEmbeddedPictures yöntemini çağırarak edinebilirsiniz.

Bu nedenle bir hücrenin gömülü resimleri alır bir yöntem olabilir:

public static void printDescriptionOfImagesInCell(XWPFTableCell cell) { 
    List<XWPFParagraph> paragrahs = cell.getParagraphs(); 
    for (XWPFParagraph paragraph : paragraphs) { 
     List<XWPFRun> runs = paragraph.getRuns(); 
     for (XWPFRun run : runs) { 
      List<XWPFPicture> pictures = run.getEmbeddedPictures(); 
      for (XWPFPicture picture : pictures) { 
       //Do anything you want with the picture: 
       System.out.println("Picture: " + picture.getDescription()); 
      } 
     } 
    } 
} 

Aslında almak için yöntem Picture belgelerle gerçek resimler hakkında daha fazla şeyler keşfetmek ve değiştirmek gerekir vb