【问题标题】:How to read pdf file to a text file in a proper format using Spire.PDF or any other library?如何使用 Spire.PDF 或任何其他库以适当的格式将 pdf 文件读取为文本文件?
【发布时间】:2018-05-26 02:27:28
【问题描述】:

如何使用 Spire.PDF 阅读 pdf 文件并将内容保存到文本文件? 例如:这是pdf file,这是来自该pdf的desired text file

我尝试使用以下代码读取文件并将其保存到文本文件中

PdfDocument doc = new PdfDocument();
doc.LoadFromFile(@"C:\Users\Tamal\Desktop\101395a.pdf");

StringBuilder buffer = new StringBuilder();

foreach (PdfPageBase page in doc.Pages)
{
    buffer.Append(page.ExtractText());
}

doc.Close();
String fileName = @"C:\Users\Tamal\Desktop\101395a.txt";
File.WriteAllText(fileName, buffer.ToString());
System.Diagnostics.Process.Start(fileName);

但是output text file 的格式不正确。它有不必要的空格,并且一个完整的 para 被分成多行等。

如何在所需的文本文件中获得所需的结果?

此外,是否也可以检测和标记(如添加标签)粗体、斜体或下划线形式的文本?此外,对于具有多列文本的页面来说,问题也会更加严重。

【问题讨论】:

  • 您正在共享问题中现有人员的个人数据(姓名和电子邮件地址)。请避免这样做,除非您得到这些人的明确同意才能使用这些数据。
  • 正如@Tamias 也指出的那样,PDF 文件中的文本可能或同样可能无法以这种方式提取。如果您想要在大多数情况下工作的东西,您应该寻找 OCR。

标签: c# pdf ocr


【解决方案1】:

使用iText

File inputFile = new File("input.pdf");

PdfDocument pdfDocument = new PdfDocument(new PdfReader(inputFile));

SimpleTextExtractionStrategy stes = new SimpleTextExtractionStrategy();
PdfCanvasProcessor canvasProcessor = new PdfCanvasProcessor(stes);
canvasProcessor.processPageContent(pdfDocument.getPage(1));

System.out.println(stes.getResultantText());

这是(如代码所示)一种基本/简单的文本提取策略。 更多高级示例可以在文档中找到。

【讨论】:

  • 请看一下 OP 的 desired text file,他想要一些更预先解释的东西,例如带有段落识别...
  • @JorisSchellekens 我需要导入哪些命名空间才能使代码正常工作..而且,它看起来并没有解决段落识别和粗体、斜体等检测的问题并将其写入文本文件。
  • 正如其他发帖者所说,如果原始PDF没有标记(大多数PDF文档没有),那么您将无法提取任何结构信息。
【解决方案2】:

使用 IronOCR

var Ocr = new IronOcr.AutoOcr();
var Results = Ocr.ReadPdf("E:\Demo.pdf");
File.WriteAllText("E:\Demo.txt", Convert.ToString(Results));

供参考https://ironsoftware.com/csharp/ocr/

使用这个你应该得到格式化的文本输出,但不是你想要的精确输出。

如果您想要准确的预解释输出,那么您应该检查付费 OCR 服务,例如 OmniPage capture SDKAbbyy Finereader SDK

【讨论】:

    【解决方案3】:

    这就是 PDF 的本质。它基本上说“转到页面上的这个位置并将这个角色放在那里。”我对 Spire.PFF 一点也不熟悉;我使用 Java 和 PDFBox 库,但任何从 PDF 中提取文本的尝试都是启发式的,因此是不完美的。这是一个受到相当多关注的问题,并且某些应用程序的结果比其他应用程序更好,因此您可能需要调查所有可用选项。不过,我认为您必须清理结果。

    【讨论】:

    • 如果碰巧有一个带标签的 pdf,如果您的文本提取器支持标签信息,输出会更加结构化。
    • 我尝试过不同的库,如 iTextsharp、pdfium.sdk,这是一个 youtube 视频 youtube.com/watch?v=A5H9wpywAtI,它展示了如何划分区域并提取文本(这正是我想要的),但我不能弄清楚视频创建者如何将 draw custom rectangle 添加到 windows 窗体以划分要阅读的区域,至少有人可以帮助我吗...?
    • 我并不是说 PDFBox 一定是为此目的最好的库,但我觉得有必要在他们的电子邮件论坛上赞扬他们的例子和人们的非凡帮助。并且一旦向他们指出,他们修复或改进事物的速度。
    • 这个答案应该是评论。
    • 我不确定您的问题是否得到解答,但我们在这里使用 iText,它非常强大。我们主要使用它来阅读 PDF 以编写其他 PDF,但它很容易在 PDF 组件中阅读并获取其中的文本
    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2011-10-01
    • 2014-08-21
    • 1970-01-01
    • 2019-10-06
    • 2017-03-13
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多