在Adobe Reader 11中删除文本对象

时间:2013-02-26 07:09:19

标签: pdf pdf-generation adobe-reader

在adobe acrobat x中我正在插入文本对象,当它在adobe reader 10中打开时它正常打开。但是在adobe reader 11中,当我点击该pdf文件时,文本对象被删除。为什么会发生这种情况?怎么解决? 源pdf文件click here

在adobe reader 11中双击它时有问题的pdf文件。 click here

1 个答案:

答案 0 :(得分:1)

简而言之:

您尝试通过更改正常外观流来更改自由文本注释的内容。

这是不够的:符合标准的PDF查看器可能会忽略此条目并提供自己的外观。因为旧的Adobe Reader版本选择了运气 不要忽视您的更改。

因此,您还需要更改PDF查看器创建自己外观的信息,即最重要的 RC 的富文本值(在自由文本注释字典中)应该用于生成注释的外观以及内容值,这是应该为注释显示的文本。

此外,您的PDF中存在缺陷:

  • 第一次尝试result.pdf中的交叉引用表已被破坏;
  • 源文件中自由文本注释的意图( IT 值)拼写错误。

详细说明:

您的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并附上正确的交叉参考,让我们更深入地了解它。

Adob​​e 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查看器知道它最终将不得不创建新的外观,除非当前外观与创建它一样无论如何,观众可能更喜欢从富文本甚至内容值的外观开始重新开始。