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

在 C# 中将 PDF 导出为 JPG [关闭]

如何在保留书签的同时向现有 pdf 添加附加页面? (PDFSharp等)

C#写PDF文件类库PDF File Writer介绍

无法加载文件或程序集 PDFsharp