导入
import fitz
打开文档
doc = fitz.open(filename)
# fitz.Document(filename)
Document对象的属性
Document.page_count 文档页数
Documet.metadata 文档元数据(文档信息),字典
Document.get_toc() 文档目录(list对象)
Doument.load_page(page_num) 读取指定的一页,返回page对象
>>> doc.metadata
{'format': 'PDF 1.7', 'title': '', 'author': 'Griselda Conejo López', 'subject': '', 'keywords': '', 'creator': 'Microsoft® Word for Microsoft 365', 'producer': 'Microsoft® Word for Microsoft 365', 'creationDate': "D:20200619152706-04'00'", 'modDate': "D:20200619152706-04'00'", 'trapped': '', 'encryption': None}
Page对象
可以将页面渲染为位图图像或矢量(SVG)图像,可以选择缩放、旋转、移动或剪切页面。
可以抽取页面中的文本、图片,搜索文本;
可以在页面中添加文本和图像。
1.创建表示页面的Page对象,页号也可以用负值来取页面。
page = doc.load_page(pno) # loads page number 'pno' of the document (0-based)
page = doc[pno] # the short form
2.迭代处理页面
for page in doc:
# do something with 'page'
# ... or read backwards
for page in reversed(doc):
# do something with 'page'
# ... or even use 'slicing'
for page in doc.pages(start, stop, step):
# do something with 'page'
3.处理页面中超链接和注释
# get all links on a page
links = page.get_links()
for link in page.links():
# do something with 'link'
for annot in page.annots():
# do something with 'annot'
for field in page.widgets():
# do something with 'field'
生成页面
创建包含位图图像的页面:
1.获取一个Pixmap对象,他可以包含RGB图像,提供了控制图像的方法,还可以传入alpha=True,用来包含RGBA图像。
pix = page.get_pixmap()
2.使用矢量图,要用page.get_svg_image()
3.放图像入页面
pix.save('a.png')
抽取文本和图像
text = page.get_text(opt)
opt可以为以下常用格式参数
“text” 默认参数,仅返回所有用换行符分隔的字符串,无格式、文本位置信息
“block” 返回段落文本列表,即列表每一元素为一段落文本,还包含文本在页面上的坐标位置等其他信息,如:(76.58399963378906, 699.2760009765625, 529.6240234375, 715.7640380859375, ' You can \n', 24, 0)为一个例了。
“words” 生成一个单词列表,如下为列表中的一项(496.69000244140625, 713.3400268554688, 526.6420288085938, 729.3480224609375, 'height', 25, 0, 15)
“html” 生成包含图片的html页面
搜索文本
areas = page.search_for("mupdf")
返回搜索到的文本在页面中所有该文本的所在的页面位置信息,结果为Rect类型数据的一个列表
保存文档
Document.save()
对页面进行修改、删除、添加和调整
Document.delete_page()
Document.delete_pages()
Document.copy_page()
Document.fullcopy_page()
Document.move_page()
Document.select()
Document.insert_page()
Document.new_page()
合并与分割pdf
# append complete doc2 to the end of doc1
doc1.insert_pdf(doc2)
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")
关闭文档
Document.close()