【问题标题】:How to redact PDF using iTextSharp?如何使用 iTextSharp 编辑 PDF?
【发布时间】:2014-01-23 12:38:14
【问题描述】:

我想使用我的 C# 代码以编程方式编辑 PDF 文件。我知道这很难。是否可以使用 itextsharp ?或者有什么替代方法。

【问题讨论】:

  • 您是指真正的编辑还是仅仅在页面上添加一些黑色斑点?后者很容易做到;对于前者,您可以使用 iText(Sharp) 作为框架来检索内容并通过适当的更改将它们重新写回,但您的任务仍然是巨大的。
  • 谢谢。我的要求是标记/删除的文本不应出现在 pdf 的打印/视图中,是否可以使用名为 black blobs 的文本?请指导。
  • Black blobs 隐喻地描述了在文本上绘制黑色矩形(或某种类似形式)的过程。下面的文本不会出现在打印中,也不会立即在 PDF 查看器中可见。但它仍然会在那里,并且可以被提取,例如通过复制和粘贴。如果没问题,我会描述如何做到这一点。
  • 是的,没关系,请提供详细信息/示例代码。谢谢
  • 好的。您究竟是如何获得要编辑的区域的坐标的?作为矩形的集合?四边形?通用路径?

标签: pdf itextsharp


【解决方案1】:

正如 OP 在 cmets 中对问题所澄清的那样:

标记/删除的文本不应出现在 pdf 的打印/视图中

因此,这里有一个简单的解决方案,它只是在文本上绘制一个黑色矩形。下面的文本不会出现在打印中,也不会立即在 PDF 查看器中可见。但它仍然会在那里,并且可以被提取,例如通过复制和粘贴。

此外,由于我更熟悉 Java,因此我为 iText 提供 Java 代码。不过,移植到 iTextSharp 应该很容易,将getX 替换为GetXX,将setX 替换为SetXX,将method() 替换为Method(),并使用一些.Net 流而不是FileOutputStream:

PdfReader reader = new PdfReader("source.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("target.pdf"));

PdfContentByte content = stamper.getOverContent(1);
content.setColorFill(BaseColor.BLACK);

// Do this for every rectangle given as x, y, width, heigth
content.rectangle(100f, 600f, 200f, 100f);
// Done

content.fill();

stamper.close();
reader.close();

【讨论】:

  • 谢谢,这完全可以,只要我能够正确提供坐标,但我无法提供/捕获精确坐标,尤其是因为它取决于缩放级别查看器控件。另外我知道 Acrobat SDK 现在是免费的,那么我可以用它来执行编辑吗?或者从 PDF 查看器控件获取实际坐标?
  • 我不知道您可以使用该 SDK 做什么以及如何从该查看器控件中提取正确的坐标。如果您想使用外部组件,例如不过,iText(Sharp) 显然需要知道正确的坐标。
【解决方案2】:

最近在 iTextSharp 5.5.5 中添加了编辑功能。另请参阅threadchange log

【讨论】:

  • 请注意,此功能是最近添加的,仍在开发中,以便在实际安全环境中使用。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 2013-01-16
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多