テンプレートを使用して新しいPDFを作成し、新しいPDFをテンプレートPDFにオーバーレイし、その結果をストリームに書き込むコードがあります。このすべてはPDFBox 2.0.4を使用しています。生成されたPDFからテキストをコピーしてPDF形式のガベージにコピーする
問題は、生成されたPDFのテキストをテキストエディタにコピーして貼り付けた結果、ガベージテキストが表示されることです。
これは、自分のコードで追加されたテキストに対してのみ発生し、元のテンプレートのテキストは正常に機能します。私が追加するテキストは、カスタムフォントを使用して追加されます。
テキストをコピー貼り付けできるように、生成されたPDFを修正するにはどうすればよいですか?
SSCCE:
public class PDFTest {
private static final String FONT = "/fonts/font.ttf";
public static void main(final String... args) throws IOException, FontFormatException {
final Overlay overlay = new Overlay();
overlay.setInputPDF(newDocument("Input text", 400));
overlay.setAllPagesOverlayPDF(newDocument("Test text", 200));
try (final PDDocument document = overlay.overlay(new HashMap<>())) {
document.save("example.pdf");
}
}
private static PDDocument newDocument(final String text, final int offsetY) throws IOException, FontFormatException {
final PDDocument document = new PDDocument();
document.addPage(insertTextInPage(document, text, offsetY));
return document;
}
private static PDPage insertTextInPage(final PDDocument document, final String text, final int offsetY) throws IOException, FontFormatException {
try (final InputStream fontStream = PDFTest.class.getResourceAsStream(FONT)) {
final PDFont normalFont = PDType0Font.load(document, fontStream);
final PDPage page = new PDPage();
try (final PDPageContentStream contentStream = new PDPageContentStream(document, page, APPEND, false)) {
addTextBlock(contentStream, normalFont, text, offsetY);
}
return page;
}
}
private static void addTextBlock(final PDPageContentStream contentStream, final PDFont font, final String text, final int offsetY)
throws IOException {
contentStream.beginText();
contentStream.setFont(font, 16);
contentStream.newLineAtOffset(20, offsetY);
contentStream.showText(text);
contentStream.endText();
}
}
操作の前後に例のPDFペアを共有してください。また、問題の再現を可能にする十分なコード(つまり、[sscce](http://sscce.org)が望ましい)を表示してください。 – mkl
使用しているPDFBoxのバージョンをお知らせください。 @ Tilman done。 –
私はまたバージョン2.0.8を使用しようとしましたが、テキストが文字化けしてしまったので、始めたバージョンに戻しました。 –