如何使用iTextSharp删除pdf文件中的文本

如何使用iTextSharp删除pdf文件中的文本,itext,Itext,我想替换PDF文件内容中的特殊字符串 e、 我想用“abc”代替“111” 我正在使用iTextSharp和C#。这(通常)是不可能的 PDF是一种呈现文档。不是结构化文档(至少默认情况下不是) 结构化文档: 该文档包含有关内容的信息 e、 g.“这是一段” e、 g.“这是该段下方的标题” 等 呈现文档: 字符“H”在位置50处绘制,50处为黑色 字符“e”在位置55处绘制,50处为黑色 等 删除(或添加)内容的问题是对内容进行回流 想象一下下面的文字: 曾经是一个沉闷的午夜, 当我疲

我想替换PDF文件内容中的特殊字符串

e、 我想用“abc”代替“111”

我正在使用iTextSharp和C#。

这(通常)是不可能的

PDF是一种呈现文档。不是结构化文档(至少默认情况下不是)

结构化文档:

  • 该文档包含有关内容的信息
  • e、 g.“这是一段”
  • e、 g.“这是该段下方的标题”
呈现文档:

  • 字符“H”在位置50处绘制,50处为黑色
  • 字符“e”在位置55处绘制,50处为黑色
删除(或添加)内容的问题是对内容进行回流

想象一下下面的文字:

曾经是一个沉闷的午夜,
当我疲惫不堪地思考时,
在许多古怪的书卷上
被遗忘的传说

如果我删除单词'midnight'(在呈现的文档中),我将得到

曾经是一个沉闷的日子,
当我疲惫不堪地思考时,
在许多古怪的书卷上
被遗忘的传说

换句话说,因为文档不包含关于哪些内容属于一起的信息(这是一个单词?段落?行?),所以如果您删除了某些内容,它就无法神奇地将文本重新组合在一起

当您尝试添加文本时,也会遇到类似的问题

我知道iText网站上有一个例子,它将PDF文档中的字符串替换为另一个字符串。 关键区别在于目标字符串和替换字符串的长度大致相同(渲染)。
因此不需要回流。

对于一种方法,您可能需要读取代码并将其从Java移植到C。但请注意@Joris回答中提到的限制确实适用。