IText如何在页面上调整pdf

时间:2013-12-17 21:12:57

标签: java pdf printing itext

有没有办法在IText内的页面上精确微调PDF的打印位置?

这是我的问题:看起来自然会因打印机制造商的变化或打印机的使用年限等原因,打印PDF文档时会发生微小的变化。这些变化通常非常小,但是对于2个样品打印机(激光和相同型号和制造商),文本放置的变化在打印机之间高达1-2毫米。这对于大多数正常打印都是好的,但是对于这个任务,这超出了可接受的公差范围。

我对此的直觉反应是提供一些能够对打印发生的确切位置进行微调,从而能够解释打印机本身的任何变化。但是,对于发送到单个打印机的所有作业,打印似乎都是一致的。

目前,我在Adobe Acrobat Pro X中创建了一个PDF,其中包含表单字段,然后由java应用程序填写并发送到打印机。

感谢您提出任何建议

1 个答案:

答案 0 :(得分:2)

我首次尝试解决此问题的方法是尝试更改打印机驱动程序的默认设置......不知何故。但我无法提供任何有用的指示。

如果要调整PDF,则应该更改页面边界以移动内容。例如,对于只有MediaBox的简单PDF,此代码会将第一页的内容向下移动50个单位。

PdfReader reader = new PdfReader("in.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("out.pdf"));
PdfDictionary pagedict = reader.getPageN(1);
PdfArray mediabox = pagedict.getAsArray(PdfName.MEDIABOX);
mediabox.set(1, new PdfNumber(mediabox.getAsNumber(1).intValue()+50));
mediabox.set(3, new PdfNumber(mediabox.getAsNumber(3).intValue()+50));
stamper.close();

您必须相应地调整任何其他框(CropBox,BleedBox等)。有关不同页面边界的信息,请查看PDF规范。