如何使用Python获取PDF文件的最后一行位置?

时间:2018-05-24 06:40:12

标签: python pdf

我是Python新手,使用Python,ReportLab和PyPDF2模块创建PDF文件。请帮我查一下PDF文件的最后一行位置。以下是我的问题的解释。

例如,

我有一个PDF文件,其中写了10行。现在我想在同一个PDF文件中添加另一个文本。为此,我想知道最后一行的位置,所以我可以从该行的下方开始另一个文本。

以下是我从PDF文件中提取数据的代码示例。

import tkinter
from tkinter import *
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from PyPDF2 import PdfFileReader


root= Tk()
root.geometry("100x100")        

def line_position():
    opn_pdf1= open("test_pdf.pdf","rb")
    read_pdf= PdfFileReader(opn_pdf1)
    print(read_pdf)
    num_page= read_pdf.getNumPages()
    print(num_page)
    page= read_pdf.getPage(num_page-1)
    data= page.extractText().splitlines()
    print (data)
    print(len(data))

Button(root,text= "PDF Last Line",command= line_position).pack()


root.mainloop()

另外,让我知道有没有办法使用reportlab而不是PyPDF2来读取和提取数据。

谢谢。

3 个答案:

答案 0 :(得分:0)

我希望这会有所帮助...

import tkinter
from tkinter import *
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from PyPDF2 import PdfFileReader


root= Tk()
root.geometry("100x100")        

def line_position():
    opn_pdf1= open("test.pdf","rb")
    read_pdf= PdfFileReader(opn_pdf1)
    print(read_pdf)
    num_page= read_pdf.getNumPages()
    print(num_page)
    page= read_pdf.getPage(num_page-1)
    data= page.extractText().splitlines()
    for i in reversed(range(0, len(data))):
        if data[i] != " ":
            print(data[i])
            break
        i -= 1
    print(len(data))

Button(root,text= "PDF Last Line",command= line_position).pack()


root.mainloop()

答案 1 :(得分:0)

听起来你想要最后一行出现的PDF上的y坐标。我不相信PyPDF2可以做到这一点。如果需要x / y坐标,可以使用PyMuPDF。以下代码使用PyMuPDF打印最后一行的y坐标。

import json
from tkinter import *

import fitz  # http://pymupdf.readthedocs.io/en/latest/
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas


root= Tk()
root.geometry("100x100")


def line_position():
    read_pdf = fitz.open("test.pdf")
    num_page = read_pdf.pageCount
    print(num_page)
    page = read_pdf[num_page - 1]
    # http://pymupdf.readthedocs.io/en/latest/app2/#json
    data = json.loads(page.getText(output='json'))
    print(data)
    highest_y = -1
    for block in data['blocks']:
        if 'lines' in block:
            for line in block['lines']:
                for span in line['spans']:
                    if span['text'].strip():
                        print(span)
                        highest_y = max((highest_y, span['bbox'][3]))
    print(highest_y)
    read_pdf.close()


Button(root, text="PDF Last Line", command=line_position).pack()

root.mainloop()

答案 2 :(得分:-1)

试试这个......

last_line = data[-0]
print(last_line)