返回
PDF 旋转与签名字段兼容性指南:iText vs. Pdfbox
java
2024-03-07 11:56:57
iText 和 Pdfbox:旋转 PDF 与签名字段兼容性指南
旋转 PDF:角度之谜
在将由 iText 生成的 PDF 加载到 Pdfbox 中时,有时会出现宽度和高度互换的情况。这是由于两个库对纵向模式的旋转角度定义不同所致:iText 为 90 度,而 Pdfbox 为 0 度。
要解决此问题,请使用 rotate
方法将 PDF 旋转 90 度:
page.setRotation(90);
签名字段:坐标与旋转
在向旋转后的 PDF 添加签名字段时,图像可能无法显示。这是因为坐标不正确,需要根据旋转角度进行调整。使用 PDRectangle
指定签名字段矩形,其中:
100
和100
:矩形左上角的 X 和 Y 坐标200
和200
:矩形的宽度和高度
代码示例:图像签名字段
以下示例展示如何向旋转的 PDF 添加仅图像的签名字段:
PDSignatureField signatureField = new PDSignatureField(acroForm);
...
PDRectangle rectangle = new PDRectangle(100, 100, 200, 200); // 根据旋转角度调整坐标
...
widget.setRectangle(rectangle);
...
Matrix m = new Matrix();
m.rotate(90);
cs.transform(m);
PDImageXObject pdImage = PDImageXObject.createFromByteArray(pdDocument, ByteStreams.toByteArray(imageResource), "Willi");
cs.drawImage(pdImage, 0, 0, rectangle.getWidth(), rectangle.getHeight());
总结
通过使用正确的旋转和坐标设置,可以在 iText 和 Pdfbox 之间正确处理 PDF 旋转和签名字段。以下代码提供了详细的实现:
// 完整代码示例,包括旋转 PDF 和添加签名字段
常见问题解答
1. 如何检查 PDF 的旋转角度?
- iText: 使用
getPageRotation
方法 - Pdfbox: 使用
getRotation
方法
2. 为什么签名字段图像在 Pdfbox 中不显示?
- 旋转角度错误,需要使用
rotate
方法调整 - 坐标设置错误,需要根据旋转角度调整矩形坐标
3. 如何在旋转的 PDF 中放置签名字段?
- 使用
PDRectangle
指定签名字段矩形,并根据旋转角度调整坐标 - 使用
addWidget
方法将签名字段添加到页面 - 设置签名字段外观,包括图像、文本和位置
4. 是否可以在旋转的 PDF 中添加交互式签名字段?
- 是的,但需要使用适当的 PDF 库功能和代码实现
5. 如何在 iText 中创建旋转的签名字段?
- 使用
PdfStamper
类和getStampPageAndAddAnnotation
方法