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 にフィールドを生成できませんでした。
私のシナリオでページ番号を取得するための提案/アイデア。
前もって感謝します。