返回

PDF 旋转与签名字段兼容性指南:iText vs. Pdfbox

java

iText 和 Pdfbox:旋转 PDF 与签名字段兼容性指南

旋转 PDF:角度之谜

在将由 iText 生成的 PDF 加载到 Pdfbox 中时,有时会出现宽度和高度互换的情况。这是由于两个库对纵向模式的旋转角度定义不同所致:iText 为 90 度,而 Pdfbox 为 0 度。

要解决此问题,请使用 rotate 方法将 PDF 旋转 90 度:

page.setRotation(90);

签名字段:坐标与旋转

在向旋转后的 PDF 添加签名字段时,图像可能无法显示。这是因为坐标不正确,需要根据旋转角度进行调整。使用 PDRectangle 指定签名字段矩形,其中:

  • 100100:矩形左上角的 X 和 Y 坐标
  • 200200:矩形的宽度和高度

代码示例:图像签名字段

以下示例展示如何向旋转的 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 方法