【问题标题】:PDFBox reads an empty string when I try to read a PDF当我尝试阅读 PDF 时,PDFBox 读取一个空字符串
【发布时间】:2019-01-16 10:07:27
【问题描述】:

我正在尝试使用 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

【问题讨论】:

标签: c# .net parsing pdf pdfbox


【解决方案1】:

您的 PDF 不包含任何文本。

是的,当您在查看器中打开 PDF 时,您会看到文本。但是此文本不是使用 PDF 中的 文本绘制指令 生成的,而是使用 路径绘制指令 生成的,即您看到的每个字母都是使用一组曲线和定义相应字母轮廓的线条,然后用颜色填充。

因此,您的 PDF 不包含任何文本,而是包含许多任意小的填充路径。

另一方面,文本提取通过分析文本绘制指令来工作,该指令作为参数包含有问题的编码文本。因此,文本提取不会在您的 PDF 中找到任何文本。

您的 PDF 中使用的技术实际上通常用于防止他人提取其 PDF 的文本内容,无论是使用文本提取类(如 PDFTextStripper),还是使用 PDF 中的复制和粘贴查看器,或为视障用户使用屏幕阅读器等辅助技术。

因此,对于此类 PDF,您必须求助于通用 OCR(即将 PDF 渲染为位图图像并将标准 OCR 应用程序应用于图像)或专用 OCR(即一些自定义程序获取路径定义并尝试从路径定义中识别字符)。

我不知道后一种类型的任何程序,我只是认为如果必须处理许多此类 PDF,它可能是一种明智的方法。

【讨论】:

  • 有趣。我不确定要做到这一点有多难。我需要的只是 PO#、Lot # 和活动。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 2022-11-24
  • 1970-01-01
  • 2022-01-20
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多