C# 如何使用iText 7从PDF中提取图像和文本

C# 如何使用iText 7从PDF中提取图像和文本,c#,itext7,C#,Itext7,我创建了一个简单的方法,从PDF文件中提取文本并将文本插入txt文件。 问题是,它只提取pdf的文本,而不是从插入pdf的图像中提取文本。我尝试过这个,但不知道如何实现。 如果您只对文本感兴趣,则此代码可以正常工作 //usings using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas.Parser; using iText.Kernel.Pdf.Canvas.Parser.Listener; using System.IO; using S

我创建了一个简单的方法,从PDF文件中提取文本并将文本插入txt文件。 问题是,它只提取pdf的文本,而不是从插入pdf的图像中提取文本。我尝试过这个,但不知道如何实现。 如果您只对文本感兴趣,则此代码可以正常工作

//usings
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using System.IO;
using System.Text;
//code
 string file = @"C:\test.pdf";
            string extension = Path.GetExtension(file);
            var pageText = new StringBuilder();

            if (extension == ".pdf")
            {
                using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(file)))
                {
                    var pageNumbers = pdfDocument.GetNumberOfPages();
                    StreamWriter sw = new StreamWriter(@"C:\output.txt");

                    for (int i = 1; i <= pageNumbers; i++)
                    {
                        LocationTextExtractionStrategy strategy = new LocationTextExtractionStrategy();
                        PdfCanvasProcessor parser = new PdfCanvasProcessor(strategy);
                        parser.ProcessPageContent(pdfDocument.GetFirstPage());
                        pageText.Append(strategy.GetResultantText());
                        string name = pageText.ToString();
                        sw.WriteLine(name);
                    }
                    sw.Close();

                }
            }
//使用
使用iText.Kernel.Pdf;
使用iText.Kernel.Pdf.Canvas.Parser;
使用iText.Kernel.Pdf.Canvas.Parser.Listener;
使用System.IO;
使用系统文本;
//代码
字符串文件=@“C:\test.pdf”;
字符串扩展名=Path.GetExtension(文件);
var pageText=新的StringBuilder();
如果(扩展名=“.pdf”)
{
使用(PdfDocument PdfDocument=新PdfDocument(新PDF阅读器(文件)))
{
var pageNumbers=pdfDocument.GetNumberOfPages();
StreamWriter sw=新的StreamWriter(@“C:\output.txt”);

对于(int i=1;i首先,让我解释一下为什么您的方法不起作用:当通过
PdfCanvasProcessor#processPageContent
iText处理页面内容时,它处理页面的内容流,而不是此处可能提到的ImageXObject

所以问题是:如何对这些图像进行ocr? 然而,这个问题可以分为两部分:

  • 如何查找/提取所有文档的图像
  • 如何进行光学字符识别
  • web上有几个iText示例,其中展示了如何实现这一点。这是iText示例之一中描述的选项: 有几个SO答案,您可能还需要检查,例如,这一个:

  • 可以使用几个开源库来执行此任务:例如,iText的pdfOCR。它提供了ocr图像并将其包装为PDF(或PDF/A)或仅ocr图像的机会。一个良好的起点:


  • 关于您未加载pdfocr类的问题的提示:也许您忽略了pdfocr是一个独立库的事实:您不应该在iTextCore上添加依赖项,而应该在pdfocr本身上添加依赖项。

    “我尝试过这一点,但不了解如何实现。”-也许你应该解释你没有理解的内容。因为OCR本质上是你必须做的。@mkl从顶部开始使用iText.Pdfocr;和使用iText.Pdfocr.Tesseract4;找不到。@KJ谢谢你提供的信息,但我仍然迷路了。