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 reader = new PdfReader(src); PdfStamper stp = new PdfStamper(reader, new FileOutputStream(dest); RenderListener listener = new MyTextRenderListener(out,reader,stp); PdfContentStreamProcessor processor = new PdfContentStreamProcessor(listener);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来在标识符文本所在的特定坐标处生成PDF中的字段(例如Fill_in_TextField,Fill_in_SignatureField..etc)。 / p>
在我的方案中获取页码的任何建议/想法。
提前致谢。
答案 0 :(得分:1)
这很容易。将参数添加到MyTextListener
:
protected int page;
public void setPage(int page) {
this.page = page;
}
现在,当您遍历ParsingHelloWorld
中的页面时,将页码传递给MyTextListener
:
listener.setPage(pageNum);
现在,您可以使用renderText()
方法访问该号码,然后将其传递给createTextField()
方法。
请注意,我认为你的循环是错误的。页码不是从第0页开始,而是从第1页开始。