このメソッドを使用して pdf を変更しようとしています (最初のコード ブロック - PDFStreamParser を使用して PDFOperator を反復し、必要に応じて COSString を更新します):
http://www.coderanch.com/t/556009/open-source/PdfBox-Replace-String-double-pdf
一部の UTF-8 文字 (分音記号) に問題があります: 更新したいテキストを印刷すると、「Societ? ?ii Na?ionale」のように表示されます (「?」は 0002 または 0004 のようなコードです)。 )。
面白いことは次のとおりです。
- 更新されたpdfファイルを書き込むと、文字が正しく表示されます(検出して置き換えることはできませんでしたが)
- PDFTextStripper の getText(...) を使用してテキストを削除しようとすると、テキストが完全に抽出されます。
- 私は2つのpdfboxバージョンを試しました:1.5.0(上記のように動作します)と1.8.1(最終的に書かれたpdfファイルは特殊文字を正しく表示せず、ドキュメントに「null」文字列が表示されます)
すべての UTF-8 文字が正しく表示されるように、pdf の更新 (または少なくとも試してください...) に使用されるクラスに対して何ができますか (構成できますか?)
編集:
スクリーンショット:
編集2:
PDFTextStripper とそのスーパークラスの pdfbox ソース コードを検索したところ、テキストがどのように抽出されたかがわかりました。
processStream メソッドの先頭に
graphicsState = new PDGraphicsState(aPage.findCropBox());
processEncodedText でテキストを削除する場合、PDFont クラスのインスタンスは次のように使用されます。
final PDFont font = graphicsState.getTextState().getFont();
テキストは次のように byte[] から抽出されます。
String c = font.encode( string, i, codeLength );
新しい問題は、同じ 2 行のコードで PDFont クラスをインスタンス化すると、「null」フォント クラスが取得されるため、.encode(...) メソッドを使用できないことです。これらのクラスのソース コードは次のとおりです 。http://grepcode.com/file/repo1.maven.org/maven2/org.apache.pdfbox/pdfbox/1.5.0/org/apache/pdfbox/util/PDFTextStripper.java
私は今もっと掘り下げています...