我正在尝试使用pdf框从文件中读取文本,以便在文件系统中对其进行排序。我正在使用C#。我可以从互联网上阅读示例pdf,但是由于某些原因,我尝试从中读取的pdf仅返回一个字符串,其中没有真实字符。这是我正在使用的代码:
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PDFBoxTest
{
class Program
{
static void Main(string[] args)
{
string fileName = @"C:\Users\Development\Desktop\purchaseOrder.pdf";
PDDocument doc = null;
try
{
doc = PDDocument.load(fileName);
PDFTextStripper stripper = new PDFTextStripper();
Console.WriteLine(stripper.getText(doc));
}
finally
{
if (doc != null)
{
doc.close();
}
}
Console.ReadLine();
}
}
}
这是pdf的链接,对我不起作用。保存一个,另一个使用“字母”设置打印。
提前谢谢! https://drive.google.com/drive/folders/1iSadM0ikdrhHsvemNVdyEl3BeTIhm39U?usp=sharing
答案 0 :(得分:2)
您的PDF不包含任何文本。
是的,当您在查看器中打开PDF时,您看到文本。但是,此文本不是使用PDF中的文本绘制指令生成的,而是使用路径绘制指令生成的,即您看到的每个字母都是使用一组曲线和定义相应字母轮廓的线条,然后用颜色填充。
因此,您的PDF不包含任何文本,而是包含许多任意的小填充路径。
另一方面,文本提取是通过分析文本绘图指令来工作的,作为参数具有相关编码文本。因此,文本提取将在您的PDF中找不到任何文本。
实际上,PDF中使用的技术通常用于防止他人提取其PDF的文本内容,无论是使用PDFTextStripper
之类的文本提取类,还是使用从PDF查看器,或为视障用户使用屏幕阅读器等辅助技术。
因此,对于此类PDF,您必须求助于通用OCR(即,将PDF渲染为位图图像并将标准OCR应用程序应用于图像)或专用OCR(即,一些采用路径定义并尝试使用自定义程序的程序)识别路径定义中的字符。
我不知道后一种程序,我只是认为如果必须处理许多此类PDF,这可能是一种明智的方法。