通过自由Python图书馆提取文本和图像
免费Python API允许编辑和呈现PDF文件;提取文本和图像、编辑PDF页、合并/分裂和转换PDF页。
从PyMuPDF开始
如果您的平台可以使用Python轮安装PyMuPDF、下列命令将安装。
通过管道安装PyMuPDF
python -m pip install --upgrade pip
python -m pip install --upgrade pymupdf
通过git存储器
git clone https://github.com/pymupdf/PyMuPDF.git
也可以手动安装; 直接从 GitHub 存储库下载最新版本文件。
通过Python搜索PDF档文本
PDF是世界上最喜欢的文件格式之一、可以在互联网上分享文件、因为它保留了文本格式和图形。 但与其他文件相比、在这些文件中搜索文本并不容易。 免费的PyMuPDF库允许软件开发者在Python应用程序中添加文本搜索功能。 它允许查找页面上的某个文本字符串。
通过Python查找PDF页文本的服装
areas = page.search_for("mupdf")
通过Python提取PDF个文本和图像API
开放源码YPDF图书馆包括了PDF个文本和图像工作的几个重要特点。 图书馆提供了从PDF份文件中提取文本和图像的各种功能。 默认情况下、它允许提取纯文本与行中断。 没有格式化、没有文本位置详细、没有图像。 此外、它支持生成一个文本块列表、生成一个单词列表、创建包括任何图像在内的页面的完整视觉版本以及更多。
如何通过Python API从PDF提取文本
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个文件。 免费开放源码交叉平台。YPDF库让软件程序员能够轻松地将不同的文件或复制页合并在PDF个文档之间。 它还使用户有能力将大PDF个文档分成较小的文件、只有几行Python代码。 还可以选择PDF份文件的某些特定页面、从中创建一份新的文件。
从第一和最后十页创建新文件
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")
通过Python阅读和出口PDF元数据
开放源代码YPDF库提供了完整的功能、可以访问和读取PDF个文件的元数据而不受任何外部依赖。 它支持各种元数据键、例如创建日期、作者名称、创建者应用程序、任何主题、加密方法、文件格式等。 也可以将元数据出口到CSV格式。
通过Python API出口PDF元数据至CSV元
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()