Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从PDF文件中突出显示的批注提取文本_Python_Qt_Pdf_Poppler - Fatal编程技术网

Python 从PDF文件中突出显示的批注提取文本

Python 从PDF文件中突出显示的批注提取文本,python,qt,pdf,poppler,Python,Qt,Pdf,Poppler,从昨天开始,我尝试使用python-poppler-qt4从一个pdf中的一些突出显示的注释中提取文本 根据,看起来我必须使用Page.text()方法获取文本,从higlight注释传递一个矩形参数,我使用annotation.boundary()获取该参数。但我只收到空白文本。有人能帮我吗?我复制了下面的代码,并为我正在使用的PDF添加了一个链接。谢谢你的帮助 import popplerqt4 import sys import PyQt4 def main(): doc =

从昨天开始,我尝试使用python-poppler-qt4从一个pdf中的一些突出显示的注释中提取文本

根据,看起来我必须使用Page.text()方法获取文本,从higlight注释传递一个矩形参数,我使用annotation.boundary()获取该参数。但我只收到空白文本。有人能帮我吗?我复制了下面的代码,并为我正在使用的PDF添加了一个链接。谢谢你的帮助

import popplerqt4
import sys
import PyQt4


def main():

    doc = popplerqt4.Poppler.Document.load(sys.argv[1])
    total_annotations = 0
    for i in range(doc.numPages()):
        page = doc.page(i)
        annotations = page.annotations()
        if len(annotations) > 0:
            for annotation in annotations:
                if  isinstance(annotation, popplerqt4.Poppler.Annotation):
                    total_annotations += 1
                    if(isinstance(annotation, popplerqt4.Poppler.HighlightAnnotation)):
                        print str(page.text(annotation.boundary()))
    if total_annotations > 0:
        print str(total_annotations) + " annotation(s) found"
    else:
        print "no annotations found"

if __name__ == "__main__":
    main()
测试pdf:

看一看,boundary属性似乎以规范化坐标返回此注释的边界矩形。虽然这似乎是一个奇怪的决定,但我们可以通过
page.pageSize().width()和
.height()值来缩放坐标

import popplerqt4
import sys
import PyQt4


def main():

    doc = popplerqt4.Poppler.Document.load(sys.argv[1])
    total_annotations = 0
    for i in range(doc.numPages()):
        #print("========= PAGE {} =========".format(i+1))
        page = doc.page(i)
        annotations = page.annotations()
        (pwidth, pheight) = (page.pageSize().width(), page.pageSize().height())
        if len(annotations) > 0:
            for annotation in annotations:
                if  isinstance(annotation, popplerqt4.Poppler.Annotation):
                    total_annotations += 1
                    if(isinstance(annotation, popplerqt4.Poppler.HighlightAnnotation)):
                        quads = annotation.highlightQuads()
                        txt = ""
                        for quad in quads:
                            rect = (quad.points[0].x() * pwidth,
                                    quad.points[0].y() * pheight,
                                    quad.points[2].x() * pwidth,
                                    quad.points[2].y() * pheight)
                            bdy = PyQt4.QtCore.QRectF()
                            bdy.setCoords(*rect)
                            txt = txt + unicode(page.text(bdy)) + ' '

                        #print("========= ANNOTATION =========")
                        print(unicode(txt))

    if total_annotations > 0:
        print str(total_annotations) + " annotation(s) found"
    else:
        print "no annotations found"

if __name__ == "__main__":
    main()
此外,我决定连接
.highlightQuads()
,以更好地表示实际突出显示的内容

请注意我在每个四元文本区域添加的显式

在示例文档中,返回的
QString
无法直接传递到
print()
str()
,解决方法是使用
unicode()

我希望这能像帮助我一样帮助别人


注意:页面旋转可能会影响缩放值,我无法对此进行测试。

谢谢,我很难安装popplerqt4,但这非常有效!任何关于安装poppler qt的好教程。我有问题。如果有人在依赖项方面有问题,请使用docker images或Vagrant at提取突出显示的图像