Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 裁剪带有PyPDF2的pdf_Python_Matplotlib_Pypdf2 - Fatal编程技术网

Python 裁剪带有PyPDF2的pdf

Python 裁剪带有PyPDF2的pdf,python,matplotlib,pypdf2,Python,Matplotlib,Pypdf2,我一直在做一个项目,我用神经网络从pdf中提取表格数据, 我成功地检测了表格并获得了它们的坐标(x、y、宽度、高度),我一直在尝试用pypdf2裁剪pdf以隔离表格,但由于某些原因,裁剪永远不会符合预期的结果。 运行推断后,我得到这些坐标 [5.0948269e+01、1.5970685e+02、1.1579385e+03、2.7092386e+02 9.9353129e-01]] 第五个数字是我的神经网络精度,我们可以放心地忽略它 在pyplot works中尝试它们,因此它们没有问题: 但

我一直在做一个项目,我用神经网络从pdf中提取表格数据, 我成功地检测了表格并获得了它们的坐标(x、y、宽度、高度),我一直在尝试用pypdf2裁剪pdf以隔离表格,但由于某些原因,裁剪永远不会符合预期的结果。 运行推断后,我得到这些坐标

[5.0948269e+01、1.5970685e+02、1.1579385e+03、2.7092386e+02 9.9353129e-01]]

第五个数字是我的神经网络精度,我们可以放心地忽略它

在pyplot works中尝试它们,因此它们没有问题:

但是,在pypdf2中使用相同的坐标始终处于关闭状态

from PyPDF2 import PdfFileWriter, PdfFileReader

with open("mypdf.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()

    for i in range(numPages):
        page = input1.getPage(i)
        page.cropBox.upperLeft = (5.0948269e+01,1.5970685e+02)
        page.cropBox.upperLeft = (1.1579385e+03, 2.7092386e+02)
     
        
        output.addPage(page)
        with open("out.pdf", "wb") as out_f:
          output.write(out_f)
这是我得到的输出:

我错过什么了吗

谢谢大家!

给你:

from PyPDF2 import PdfFileWriter, PdfFileReader

with open("mypdf.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()

    x, y, w, h = (5.0948269e+01, 1.5970685e+02, 1.1579385e+03, 2.7092386e+02)

    page_x, page_y = input1.getPage(0).cropBox.getUpperLeft()
    upperLeft = [page_x.as_numeric(), page_y.as_numeric()] # convert PyPDF2.FloatObjects into floats
    new_upperLeft  = (upperLeft[0] + x, upperLeft[1] - y)
    new_lowerRight = (new_upperLeft[0] + w, new_upperLeft[1] - h)

    for i in range(numPages):
        page = input1.getPage(i)
        page.cropBox.upperLeft  = new_upperLeft
        page.cropBox.lowerRight = new_lowerRight

        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)
注:在PyPDF2中,位于页面左下角的坐标原点。Y轴的方向是从底部向上。不像在屏幕上。因此,如果您想获得裁剪区域上边缘的PDF坐标,您需要从页面高度减去裁剪区域上边缘的y坐标


谢谢您的详细回答