Как я могу получить позицию последней строки PDF-файла, используя Python? - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в Python и создаю PDF-файл, используя модули Python, ReportLab и PyPDF2.Пожалуйста, помогите мне узнать последнюю строчку 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 голосов
/ 24 мая 2018

Надеюсь, это поможет немного больше ...

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()
0 голосов
/ 24 мая 2018

Звучит так, как будто вам нужна координата y в PDF, где находится последняя строка.Я не верю, что 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()
0 голосов
/ 24 мая 2018

Попробуйте это ...

last_line = data[-0]
print(last_line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...