Làm cách nào để đọc các thuộc tính/siêu dữ liệu như Tiêu đề, Tác giả, Chủ đề và Từ khóa được lưu trữ trên tệp pdf bằng python?Đọc các thuộc tính/siêu dữ liệu pdf trong python
Trả lời
Hãy thử pdfminer:
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
fp = open('diveintopython.pdf', 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
print doc.info # The "Info" metadata
Dưới đây là kết quả:
>>> [{'CreationDate': 'D:20040520151901-0500',
'Creator': 'DocBook XSL Stylesheets V1.52.2',
'Keywords': 'Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free',
'Producer': 'htmldoc 1.8.23 Copyright 1997-2002 Easy Software Products, All Rights Reserved.',
'Title': 'Dive Into Python'}]
Mọi chi tiết, nhìn vào hướng dẫn này: A lightweight XMP parser for extracting PDF metadata in Python.
Tôi đã triển khai điều này bằng cách sử dụng pyPdf. Vui lòng xem mã mẫu bên dưới.
from pyPdf import PdfFileReader
pdf_toread = PdfFileReader(open("doc2.pdf", "rb"))
pdf_info = pdf_toread.getDocumentInfo()
print str(pdf_info)
Output:
{'/Title': u'Microsoft Word - Agnico-Eagle - Complaint (00040197-2)', '/CreationDate': u"D:20111108111228-05'00'", '/Producer': u'Acrobat Distiller 10.0.0 (Windows)', '/ModDate': u"D:20111108112409-05'00'", '/Creator': u'PScript5.dll Version 5.2.2', '/Author': u'LdelPino'}
Lưu ý: pyPdf homepage nói nó không còn được duy trì.
Không sử dụng 'tệp', sử dụng' mở' để thay thế. –
Lưu ý rằng pyPdf được đánh dấu trên trang chủ không được hỗ trợ nữa. –
Đối với Python 3 thấy PyPDF2 với ví dụ mã từ @Khaleel cập nhật thành:
from PyPDF2 import PdfFileReader
pdf_toread = PdfFileReader(open("test.pdf", "rb"))
pdf_info = pdf_toread.getDocumentInfo()
print(str(pdf_info))
Cài đặt sử dụng pip install PyPDF2
.
Đối với Python 3 và pdfminer mới (pip cài đặt pdfminer3k):
import os
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfparser import PDFDocument
fp = open("foo.pdf", 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
parser.set_document(doc)
doc.set_parser(parser)
if len(doc.info) > 0:
info = doc.info[0]
print(info)
Một heads-up: tác giả của pdfminer nói nó không tương thích với Python 3, ít nhất kể từ ngày của bài viết này ([link] (https://github.com/euske/pdfminer/)) – JSmyth
Kể từ tháng 11 năm 2013, "Lớp PDFDocument hiện nhận đối tượng PDFParser làm đối số. PDFDocument.set_parser() và PDFParser.set_document() bị xóa". Vì vậy, bạn chỉ có thể làm doc = PDFDocument (parser), và bỏ qua các cuộc gọi đến set_document, set_parser, và khởi tạo. –
@JSmyth [Chỉ số PyPi] (https://pypi.python.org/pypi?%3Aaction=search&term=pdfminer&submit=search) hiện liệt kê ba nhánh «pdfminer' hoạt động tương thích với Python 3.' pip search pdfminer' – zero2cx