【问题标题】:iText 7.1.0 flattening signature field with appearance stretchediText 7.1.0 展平签名字段,外观被拉伸
【发布时间】:2018-05-27 14:46:48
【问题描述】:

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

当我使用以下代码 (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();
}

签名的外观是这样拉伸的:

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

这种行为的原因是什么?

【问题讨论】:

    标签: itext pdfbox itext7


    【解决方案1】:

    问题是签名注解有这个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 值,但是,顺序是固定的:一个由四个数字组成的数组,分别给出左、下、右和上坐标。但是如果使用正确的顺序,这里讨论的问题也会出现。)

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

    不过,在展平期间,以前的签名外观会使用以下变换矩阵添加到页面中:

    1 0 0 1 35 115
    

    它正确地将其左下角定位在 (35,115),但使用单位矩阵映射矩形;因此,它错误地没有拉伸到 180x40 的大小,但仍然是 100x50,这是您观察到的拉伸(实际上是缺失的拉伸!)。

    简而言之,您似乎在 iText 中发现了一个错误,即缺少转换...

    【讨论】:

    • this question 中记录了同样的问题。
    • 所以这个bug存在于所有iText版本(1.X-7.X)中。
    • 它已添加到 iText Software 的内部错误跟踪器中。
    • 我怀疑奇怪的 BBox 来自 PDFBox 中的一个长期错误。 issues.apache.org/jira/browse/PDFBOX-4011
    • 那么,即使原始 PDF 将使用下一版本的 PDFBox 生成,使用当前版本的 iText 将其展平仍然会产生错误? @AmedeeVanGasse 有没有办法在 iText 上关注票?
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多