iText中的图像定位 - Java

5

我正在尝试阅读一个PDF文件并将其数据复制到另一个PDF文件中。第一个PDF文件包含一些文本和图像,我希望在第二个PDF文件中恰好在文本结束的位置(也就是PDF文件的末尾)写入图像。目前它只会打印在顶部。我该如何进行更改?

PdfReader reader = null;
reader = new PdfReader(Var.input);
Document document=new Document();
PdfWriter writer = null;
writer = PdfWriter.getInstance(document,new FileOutputStream(Var.output));
PdfImportedPage page = writer.getImportedPage(reader, 1); 
reader.close();  
document.open();
PdfContentByte cb = writer.getDirectContent();
// Copy first page of existing PDF into output PDF
document.newPage();
cb.addTemplate(page, 0, 0);

// Add your new data / text here
Image image = null;
image = Image.getInstance (Var.qr);
document.add(image);
document.close();
2个回答

9

哦,这很棒。但是我能不能确定X和Y是文本结束的位置?或者在最后一页的底部中心? - Anurag Ramdasan
我知道有几种方法可以做到这一点,但从你的代码来看,mkl建议的文本边距似乎是获取X和Y的最简单方法。另一种需要更多工作的方法是逐个读取和写入原始PDF的部分,并在进行计算时计算X和Y位置,虽然速度较慢,但这样您就可以确切地知道图像可以放置在哪里,并且可以在文本周围添加图像。 - sorifiend
实际上,Anurag可能需要稍微更改我指向的示例。它会找到所有文本的边距。这符合他所说的,但如果他的PDF包含页脚,则该示例也将其视为文本的一部分。因此,他需要调整代码以考虑页脚。 - mkl
谢谢。它完全按照我的要求工作了。 :) 但是,我是否可以使用pdf stamper在特定坐标处放置文本呢? - Anurag Ramdasan

2
你应该使用PdfStamper而不是带有导入页面的PdfWriter。你的方法会丢弃所有的交互内容。你也可以在那里使用sorifiend的想法。
要确定给定页面上文本的结束位置,请参考iText in Action,第二版示例ShowTextMargins,它解析PDF并添加一个显示文本边距的矩形。

谢谢。它完全按照我想要的方式工作了。:) 但是,我能否也使用PDF Stamper来在指定坐标上放置文本呢? - Anurag Ramdasan
可以的。不过我需要查一下如何操作... 我的使用案例中并不包括向现有文档添加文本。 - mkl
我需要添加一组图像和文本,结果发现图像很容易处理,但是文本有点难以处理。如果能得到一些帮助就好了 :) - Anurag Ramdasan
请免费查看《iText in Action, 2nd Edition》第6章,网址为http://www.manning.com/lowagie2/samplechapter6.pdf 。子章节6.3.1应该可以帮助你。而且整个章节都值得一读... - mkl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接