C# 如何使用iText 7从PDF中提取图像和文本
我创建了一个简单的方法,从PDF文件中提取文本并将文本插入txt文件。 问题是,它只提取pdf的文本,而不是从插入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
//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谢谢你提供的信息,但我仍然迷路了。