رندر فایل های PDF، استخراج متن و تصاویر از طریق کتابخانه رایگان پایتون
رایگان Python API اجازه می دهد تا فایل های PDF را ویرایش و رندر کنید. متن و تصاویر را استخراج کنید، صفحات PDF را ویرایش کنید، PDF ها را به راحتی ادغام/تقسیم و تبدیل کنید.
PyMuPDF یک API منبع باز Python سبک وزن است که پیوندها و انتزاعات پایتون را به MuPDF اضافه می کند. API از نظر اندازه کوچک است اما در عین حال بسیار سریع است و از تعدادی فرمت اسناد محبوب مانند PDF، XPS، OpenXPS، CBZ، EPUB، و فرمتهای FB2 (eBooks) پشتیبانی میکند و همچنین حدود 10 فرمت تصویر محبوب را نیز میتوان باز کرد. مانند اسناد رسیدگی می شود. PyMuPD بسیار قابل اعتماد است و به دلیل قابلیت رندر بالای خود شناخته شده است. از آنجایی که این کتابخانه وزن بسیار سبکی دارد، آن را برای پلتفرمهایی که منابع معمولاً محدود هستند، مانند گوشیهای هوشمند، به گزینهای عالی تبدیل میکند.
ویژگی های پایه و پیشرفته متعددی وجود دارد که توسط PyMuPDF API برای رندر و تبدیل اسناد PDF پشتیبانی می شود، مانند تبدیل PDF به PNG، دسترسی و مشاهده ابرداده، کار با خطوط کلی، رندر کردن یک صفحه به یک تصویر شطرنجی یا برداری (SVG)، متن PDF. جستجوی پشتیبانی، استخراج متن از صفحه PDF، استخراج تصاویر از PDF، نمایش تصویر در رابط کاربری گرافیکی، تغییر صفحه PDF، ایجاد صفحات PDF جدید، حذف صفحات PDF ناخواسته، جاسازی داده ها و غیره. PyMuPDF از پلتفرم های متعددی مانند مک، لینوکس و ویندوز پشتیبانی می کند.
شروع کار با PyMuPDF
PyMuPDF را می توان با استفاده از pip نصب کرد، اگر دستورات زیر برای پلتفرم شما در دسترس باشد، از چرخ پایتون نصب می شوند.
PyMuPDF را از طریق پیپ نصب کنید
python -m pip install --upgrade pip
python -m pip install --upgrade pymupdf
PyMuPDF را از طریق git Repository کلون کنید
git clone https://github.com/pymupdf/PyMuPDF.git
همچنین امکان نصب آن به صورت دستی وجود دارد. آخرین فایل های نسخه را مستقیماً از مخزن GitHub دانلود کنید.
جستجوی متن در فایل های PDF از طریق پایتون
PDF یکی از فرمت های فایل مورد علاقه جهان برای به اشتراک گذاری اسناد در سراسر اینترنت بوده است زیرا تمام قالب بندی متن و گرافیک درون آن را حفظ می کند. اما جستجوی متن در این فایل ها در مقایسه با سایر اسناد آسان نیست. کتابخانه رایگان PyMuPDF به توسعه دهندگان نرم افزار اجازه می دهد تا قابلیت های جستجوی متن را در برنامه های پایتون خود اضافه کنند. این امکان جستجو در جایی که در صفحه یک رشته متن خاص وجود دارد را می دهد.
از طریق پایتون جستجو کنید که رشته متنی صفحه PDF در کجا ظاهر می شود
areas = page.search_for("mupdf")
استخراج متن و تصاویر PDF از طریق Python API
کتابخانه PyMuPDF منبع باز دارای چندین ویژگی مهم برای کار با متن و تصاویر PDF است. این کتابخانه عملکردهای مختلفی را برای استخراج متن و همچنین تصاویر از اسناد PDF ارائه کرده است. بهطور پیشفرض، امکان استخراج متن ساده با شکستن خط را فراهم میکند. بدون قالب بندی، بدون جزئیات موقعیت متن، بدون تصویر. علاوه بر این، از تولید فهرستی از بلوکهای متنی، تولید فهرستی از کلمات، ایجاد یک نسخه کامل بصری از صفحه شامل هر تصویر و بسیاری موارد دیگر پشتیبانی میکند.
نحوه استخراج متن از PDF از طریق Python API
from operator import itemgetter
from itertools import groupby
import fitz
doc = fitz.open( 'mydocument.pdf' )
pages = [ doc[ i ] for i in range( doc.pageCount ) ]
for page in pages:
text_words = page.getTextWords()
# The words should be ordered by y1 and x0
sorted_words = SortedCollection( key = itemgetter( 3, 0 ) )
for word in text_words:
sorted_words.insert( word )
# At this point you already have an ordered list. If you need to
# group the content by lines, use groupby with y1 as a key
lines = groupby( sorted_words, key = itemgetter( 3 ) )
پیوستن و تقسیم اسناد PDF در برنامه های پایتون
ترکیب فایل های PDF مختلف یک ویژگی بسیار مفید است که به کاربران این امکان را می دهد که به جای داشتن دوجین PDF مجزا، یک PDF داشته باشند. کتابخانه چند پلتفرمی رایگان و منبع باز PyMuPDF به برنامه نویسان نرم افزار این قدرت را می دهد که فایل های مختلف را ادغام کنند یا صفحات را بین اسناد PDF مختلف کپی کنند. همچنین به کاربران این قدرت را می دهد که اسناد PDF بزرگ را تنها با چند خط کد پایتون به فایل های کوچکتر تقسیم کنند. همچنین می توان صفحات خاصی از یک سند PDF را انتخاب کرد و یک سند جدید از آن ایجاد کرد.
سند جدید را از 10 صفحه اول و آخر ایجاد می کند
doc2 = fitz.open() # new empty PDF
doc2.insert_pdf(doc1, to_page = 9) # first 10 pages
doc2.insert_pdf(doc1, from_page = len(doc1) - 10) # last 10 pages
doc2.save("first-and-last-10.pdf")
فراداده PDF را از طریق پایتون به CSV بخوانید و صادر کنید
کتابخانه منبع باز PyMuPDF عملکرد کاملی را برای دسترسی و خواندن فراداده فایل های PDF بدون هیچ گونه وابستگی خارجی ارائه کرده است. از انواع مختلفی از کلیدهای ابرداده مانند تاریخ ایجاد، نویسنده، عنوان، برنامه سازنده، هر موضوعی، روش رمزگذاری، فرمت فایل و غیره پشتیبانی می کند. همچنین امکان صادرات ابرداده به فرمت CSV وجود دارد.
صادر کردن متادیتا PDF به CSV از طریق Python API
import csv
import fitz
import argparse
parser = argparse.ArgumentParser(description="Enter CSV delimiter [;], CSV filename and documment filename")
parser.add_argument('-d', help='CSV delimiter [;]', default = ';')
parser.add_argument('-x', help='delete XML info [n]', default = 'n')
parser.add_argument('-csv', help='CSV filename')
parser.add_argument('-pdf', help='PDF filename')
args = parser.parse_args()
delim = args.d # requested CSV delimiter character
assert args.csv, "missing CSV filename"
assert args.pdf, "missing PDF filename"
print "delimiter", args.d
print "xml delete", args.x
print "csv file", args.csv
print "pdf file", args.pdf
print "----------------------------------------"
doc = fitz.open(args.pdf)
oldmeta = doc.metadata
print "old metadata:"
for k,v in oldmeta.items():
print k, ":",v
with open(args.csv) as tocfile:
tocreader = csv.reader(tocfile, delimiter = delim)
for row in tocreader:
assert len(row) == 2, "each row must contain 2 entries"
oldmeta[row[0]] = row[1]
print "----------------------------------------"
print "\nnew metadata:"
for k,v in oldmeta.items():
print k, ":",v
doc.set_metadata(oldmeta)
doc.saveIncr()