是否可以通过修改原始页面对象

时间:2016-04-25 13:17:54

标签: pdf pdf-generation

我试图通过使用PDF版本控制系统将一些数据附加到PDF的页面(例如,将数据附加到有效PDF的末尾,并使用它自己的XREF,不是什么)。

现在我只是想做一个概念验证。我可以在现有页面上添加橙色方块,但它需要我解析原始页面对象,更改Contents数组,并添加我附加的数据。例如:

原始页面:

5 0 obj
<<
/Parent 4 0 R
/Contents[2 0 R 8 0 R 3 0 R]
/Type
  /Page
/Resources
  <<
  /ExtGState
    <<
    /GSa 6 0 R
    >>
  /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
  /XObject
    <<
    /Im9 9 0 R
    >>
  /ColorSpace
    <<
    /CSp/DeviceRGB/CSpg/DeviceGray/PCSp 7 0 R
    >>
  /Font
    <<
    /F11 10 0 R
    /F6 11 0 R
    /Xi0 1 0 R
    >>
  >>
/MediaBox[0 0 595 842]
/Annots 12 0 R
>>
endobj

修改页面:

5 0 obj
<<
/Parent 4 0 R
/Contents[2 0 R 8 0 R 3 0 R 2 0 R 901 0 R 3 0 R]
/Type
  /Page
/Resources
  <<
  /ExtGState
    <<
    /GSa 6 0 R
    >>
  /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
  /XObject
    <<
    /Im9 9 0 R
    >>
  /ColorSpace
    <<
    /CSp/DeviceRGB/CSpg/DeviceGray/PCSp 7 0 R
    >>
  /Font
    <<
    /F11 10 0 R
    /F6 11 0 R
    /Xi0 1 0 R
    >>
  >>
/MediaBox[0 0 595 842]
/Annots 12 0 R
>>
endobj

正如您所看到的,我只是改变了Contents数组以插入我自己的数据(一个带有对象ID&#34; 901&#34;的橙色方块)。

是否可以在不解析的情况下实现相同的结果修改原始页面对象?

1 个答案:

答案 0 :(得分:1)

由于/ Contents数组是直接对象,因此修改整个页面对象,因此您必须解析页面对象并使用new / Contents数组重写它。

如果/ Contents是一个间接对象,那么你可以只修改数组而不触及页面对象。