1

次の状況と問題に直面しています。

既存の .doc/.docx ファイルを取得し、画像とテキストを含むドキュメントのすべてのページにフッターを追加して変更する必要があります。私は Apache POI API を使用してこれを達成しようとしてきましたが、これまでのところうまくいきませんでした。例やガイドをたくさん検索しましたが、見つけたものは私をさらに失望させるだけでした.

価格が高くて Aspose を断念したので、この目的を達成するには POI API しかないと思います。

私が .doc を使用してそれを行うことから得た最も近いのは、このコードを実行することだったと思いますが、テキストのないフッターセクションのみを作成し、ドキュメント内の画像をクラッシュさせます:

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("C:/testeF.doc"));
HWPFDocument doc = new HWPFDocument(fs);
//WordExtractor we = new WordExtractor(doc);
HeaderStories headerStories = new HeaderStories(doc);
Range rangeO = headerStories.getOddFooterSubrange();
if(rangeO == null)
    rangeO = headerStories.getRange();
rangeO.insertAfter("Footer text from POI");
FileOutputStream newdoc = new FileOutputStream("C:/output.doc");
doc.write(newdoc);
newdoc.close();

これらの問題を解決するためのアドバイスをお願いします。

4

1 に答える 1

0

.docx ファイル (HWPF ではなく XWPF) に関するいくつかの更新により、テキストを含むフッターを作成したり、既存のフッターにテキストを挿入したりできるようになりましたが、フッターが既に存在する場合は、既存のテキストに新しいテキストを追加するだけです。上書きする方法が見つかりません。

例: 既存のフッター = "テスト"

次のコードを実行した後のフッター = "TestTest"

必要な結果 = "テスト" (最初の "テスト" フッター テキストを上書き

String text = "Test";
    File docxFile = new File("C:/testeXWPF.docx");
    FileInputStream finStream = new FileInputStream(docxFile.getAbsolutePath());
    XWPFDocument doc = new XWPFDocument(finStream);

    XWPFHeaderFooterPolicy policy = doc.getHeaderFooterPolicy();
    if (policy == null) {
        policy = new XWPFHeaderFooterPolicy(doc);
    }

    CTP ctP1 = CTP.Factory.newInstance();
    CTR ctR1 = ctP1.addNewR();
    CTText t = ctR1.addNewT();
    t.setStringValue(text);
    XWPFParagraph codePara = new XWPFParagraph(ctP1);

    XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
    newparagraphs[0] = codePara;

    policy.createFooter(policy.DEFAULT, newparagraphs);

    FileOutputStream fileOut = new FileOutputStream(docxFile);

    doc.write(fileOut);

    fileOut.close();

今のところ、これは docx ファイル (XWPF) にのみ適用されますが、doc ファイル (HWPF) に対して同じことを行う方法を見つける必要があります。

ヒントはありますか?

于 2012-11-14T18:08:28.863 に答える