Решения этого , этого и этого вопроса показывают, как извлечь комментарии, сделанные во всплывающих / заметках и в выделенных текстовых областях.Однако я не нашел решения, как извлечь выделенный текст сам.Возможно ли это с помощью Python (или bash, инструментов командной строки Unix или другого решения для командной строки, простого и не слишком большого для установки)?
До сих пор я пытался использовать PyPDF2
и python-poppler-qt5
,С PyPDF2
я могу получить регионы QuatPoints или Rect, которые, как я подозреваю, могут быть использованы для извлечения области текста со страницы, но я не смог заставить p2.extractText()
работать вообще, поэтому не уверен, как поступить:
import PyPDF2 as pp2
pdf_file = open('sample.pdf', 'rb')
pdf = pp2.PdfFileReader(pdf_file)
p2 = pdf.getPage(2)
p2['/Annots'][4].getObject()
Out:
{'/Type'{'/Type': '/Annot',
'/Subtype': '/Highlight',
'/Subj':'Highlight',
'/T': 'joel',
'/F': 4,
'/NM': 'b3a6d3a3-bdab-457b-a769-9d82e616798a',
'/CreationDate': 'D:20190704104139',
'/CA': 1,
'/Rect': [58.9415, 184.958, 550.855, 235.086],
'/C': [0.99608, 0.99608, 0.68235],
'/QuadPoints': [430.769,
219.662,
550.304,
219.662,
430.769,
235.086,
550.304,
235.086,
58.9415,
202.585,
531.575,
202.585,
58.9415,
218.56,
531.575,
218.56,
59.4924,
185.509,
313.437,
185.509,
59.4924,
201.483,
313.437,
201.483],
'/AP': {'/N': {'/Subtype': '/Form',
'/FormType': 1,
'/BBox': [0, 0, 491.914, 50.1278],
'/Resources': {'/ExtGState': {'/TransGs': {'/CA': 1,
'/ca': 1,
'/BM': '/Multiply',
'/Type': '/ExtGState'}}},
'/Group': {'/S': '/Transparency', '/Type': '/Group'},
'/Filter': '/FlateDecode'}},
'/M': "D:20190704104139+00'00'",
'/Contents': 'sample text written on highlighted area'}
С помощью python-poppler-qt5
я также могу получить границу области выделения, но когда я пытаюсь извлечь текст из этой области, возвращается пустая строка:
import popplerqt5
d = popplerqt5.Poppler.Document.load('sample.pdf')
p2 = d[2]
a = p2.annotations()
t = a[4]
p2.text(t.boundary()) # Returns an empty string.
Мое текущее решение - использовать Zotero с zotfile, который делает именно это ( через pdf.js ), но это немного утомительно, когда у меня есть несколько PDF-файлов, поэтому я быхотел бы автоматизировать процесс, если это возможно.