标签: pdf-extraction

如何检查PDF是扫描图像还是包含文本

我有大量文件,其中一些是扫描图像为 PDF,一些是完整/部分文本 PDF。

有没有办法检查这些文件,以确保我们只处理扫描图像的文件,而不是完整/部分文本 PDF 文件?

环境:Python 3.6

python python-3.x pdf-extraction pdfminer pypdf2

21
推荐指数
7
解决办法
2万
查看次数

如果识别PDF文档中的文本结构非常困难,那么PDF阅读器如何做得如此之好?

我一直在尝试编写一个简单的控制台应用程序或PowerShell脚本来从大量PDF文档中提取文本.有几个库和CLI工具可以实现这一点,但事实证明,没有一个能够可靠地识别文档结构.特别是我关注文本列的识别.即使非常昂贵的PDFLib TET工具也经常混淆两个相邻文本列的内容.

经常注意到PDF格式没有列的任何概念,甚至没有单词的概念.关于SO的类似问题的几个答案提到了这一点.这个问题非常严重,甚至可以保证学术研究.这篇期刊文章指出:

PDF文件中的所有数据对象都以面向视觉的方式表示,作为一系列操作符...通常不传达有关更高级别文本单元(如标记,行或列)的信息 - 有关这些单元之间边界的信息只能通过空格隐式提供

因此,我尝试过的所有提取工具(iTextSharp,PDFLib TET和Python PDFMiner)都无法识别文本列边界.在这些工具中,PDFLib TET表现最佳.

然而,SumatraPDF,非常轻量级的开源PDF阅读器,以及许多其他类似的可以完美识别列和文本区域.如果我在其中一个应用程序中打开文档,选择页面上的所有文本(甚至整个文档用CTRL + A)复制并粘贴到文本文件中,文本将以正确的顺序呈现几乎完美无缺.它偶尔会将页脚和标题文本混合到其中一列中.

所以我的问题是,这些应用程序如何做看似困难的事情(即使是像PDFLib这样昂贵的工具)?

编辑2014年3月31日:值得一提的是,我发现PDFBox在文本提取方面比iTextSharp好得多(尽管有一个定制的策略实现),PDFLib TET略胜PDFBox,但它相当昂贵.Python PDFMiner是没有希望的.我见过的最好的结果来自谷歌.可以将PDF(每次2GB)上传到Google云端硬盘,然后将其作为文本下载.这就是我在做的事情.我写了一个小工具,将我的PDF分成10个页面文件(Google只会转换前10页),然后在下载后将它们拼接回来.

编辑2014年4月7日.取消我的最后一次.最好的提取是通过MS Word实现的.这可以在Acrobat Pro中自动执行(工具>操作向导>创建新操作).可以使用.NET OpenXml库自动化Word到文本.这是一个非常巧妙地进行提取(docx到txt)的类.我的初始测试发现MS Word转换在文档结构方面要准确得多,但是一旦转换为纯文本就不那么重要了.

pdf itext pdf-extraction

18
推荐指数
2
解决办法
1万
查看次数

如何自动将pdf表单字段导出到xml

我有一个pdf包含表单字段的文件,需要将数据导出到AUTOMATICALLYxml文件中.这是我为测试创建的示例表单的屏幕:

在此输入图像描述

注意:通过单击手动使用Acrobat Professional 手动导出它Tools > Form > Export Form Data,最后选择xml扩展名进行文件输出.这是我手动导出时得到的结果:

<?xml version="1.0" encoding="UTF-8"?>
<fields>
    <first_name>John</first_name>
    <last_name>Doe</last_name>
</fields>
Run Code Online (Sandbox Code Playgroud)

但是,我需要自动化它,例如使用python脚本,Java实现或一些命令行工具.我可以使用哪些库或工具将表单字段数据导出到xml?该工具或库应该是开源的,我可以将它集成到我的工作流程中.

我已经尝试过python pdfminer库,它帮助我导出pdf文件的静态部分(比如Static form header,First name:Last name:):但是如何导出表单字段数据(在我的情况下是表单字段的内容first_namelast_name)?

编辑:随意下载sample.pdf文件在这里.

java xml acrobat python-2.7 pdf-extraction

10
推荐指数
1
解决办法
2万
查看次数

如何改进印地语文本提取?

我正在尝试从 PDF 中提取印地语文本。我尝试了所有从 PDF 中提取的方法,但都没有奏效。有解释为什么它不起作用,但没有这样的答案。因此,我决定将PDF转换为图像,然后用于pytesseract提取文本。我已经下载了印地语训练的数据,但是这也提供了非常不准确的文本。

这是 PDF 中的实际印地语文本(下载链接):

实际印地语

到目前为止,这是我的代码:

import fitz

filepath = "D:\\BADI KA BANS-Ward No-002.pdf"

doc = fitz.open(filepath)
page = doc.loadPage(3)  # number of page
pix = page.getPixmap()
output = "outfile.png"
pix.writePNG(output)
from PIL import Image
import pytesseract

