C# PDFSharp:如何从 PDF 中去除文本的示例?
Posted
技术标签:
【中文标题】C# PDFSharp:如何从 PDF 中去除文本的示例?【英文标题】:C# PDFSharp: Examples of how to strip text from PDF? 【发布时间】:2012-03-24 10:06:07 【问题描述】:我有一个相当简单的任务:我需要读取一个 PDF 文件并写出它的图像内容,同时忽略它的文本内容。所以本质上我需要做“另存为文本”的补充。
理想情况下,我宁愿避免对图像内容进行任何形式的重新压缩,但如果不可能,也可以。
有怎么做的例子吗?
谢谢!
【问题讨论】:
【参考方案1】:使用 PDFsharp 从 PDF 文件中提取文本并非易事。
最近在这个帖子中讨论过: https://***.com/a/9161732/162529
【讨论】:
【参考方案2】:使用 PdfSharp 从 PDF 中提取文本实际上非常容易,具体取决于文档类型和您打算如何处理它。如果文本在文档中是文本而不是图像,并且您不关心位置或格式,那么它很简单。此代码获取我正在使用的 PDF 中第一页的所有文本:
var doc = PdfReader.Open(docPath);
string pageText = doc.Pages[0].Contents.Elements.GetDictionary(0).Stream.ToString();
doc.Pages.Count
为您提供总页数,您可以通过带有索引的doc.Pages
数组访问每一页。我不建议在这里使用foreach
和Linq,因为接口没有很好地实现。传递给GetDictionary
的索引是针对哪个 PDF 文档元素的 - 这可能会根据文档的生成方式而有所不同。如果您没有得到您要查找的文本,请尝试遍历所有元素。
生成的文本将充满各种 PDF 格式代码。但是,如果您需要做的只是提取字符串,您可以使用 Regex 或任何其他适当的字符串搜索代码找到您想要的字符串。如果您需要对格式或定位做任何事情,那么祝您好运 - 据我所知,您将需要它。
【讨论】:
"生成的文本将充满各种 PDF 格式代码。"或者换句话说:很容易得到一些不容易破译的东西来得到页面上的真实文本。我见过 PDF2DOC 转换器可以很好地处理某些 PDF 文件,但在处理其他文件时却惨遭失败。 是的,以防它不够清楚 - 以这种方式很容易提取文本用于各种类型的分析。理解页面的整体格式并将其显示在屏幕上或更改布局一点也不容易。 绘制文本“Hello, World!”可以看起来像240.2734 427.6833 Td (Hello, World!) Tj
,也可以看起来像240.2734 427.6833 Td <002B0048004F004F0052000F0003003A00520055004F00470004> Tj
,或者有点不同。简单的实现对某些文件有效,但对其他文件会失败。
我正在使用 PDF sharp 库。它说 PdfReader 作为类未找到。可能是什么问题?这是我的文件的链接
@SudarshanTaparia 您应该提出一个新问题,您可以在那里更好地粘贴您的代码。【参考方案3】:
PDFSharp 库从 .pdf 文件中提取图像的示例:
link
library
编辑:
如果你想从图像中提取文本,你必须使用 OCR 库。
有两个很好的 OCR tessnet 和 MODI Link to thread on stack 但我完全可以推荐我现在正在使用的MODI。一些样本@codeproject。
编辑 2:
如果您不想从提取的图像中读取文本,您应该编写新的 PDF 文档并将它们全部放入其中。对于编写 PDF,我使用 MigraDoc。使用那个库并不难。
【讨论】:
我看过那个例子,但我不确定它是否包含我需要的所有部分。它在文档中查找“图片”。我还需要以图像形式保留文本的呈现,我只是不想在图像后面有文本。换句话说,我希望输出看起来与输入完全相同,但我想禁用从输出中保存文本的功能。 所以据我所知,您想从图像中读取文本并从 pdf 中读取纯文本?把它们放在一起是什么? 输入 PDF 可以是纯图像或图像后面的图像 + 文本。所以我需要接受输入并从中制作一个只有图像的 PDF。也就是说,我想将输入PDF的所有非文本组件导出到输出PDF,而不是导出文本组件。 因此,如果您想从 PDF 导出所有图像,您必须使用 PDFSharp(以我的回答为例)。然后,您可以使用 MigraDoc 将它们放入新的 PDF 中。它会回答你的问题吗? 图像提取示例仅提取“图片”图像,它不保存任何类型的文本图片表示。这就是为什么我说它似乎没有我需要的所有部分。似乎我需要做的——但我可能错了,因为我对非常复杂的 PDF 格式的了解有限——是从原始 PDF 创建一个 Document 对象,然后以某种方式删除或用空文本替换所有文档中的文本对象。但是,我需要它以这样的方式来做,以便我保留该文本的图像表示。有意义吗?以上是关于C# PDFSharp:如何从 PDF 中去除文本的示例?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PDFsharp .NET 库将 PDF 页面导出为图像?
使用 TheArtOfDev.HtmlRenderer.PdfSharp 从 HTML 创建 PDF