私はこの件について多くの研究をしましたが、私が見つけたものはすべて「スタンパーのgetOverContent関数を使用する」ことです。私はこれを作った、それはまだ動作しません。スキャンされた文書にテキストを設定する
私はレパートリーのPDFを一緒にマージするプログラムを作成しました。これは、この新しいドキュメントをページングするよりも(あなたが私が書いているものに従うことができれば幸いです)。元のPDFは自己作成(PDFで直接保存)されているか、スキャンされていません。それは問題があるこれらの最後のものである。ページ区切りは最初に表示されますが、秒単位では表示されません(おそらく存在しますが、画像の後ろにあるはずです)!
ここではページネーションのコードは、私が間違っている人のアイデアがありますか?
PdfReaderリーダー=新しいPdfReader(ソース);:
PdfReader reader = new PdfReader(source);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destination));
for (int i = start + 1; i <= reader.getNumberOfPages(); i++) {
Phrase noPage = new Phrase((i - start) + "", new Font(FontFamily.COURIER, 14));
float x = reader.getPageSize(i).getRight(20);
float y = reader.getPageSize(i).getTop(20);
PdfContentByte content = stamper.getOverContent(i);
content.beginText();
ColumnText.showTextAligned(content,Element.ALIGN_CENTER, noPage, x, y, 0);
content.endText();
}
stamper.close();
reader.close();
おかげ
はブルーノからの回答後、私は次のことを行いました PdfStamperスタンパー=新しいPdfStamper(リーダー、新しいFileOutputStream(宛先));
for (int i = start + 1; i <= reader.getNumberOfPages(); i++) {
Phrase noPage = new Phrase((i - start) + "", new Font(FontFamily.COURIER, 14));
float x = reader.getCropBox(i).getRight(20);
float y = reader.getCropBox(i).getTop(20);
PdfContentByte content = stamper.getOverContent(i);
ColumnText.showTextAligned(content,Element.ALIGN_CENTER, noPage, x, y, 0);
}
stamper.close();
reader.close();
しかし、それはまだ例について
を働いていない:https://www.transfernow.net/24axn1g4wq4l
'/ MediaBox'を調べることによって' x'と 'y'の値が得られますが、'/MediaBox'よりも小さい '/ CropBox'もあります。その場合、テキストは '/ MediaBox'の境界内に追加されますが、'/CropBox'の境界の外に、したがってページの可視領域外に追加されます。 「PDF文書のページ幅と高さを取得する方法」(http://developers.itextpdf)を参照してください。com/question/how-get-pdf-page-width-and-height) –
また、無効なPDFを作成しています。 ISO-32000-1によれば、テキストオブジェクトをネストすることは禁じられています。あなたは 'ContentText.showTextAligned()'と組み合わせて 'content.beginText()' /'content.endText()を使っています。 'ColumnText.showTextAligned()'が 'BT' /' ET'演算子を追加するので、 'content.beginText();'と 'content.endText();'行を削除してください。 –