iText 7.1.0展平签名字段,外观拉长

时间:2017-12-13 16:15:07

标签: itext pdfbox itext7

我有一个PDF(https://github.com/giacgbj/stackOverflow/blob/master/xxx.pdf),以某种方式由第三方进行数字签名,其签名有外观

original

当我使用以下代码(iText 7.1.0)展平PDF(https://github.com/giacgbj/stackOverflow/blob/master/xxxFlattened.pdf)时

try (PdfWriter output = new PdfWriter("output.pdf");
            PdfDocument input = new PdfDocument(new PdfReader("input.pdf"), output)) {
   PdfAcroForm.getAcroForm(input, true).flattenFields();
}

签名的外观如下所示:

stretched

使用PDFBox或命令行参数(如GhostScript或convert(imagemagick)或pdf2ps / ps2pdf)展平相同的PDF。

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:4)

问题是签名注释具有 Rect 值:

[35.0 115.0 215.0 155.0]

是一个矩形,其左下角为(35,115),左上角为(215,155),即一个180宽和40高的矩形。

但它的外观有 BBox 值:

[100.0 50.0 0.0 0.0]

是100个单位宽和50个高的矩形。 (严格来说,这并不完全有效:通常在PDF中,矩形写成四个数字的数组,给出一对对角的坐标。对于 BBox 值,但是,顺序是固定的:分别给出左,下,右和顶部坐标的四个数字的数组。但是如果使用了正确的顺序,这里讨论的问题也会出现。)< / p>

根据PDF规范,外观将被拉伸以匹配注释矩形。

在展平过程中,使用以下转换矩阵将以前的签名外观添加到页面中:

1 0 0 1 35 115

正确地将其左下角定位在(35,115),但使用单位矩阵映射矩形;因此,它不正确地伸展到180x40的尺寸,但仍然是100x50,这是你观察到的伸展(实际上是缺失的伸展!)。

简而言之,您似乎在iText中发现了一个错误,这是一个缺失的转换...