# Include tesseract executable in your path
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Create an image object of PIL library
image = Image.open('outfile.png')

# pass image into pytesseract module
# pytesseract is trained in many languages
image_to_text …
Run Code Online (Sandbox Code Playgroud)

python pdf-extraction python-tesseract

9
推荐指数
2
解决办法
459
查看次数

从PDF中获取所选区域的X,Y坐标

我正在尝试从PDF的特定部分提取文本.如果我知道该区域的X,Y坐标,我就能够提取文本.但我无法从PDF中获取所选区域的坐标.请帮助我如果有人尝试过这个.

pdf pdf-extraction pdf.js

6
推荐指数
0
解决办法
2741
查看次数

如何从pdf中提取特定标题下的文本?

我想使用python从pdf提取特定标题下的文本。

例如,我有一个PDF,标题为Introduction,Summary,Contents。我只需要提取“摘要”标题下的文本。

我怎样才能做到这一点?

样本图片

pdf document text-extraction python-2.7 pdf-extraction

6
推荐指数
1
解决办法
1813
查看次数

使用 Camelot 查找 PDF 尺寸

我正在使用 Camelot 读取完整的 PDF 并从每个 PDF 中提取大约 112 个属性。

我使用表区域来提取属性

 test_variable = camelot.read_pdf(filename, flavor='stream', 
                 table_areas=['38, 340 ,50, 328']) 
Run Code Online (Sandbox Code Playgroud)

问题是对于所有文档中的相同属性,表区域并不是恒定的。有时,我会在另一个文档的 x 或 y 坐标下方几个像素处找到相同的属性。

 test_variable = camelot.read_pdf(filename, flavor='stream', 
                 table_areas=['38,350,50,338']) 
Run Code Online (Sandbox Code Playgroud)

有没有办法从同一区域获取确切的属性,而不管提取任何文档?

python pdf-extraction python-camelot

6
推荐指数
1
解决办法
2952
查看次数

如何使用python提取图像和图像BBox坐标?

我正在尝试使用图像的 BBox 坐标提取 PDF 中的图像。

我尝试使用 pdfrw 库,它正在识别图像对象,并且它有一个名为媒体框的属性,其中有一些坐标,我不确定这些是否是正确的 bbox 坐标,因为对于某些 pdf,它显示类似这样的内容 ['0', ' 0', '684', '864'] 但图像不是从页面开头开始的,所以我不认为它是 bbox

我尝试使用 pdfrw 使用以下代码

import pdfrw, os
from pdfrw import PdfReader, PdfWriter
from pdfrw.findobjs import page_per_xobj
outfn = 'extract.' + os.path.basename(path)
pages = list(page_per_xobj(PdfReader(path).pages, margin=0.5*72))
writer = PdfWriter(outfn)
writer.addpages(pages)
writer.write()
Run Code Online (Sandbox Code Playgroud)

如何获取图像及其 bbox 坐标?

示例 pdf :https://drive.google.com/open? id=1IVbj1b3JfmSv_BJvGUqYvAPVl3FwC2A-

python pypdf pdf-extraction pdfrw

6
推荐指数
1
解决办法
1万
查看次数

如何在pdf文件中提取表的内容?

我想在pdf中提取表格的内容,如下所示:

在此输入图像描述

我用iText java PDF libray编写了这个java程序,它可以逐行读取PDF文件的内容,但我不知道如何获取表的内容

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;

public class PDFReader {

    public static void main(String[] args) {

        // TODO, add your application code
        System.out.println("Lecteur PDF");
        System.out.println (ReadPDF("D:/test.pdf"));
    }
        private static String ReadPDF(String pdf_url)
    {
        StringBuilder str=new StringBuilder();
        try
        {

         PdfReader reader = new PdfReader(pdf_url);
        int n = reader.getNumberOfPages();
         for(int i=1;i<n;i++)
         {
            String str2=PdfTextExtractor.getTextFromPage(reader, i);
            str.append(str2);
           System.out.println(str);
         }
        }catch(Exception err)
        {
            err.printStackTrace();
        }
        return String.format("%s", str);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

在此输入图像描述

但这不是我想要的,我想逐行和逐列提取表的内容,例如,保存java数组中的每一行

第一个数组将包含:"N°","DATE OBSERVATIONS","TEXTE"

第二个阵列将包含:"029/14","Le 1er sept …

java pdf text-extraction itext pdf-extraction

5
推荐指数
1
解决办法
9087
查看次数

PyPDF2从扫描的pdf中提取垂直文本

我正在尝试使用 PyPDF2 从扫描的 pdf 中提取文本。一些 pdf 包含垂直对齐的文本。但是页面的方向是纵向。有什么方法可以使用pdfminer或PyPDF2识别文本是否垂直对齐并读取PDF中的垂直线

python python-3.x pdf-extraction pdfminer pypdf2

5
推荐指数
1
解决办法
407
查看次数