gpt4 book ai didi

ios - 从 iPad 发送电子邮件时 PDF 签名会轮换

转载 作者:行者123 更新时间:2023-11-29 03:40:59 25 4
gpt4 key购买 nike

我正在 ASP .net 应用程序中使用 iTextSharp 生成 PDF 文档。

我的用户正在 iPad 上打开 PDF,并添加签名 [绘图],然后通过电子邮件发送签名的文档。

签名在 iPad 上看起来正确,但一旦通过电子邮件发送,签名就会逆时针旋转 90 度。如果我改为在线保存到 Acrobat,则不会出现该问题。

Rotated Signatures

编辑:我无法分享原始 pdf,因为它们包含法律和财务信息。我可以分享我们使用的另一个测试 pdf,它也有同样的问题。它不是由 itext 生成的,但似乎表明问题出在 adobe iOS 应用程序上,而不是创建它的应用程序上。

The e-mailed PDF (with rotated drawing)

The uploaded PDF from Acrobat.com (working as intended)

其他信息:

Apple iPad 2 MC773LL/A 平板电脑(16GB,Wifi + AT&T 3G,黑色)第二代iOS版本:6.0.1(10A523)Adobe Reader 版本 11.0.0

最佳答案

简而言之

e-mailed PDF基于uploaded PDF 。变化在于原始文档(上传的 PDF)包含两个注释,这些注释在更改后的文档(通过电子邮件发送的 PDF)中已被扁平化,即存储在页面内容中。

不幸的是,进行扁平化的软件只是将用于显示注释外观的命令附加到页面内容,而忽略了转换矩阵已在现有页面内容中更改(旋转)的事实。因此,在表单展平后,签名也会旋转。

因此,进行这种形式扁平化的软件必须进行修复(简单地附加到内容而不考虑变换矩阵实际上可能已被更改是不行的!)。

不过,作为短期解决方案(以防无法轻松替换进行拼合的软件),您可以考虑使用不使用旋转的基本 PDF 来创建横向 PDF。

如果使用 iText(Sharp) 创建文档(您在问题中提到),这可能意味着使用

new Document(new Rectangle(792, 612));

(cf the iText(Sharp) sample HelloWorldLandscape2.java / HelloWorldLandscape2.cs)

代替

new Document(PageSize.LETTER.Rotate()));

(cf. the iText(Sharp) sample HelloWorldLandscape1.java / HelloWorldLandscape1.cs)

iText in Action — 2nd Edition 中所述,

there are subtle differences internally [which] will matter when you want to manipulate the PDF.

详细

在原始PDF中,页面字典通过注释的方式引用签名

3 0 obj
<<
/Type/Page
/Parent 2 0 R
/MediaBox[ 0 0 612 792]
/Rotate 270
/Contents 5 0 R
/Resources<</Font<</F1 4 0 R>>/ProcSet[/PDF/Text]>>
/Annots 11 0 R
>>
endobj
11 0 obj
[ 12 0 R 15 0 R 16 0 R 19 0 R]
endobj

对象 12 和 16 是分别引用对象 14 和 18 中的外观流的墨迹注释。

对象5集合中的内容流

0.0000 -1.0000 1.0000 0.0000 0.0000 0.0000 cm

如您所见,页面旋转(/旋转 270),内容流向另一个方向旋转(0 -1 1 0 0 0 cm)启用直立打印。不过,注释外观流不受此反向旋转的影响,因此,它们自己在内部执行此操作。

在扁平化页面中,它看起来像这样

3 0 obj
<<
/Type/Page
/Parent 2 0 R
/MediaBox[ 0 0 612 792]
/Rotate 270
/Resources
<<
/Font<</F1 4 0 R>>
/ProcSet[/PDF/Text]
/XObject<</CprRpt2 14 0 R/CprRpt3 18 0 R>>
>>
/Annots 11 0 R
/Contents[ 5 0 R 20 0 R]>>
endobj
11 0 obj
[]
endobj

对象20中的内容流包含

q 1 0 0 1 223.453 24.0703  cm /CprRpt2 Do Q 
q 1 0 0 1 410.246 59.9062 cm /CprRpt3 Do Q

因此,注释被删除(对象 11 中的空数组),但 Ink 注释的外观流现在直接包含在内容流本身中(/CprRpt2 Do/CprRpt3 定义为引用资源中的对象 14 和 18。

因此,这些外观流现在也受到来自对象 5 (0 -1 1 0 0 0 cm) 的旋转变换矩阵的影响,因为流 20 在内容流数组中位于流 5 之后[5 0 R 20 0 R]。不过,它们(见上文)本身也会抵消页面旋转。因此,本质上,它们的旋转现在被抵消了两次,并且它们以相反的方式旋转。

关于ios - 从 iPad 发送电子邮件时 PDF 签名会轮换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18452587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com