iText 7.1.0 扁平化签名字段,外观拉伸
iText 7.1.0 flattening signature field with appearance stretched
我有一个 PDF (https://github.com/giacgbj/Whosebug/blob/master/xxx.pdf),由第三方以某种方式进行了数字签名,其签名具有外观
当我使用以下代码 (iText 7.1.0) 拼合 PDF (https://github.com/giacgbj/Whosebug/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();
}
签名的外观拉伸成这样:
使用 PDFBox 或命令行参数(如 GhostScript 或 convert (imagemagick) 或 pdf2ps/ps2pdf 拼合同一个 PDF 有效。
这种行为的原因是什么?
问题是签名注释有这个 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 values, though, the order is fixed: 四个数字的数组,分别给出左、下、右、上坐标。 但是这里讨论的问题也出现了如果使用了正确的顺序。)
根据 PDF 规范,外观将被拉伸以匹配注释矩形。
不过,在展平期间,使用以下变换矩阵将之前的签名外观添加到页面:
1 0 0 1 35 115
它正确地将其左下角定位在 (35,115),但使用单位矩阵映射矩形;因此,它没有被错误地拉伸到 180x40 的尺寸,而是保持 100x50 的尺寸,这是您观察到的拉伸(实际上是缺失的拉伸!)。
简而言之,您似乎发现了 iText 中的错误,缺少转换...
我有一个 PDF (https://github.com/giacgbj/Whosebug/blob/master/xxx.pdf),由第三方以某种方式进行了数字签名,其签名具有外观
当我使用以下代码 (iText 7.1.0) 拼合 PDF (https://github.com/giacgbj/Whosebug/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();
}
签名的外观拉伸成这样:
使用 PDFBox 或命令行参数(如 GhostScript 或 convert (imagemagick) 或 pdf2ps/ps2pdf 拼合同一个 PDF 有效。
这种行为的原因是什么?
问题是签名注释有这个 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 values, though, the order is fixed: 四个数字的数组,分别给出左、下、右、上坐标。 但是这里讨论的问题也出现了如果使用了正确的顺序。)
根据 PDF 规范,外观将被拉伸以匹配注释矩形。
不过,在展平期间,使用以下变换矩阵将之前的签名外观添加到页面:
1 0 0 1 35 115
它正确地将其左下角定位在 (35,115),但使用单位矩阵映射矩形;因此,它没有被错误地拉伸到 180x40 的尺寸,而是保持 100x50 的尺寸,这是您观察到的拉伸(实际上是缺失的拉伸!)。
简而言之,您似乎发现了 iText 中的错误,缺少转换...