了解PdfCleanUpProcessor

时间:2017-05-16 01:01:35

标签: itext

在iText中,当使用PdfCleanUpProcessor时,相应的对象是内联编辑的还是附加在PDF末尾的新对象,以便在渲染时显示新对象?

1 个答案:

答案 0 :(得分:0)

是否在PDF 的末尾附加更改或添加的对象取决于您构建PdfStamper的方式:

  • 如果以append模式构造它(使用true作为第四个构造函数参数),则在末尾附加任何更改或添加,并且原始对象都保留在文件中。< / p>

  • 否则内容的顺序可能会发生很大变化,添加的间接对象会很早写入,可能会随时写入更改的间接对象,删除未使用的对象。

因此,关于你的问题:

  

当使用PdfCleanUpProcessor时,相应的对象是内联编辑的还是附加在PDF末尾的新对象,以便在渲染时显示新对象?

您决定!您可以选择使用或不使用append模式。

由于PdfCleanUpProcessor特别适用于编校用例,因此前一种选择通常没有意义......

但有一个问题:PDF是一种非常通用的格式。特别是,您可以创建PDF,其中多个对象(页面,表单xobjects,...)共享相同的内容流。

因此,iText无法操纵现有的内容流,但必须创建一个新的内容流来替换旧编辑的对象 - 在共享内容流的情况下,其中一个对象中标记为编校的信息可能不会被标记在另一个中进行编辑,因此必须保留在原始流中。

通常这没有问题:如果在流的所有使用中将信息标记为编校,则原始流将变为未使用状态,因此最终将被删除。如果信息在流的某些用途中没有标记为编辑,那么信息显然是留在那里。

但是!并非所有内容流的使用都必须显示整个流内容。他们甚至可以显示内容流的独家部分!在这种情况下,标记PDF以进行编辑的人很可能仅标记在其上可见的页面上的数据的出现,而不是在其在屏幕外的其他页面上。在这种情况下,信息将保留在其他页面的屏幕外区域中的编辑文件中。

我还没有检查过iText 7清理模块的源代码,我也没有测试过这种情况。所以我不能说PdfCleanUpProcessor的改进版本是否采取了预防措施来处理这个问题。