【问题标题】:Delete last page of PDF file without re-writing the PDF file again? [duplicate]删除 PDF 文件的最后一页而不重新编写 PDF 文件? [复制]
【发布时间】:2016-02-18 13:58:39
【问题描述】:

在控制台应用程序中使用 c#,如何删除 PDF 文件的最后一页无需重新编写 PDF 文件?

我知道如何将 PDF 重写为除最后一页之外的新 PDF,但我尝试使用 iTextSharp再次重写 PDF,但我失败了,所以我需要帮助。

谢谢

【问题讨论】:

  • 这个答案没有帮助吗? stackoverflow.com/questions/7246137/…
  • @DntQuitPls 感谢您的快速回复,但这个链接不是我的答案,因为我问的是删除页面再次重写 PDF 文件..我仍然需要帮助
  • 做不到。不适用于 iTextSharp,也不适用于任何其他库。您总是需要第二个文件,它可以是临时文件,完成后重命名临时文件。
  • “无需重写”是什么意思?您的意思是在原地更改文件,而不是创建一个新文件来替换现有文件?
  • 这个问题相当于“我想做一个不打碎鸡蛋的煎蛋”。这是您期望在 4 月 1 日提出的问题。也许@AhmedKajoo 使用的日历与我们不同。

标签: c# pdf itextsharp


【解决方案1】:

我想最简单的方法是在交叉引用表中将最后一页的对象标记为空闲。如果您有“旧式”交叉引用表,它位于文件末尾,看起来像

外部参照 0 42 0000000003 65535 f 0000000017 00000 0000000081 00000 ...

那么您需要做的就是将相应对象记录的n 更改为f

如果您有使用交叉引用流的文件,那么它会更复杂一些,因为流通常是压缩的,虽然您在重新压缩后只更改其中的一个/几个字节,但它的长度可能会改变,因此它不适合原来的空间。

因此,最安全的选择似乎是对将最后一页对象标记为空闲的文件进行增量更新。这意味着将新的交叉引用信息添加到原始文件的末尾,其中所需的页面对象被标记为空闲。或者也许更好的是编写新版本的 Page Tree 对象...

这些解决方案要求您知道最后一页的对象ID,我不知道itextsharp,所以我不知道它会帮助您找到它。您可能必须自己分析文件才能找到 id。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多