在adobe acrobat x中我正在插入文本对象,当它在adobe reader 10中打开时它正常打开。但是在adobe reader 11中,当我点击该pdf文件时,文本对象被删除。为什么会发生这种情况?怎么解决? 源pdf文件click here
在adobe reader 11中双击它时有问题的pdf文件。 click here
答案 0 :(得分:1)
简而言之:
您尝试通过更改正常外观流来更改自由文本注释的内容。
这是不够的:符合标准的PDF查看器可能会忽略此条目并提供自己的外观。因为旧的Adobe Reader版本选择了运气 不要忽视您的更改。
因此,您还需要更改PDF查看器创建自己外观的信息,即最重要的 RC 的富文本值(在自由文本注释字典中)应该用于生成注释的外观以及内容值,这是应该为注释显示的文本。
此外,您的PDF中存在缺陷:
详细说明:
您的result.pdf已损坏。不同的PDF查看器可能会以不同方式显示损坏的PDF。
一些细节:
它是根据你的Src.pdf附加模式创建的,但是原始修订版还对其/ Pages对象进行了以下更改:
来源:
6 0 obj
<</Count 6
/Type /Pages
/Kids [ 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ]
>>
endobj
结果:
6 0 obj
<</Count 3
/Type /Pages
/Kids [ 7 0 R 8 0 R 9 0 R 12 0 R 11 0 R 10 0 R ]
>>
endobj
所以最后三页的顺序改变了(这是可以的)而 / Count 从6减少到3。这是不一致的,因为仍然存在6个子对象但根据PDF specification ISO 32000-1,计数是
作为页面树中此节点后代的叶节点(页面对象)的数量。
此外,附加修订版的交叉引用流已被破坏。
xref
0 1
0000000000 65535 f
24 1
0001465240 00000 n
57 1
0001466075 00000 n
66 1
0001466909 00000 n
73 1
0001467744 00000 n
93 1
0001473484 00000 n
131 1
0001478703 00000 n
条目长度为19个字节,包括它们分别结束的单字节换行符。但是,根据spec,
每个条目的长度应为20个字节,包括行尾标记。
使用中条目的格式应为:nnnnnnnnnn ggggg n eol
其中[...] eol应为2个字符的行尾序列
PDF中可能存在更多错误,但您可能希望开始修复这些错误。
修改强>
现在使用新的PDF Pay-in.pdf并附上正确的交叉参考,让我们更深入地了解它。
Adobe Preflight抱怨许多事件:
[...]
An unexpected value is associated with the key
Key: IT
Value: /FreeTextTypewriter
Type: CosName
Formal Representation: Annot.AnnotFreeText
Cos ID: 86
Traversal Path: ->Pages->Kids->[0]->Annots->[13]
[...]
好的,让我们看看那个对象86:
86 0 obj
<< /P 8 0 R
/Type /Annot
/CreationDate (D:20130219194939+05'30')
/T (winman)
/NM (0f202782-2274-44b8-9081-af4010be86d4)
/Subj (Typewritten Text)
/M (D:20130219195100+05'30')
/F 4
/Rect [ 53.2308 33.488 552.088 826.019 ]
/DS (font: Helv 12.0pt;font-stretch:Normal; text-align:left; color:#000000 )
/AP <</N 107 0 R >>
/Contents (wwww)
/IT /FreeTextTypewriter
/BS 108 0 R
/Subtype /FreeText
/Rotate 90
/DA (16.25 TL /Cour 12 Tf)
/RC (<?xml version="1.0"?>
<body xmlns="http://www.w3.org/1999/xhtml"
xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"
xfa:APIVersion="Acrobat:10.0.0"
xfa:spec="2.0.2"
style="font-size:12.0pt;text-align:left;color:#000000;font-weight:normal;
font-style:normal;font-family:Helv;font-stretch:normal">
<p dir="ltr">
<span style="line-height:16.3pt;font-family:Helvetica">wwww</span>
</p>
</body>)
>>
endobj
Preflight表示对行/IT /FreeTextTypewriter
不满意。查看PDF specification再次发现带/Subtype /FreeText
的注释,即12.5.6.6节中指定的自由文本注释:
IT 名称 (可选; PDF 1.6)描述自由文本注释意图的名称(另请参见表170中的IT条目)。以下值应有效:
FreeText 注释旨在用作纯文本自由文本注释。普通的自由文本注释也称为文本框注释。
FreeTextCallout 注释旨在用作标注。标注通过CL中指定的标注线与页面上的区域相关联。
FreeTextTypeWriter 该注释旨在用作点击类型或打字机对象,并且不会绘制标注线。
默认值: FreeText
因此,您的值 FreeTextTypewriter 无效(请记住,PDF名称区分大小写!)。因此,注释(稍微)被破坏,这可能已经导致各种问题。
但是,此处还有其他重要条目可用于了解您的问题:您在附加更改中执行的操作是将此注释的对象107中的外观流(根据/AP <</N 107 0 R >>
)替换为另一个。但是这个注释也包含 RC 值,根据specification是
富文本字符串(请参阅12.7.3.4,“富文本字符串”),该字符串将用于生成注释的外观。
因此,任何PDF查看器都可以从富文本描述中重新生成外观,特别是当12.5.2节中的规范说明 AP 字典
的内容时单个注释处理程序可以忽略此条目并提供自己的外观。
因此,简单地替换正常的外观流不足以永久地更改该注释的外观,您必须更改外观字典并至少删除外观的任何替代来源。
此外,条目/Contents (wwww)
也不会被附加的更改所取代。因此,试图决定是否使用外观流的PDF查看器会以某种方式创建新外观,因为外观流绝不代表该值。
特别是在开始操作自由文本时(例如,在您的情况下单击PDF时),PDF查看器知道它最终将不得不创建新的外观,除非当前外观与创建它一样无论如何,观众可能更喜欢从富文本甚至内容值的外观开始重新开始。