8

私は現在、Apache poi を使用して Java プロジェクトに取り組んでいます。私のプロジェクトでは、docファイルをpdfファイルに変換したいと考えています。変換は正常に完了しましたが、テキスト スタイルやテキストの色ではなく、pdf のテキストのみを取得します。私のPDFファイルは白黒のように見えます。私のdocファイルは色付きで、テキストのスタイルが異なります。

これは私のコードです、

 POIFSFileSystem fs = null;  
 Document document = new Document(); 

 try {  
     System.out.println("Starting the test");  
     fs = new POIFSFileSystem(new FileInputStream("/document/test2.doc"));  

     HWPFDocument doc = new HWPFDocument(fs);  
     WordExtractor we = new WordExtractor(doc);  

     OutputStream file = new FileOutputStream(new File("/document/test.pdf")); 

     PdfWriter writer = PdfWriter.getInstance(document, file);  

     Range range = doc.getRange();
     document.open();  
     writer.setPageEmpty(true);  
     document.newPage();  
     writer.setPageEmpty(true);  

     String[] paragraphs = we.getParagraphText();  
     for (int i = 0; i < paragraphs.length; i++) {  

         org.apache.poi.hwpf.usermodel.Paragraph pr = range.getParagraph(i);
        // CharacterRun run = pr.getCharacterRun(i);
        // run.setBold(true);
        // run.setCapitalized(true);
        // run.setItalic(true);
         paragraphs[i] = paragraphs[i].replaceAll("\\cM?\r?\n", "");  
     System.out.println("Length:" + paragraphs[i].length());  
     System.out.println("Paragraph" + i + ": " + paragraphs[i].toString());  

     // add the paragraph to the document  
     document.add(new Paragraph(paragraphs[i]));  
     }  

     System.out.println("Document testing completed");  
 } catch (Exception e) {  
     System.out.println("Exception during test");  
     e.printStackTrace();  
 } finally {  
                 // close the document  
    document.close();  
             }  
 }  

私を助けてください。

事前にt​​hnx。

4

2 に答える 2

4

Apache Tika を見ると、HWPF ドキュメントからスタイル情報を読み取る良い例があります。Tika のコードは、HWPF コンテンツに基づいて HTML を生成しますが、非常によく似たものがあなたのケースで機能することがわかるはずです。

Tika クラスは https://svn.apache.org/repos/asf/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.javaです。

Word 文書について注意すべきことの 1 つは、1 つの Character Run のすべてに同じ書式が適用されることです。したがって、段落は 1 つまたは複数のキャラクター ランで構成されます。一部のスタイリングは段落に適用され、他の部分はランで行われます。したがって、興味のあるフォーマットに応じて、段落またはランにある場合があります。

于 2011-04-07T13:48:27.863 に答える
4

WordExtractor を使用すると、テキストのみが取得されます。CharacterRunクラスを使用してみてください。テキストとともにスタイルを取得します。以下のサンプルコードを参照してください。

Range range = doc.getRange();
for (int i = 0; i < range.numParagraphs(); i++) {
    org.apache.poi.hwpf.usermodel.Paragraph poiPara = range.getParagraph(i);
    int j = 0;
    while (true) {
        CharacterRun run = poiPara.getCharacterRun(j++);
        System.out.println("Color "+run.getColor());
        System.out.println("Font size "+run.getFontSize());
        System.out.println("Font Name "+run.getFontName());
        System.out.println(run.isBold()+" "+run.isItalic()+" "+run.getUnderlineCode());
        System.out.println("Text is "+run.text());
        if (run.getEndOffset() == poiPara.getEndOffset()) {
            break;
        }
    }
}
于 2012-03-13T10:28:27.450 に答える