C#PDFSharp:如何从PDF中剥离文本的示例?

C#PDFSharp:如何从PDF中剥离文本的示例?,c#,text,pdfsharp,C#,Text,Pdfsharp,我有一个相当简单的任务:我需要读取一个PDF文件并写出它的图像内容,同时忽略它的文本内容。所以本质上我需要做“另存为文本”的补充 理想情况下,我更愿意避免对图像内容进行任何形式的重新压缩,但如果不可能,也可以 这些是如何做到这一点的例子吗 谢谢 从.pdf文件提取图像的PDFSharp库示例: 编辑: 然后,如果你想从图像中提取文本,你必须使用OCR库 有两种好的OCR和MODI 但我完全可以推荐我现在正在使用的。一些样品 编辑2: 如果您不想从提取的图像中读取文本,您应该编写新的PDF文

我有一个相当简单的任务:我需要读取一个PDF文件并写出它的图像内容,同时忽略它的文本内容。所以本质上我需要做“另存为文本”的补充

理想情况下,我更愿意避免对图像内容进行任何形式的重新压缩,但如果不可能,也可以

这些是如何做到这一点的例子吗


谢谢

从.pdf文件提取图像的PDFSharp库示例:

编辑:

然后,如果你想从图像中提取文本,你必须使用OCR库

有两种好的OCR和MODI

但我完全可以推荐我现在正在使用的。一些样品

编辑2:


如果您不想从提取的图像中读取文本,您应该编写新的PDF文档,并将它们全部放入其中。我用它来写PDF。使用该库并不困难。

使用PDFsharp从PDF文件中提取文本不是一项简单的任务

这篇文章最近讨论了这一点:

使用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格式代码。但是,如果您只需要提取字符串,那么可以使用正则表达式或任何其他适当的字符串搜索代码找到所需的字符串。如果您需要对格式或定位进行任何操作,那么祝您好运——据我所知,您将需要它。

我已经看过该示例,但我不确定它是否包含我需要的所有内容。它在文档中查找“图片”。我还需要在图像形式中保留文本的呈现,我只是不想在图像后面有文本。换句话说,我希望输出与输入完全相同,但我希望禁用从输出保存文本的功能。因此,正如我现在所理解的,您希望从图像中读取文本,从pdf中读取纯文本?并把它们放在一起作为什么?输入PDF可以是仅图像或图像后面的图像+文本。所以我需要把输入的内容做成一个只有图像的PDF格式。换句话说,我希望将输入PDF的所有非文本组件导出到输出PDF中,而不是导出文本组件。因此,如果要从PDF导出所有图像,必须使用PDFSharp(以我的答案为例)。然后您可以将它们放入新的PDF中,例如。图像提取示例只提取“图片”图像,它不保存文本的任何形式的图片表示。这就是为什么我说它似乎没有我需要的所有部件。似乎我需要做的是——但我可能错了,因为我对PDF格式的了解有限,它非常复杂——从原始PDF创建一个文档对象,然后以某种方式删除或替换文档中的所有文本对象。但是,我需要它以这样一种方式来做,以便我保留文本的图像表示。有意义吗?“这样生成的文本将充满各种PDF格式代码。”或者换言之:很容易得到一些不容易破译的内容,以获得页面上的真实文本。我见过PDF2DOC转换器可以很好地处理一些PDF文件,但在其他文件中却失败得很惨。是的,如果它不够清晰,用这种方法提取用于各种类型分析的文本是非常容易的。理解页面的整体格式并将其显示在屏幕上或更改布局一点也不容易。绘制文本“Hello,World!”可能看起来像
240.2734 427.6833 Td(Hello,World!)Tj
,也可能看起来像
240.2734 427.6833 Td Tj
或稍有不同。简单的实现可以处理某些文件,但在处理其他文件时会失败。我使用的是PDF sharp库。它说找不到PdfReader as类。可能是什么问题?这是我的网站的链接file@SudarshanTaparia你应该问一个新问题,你可以把你的代码更好地粘贴在那里。