我是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来读取和提取数据。
谢谢。
答案 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)