iText では、既存の PDF のさまざまな場所にフォーム フィールドとページ番号を作成するための座標が必要です。
私の PDF は動的です。そこで、識別子テキストを含む PDF を作成することにしました。TextRenderInfo を使用してテキストの座標を見つけ、それらの座標を使用してテキスト フィールドやその他のフォーム フィールドを作成します。
ParsingHelloWorld.java
public void extractText(String src, String dest) throws IOException, DocumentException {
PrintWriter out = new PrintWriter(new FileOutputStream(dest));
PdfReader リーダー = 新しい PdfReader(src);
PdfStamper stp = new PdfStamper(reader, new FileOutputStream(dest);
RenderListener リスナー = new MyTextRenderListener(out,reader,stp);
PdfContentStreamProcessor プロセッサ = 新しい PdfContentStreamProcessor(リスナー);
for ( int pageNum= 0; pageNum < reader.getNumberOfPages(); pageNum++ ){
PdfDictionary pageDic = reader.getPageN(pageNum);
PdfDictionary resourcesDic = pageDic.getAsDict(PdfName.RESOURCES);
processor.processContent(ContentByteUtils.getContentBytesForPage(reader, pageNum), resourcesDic);
}
out.flush();
out.close();
stp.close();
}
MyTextRenderListener.java
public void renderText(TextRenderInfo renderInfo) {
if (renderInfo.getText().startsWith("Fill_in_TextField")){
// creates the text fields by getting co-ordinates form the renderinfo object.
createTextField(renderInfo);
}else if (renderInfo.getText().startsWith("Fill_in_SignatureField")){
// creates the text fields by getting co-ordinates form the renderinfo object.
createSignatureField(renderInfo);
}
}
ParsingHelloWorld問題は、クラスの extractText メソッドにページ番号があることです。ページ コンテンツを内部的に処理する MyTextRenderListener クラス内で renderText メソッドが呼び出されると、pageNumber を取得して、識別子テキストが存在する特定の座標 (例: Fill_in_TextField、Fill_in_SignatureField ..etc ) で PDF にフィールドを生成できませんでした。
私のシナリオでページ番号を取得するための提案/アイデア。
前もって感謝します。