网站空间需要续费,百度做网站效果怎么样,网站可以做弹窗广告么,设计方案怎么写目录
文档操作
打开文档
获取文档信息
删除页
复制页
移动页
选择重构合并
保存关闭
页对象操作
内容读取
获取页对象的字体样式
插入文本标签
插入文本内容
字体设置
insert_text添加文本
insert_textbox添加文本
插入图片
获取页面注释、链接、表单字段
…目录
文档操作
打开文档
获取文档信息
删除页
复制页
移动页
选择重构合并
保存关闭
页对象操作
内容读取
获取页对象的字体样式
插入文本标签
插入文本内容
字体设置
insert_text添加文本
insert_textbox添加文本
插入图片
获取页面注释、链接、表单字段
获取页面RGB图像数据并将页面保存为图片
获取页面的矢量图(转svg)
创建新页面 安装pip install PyMuPDF -i https://pypi.mirrors.ustc.edu.cn/simple/
PyMuPDF库支持多种文档格式的内容读取如PDF、XPS、CBZ等支持将文档转换为其他格式如HTML、SVG、PDF和CBZ等。 PyMuPDF可以修改pdf文件的内容。其他文件类型用PyMuPDF是只读的。但可以将任何文档包括图像转换为PDFDocument.convert_to_pdf()然后将再使用PyMuPDF的功能进行操作。
参考文档https://pymupdf.readthedocs.io/en/latest/page.html
文档操作
打开文档
open()没有参数时是打开新的文档有参数时是加载指定文档
fitz和pymupdf 是同一个库操作相同
import fitz # fitz就是PyMuPDF的别名
# import pymupdf # 同fitz# new_pdf pymupdf.open()
# pdf_document pymupdf.open(pdf_path) # 打开文档获取文档对象new_pdf fitz.open()
pdf_document fitz.open(pdf_path) # 打开文档获取文档对象
获取文档信息 print(pdf_document.metadata) # 获取文档信息print(pdf_document.get_toc()) # 获取目录大纲print(pdf_document.page_count) # 获取页数
文档信息如下
{format: PDF 1.7, title: , author: , subject: , keywords: 7e1d6144af9e0ffb0HJ_0924E1RQy4S3U_uCQ-ernv_VMhNm, creator: Microsoft® Word 2021, producer: Microsoft® Word 2021; modified using iText® 5.5.13 ©2000-2018 iText Group NV (AGPL-version), creationDate: D:202403222023010800, modDate: D:202404230926590800, trapped: , encryption: None}
删除页
delete_page 删除指定页,一次只删除一页参数为对应页的索引
pdf_document.delete_page(-1)
delete_pages 删除多页传入参数如果为列表/元组/范围可删除对应页如果是两个整数则删除从第n页到第m页(关键字from_page/to_page) pdf_document.delete_pages((2,4,7))pdf_document.delete_pages(3,5)
复制页 pdf_document.copy_page(2) # copy_page(n,m)将第n1页复制到第m1页,m默认为-1(最后一页)复制PDF文档中的页面。这只会创建同一个页面对象的另一个引用pdf_document.fullcopy_page(2) # fullcopy_page(n,m)将第n1页复制到第m1页,m默认为-1(最后一页)复制一整页
移动页
pdf_document.move_page(0,2) # move_page(n,m)将第n1页移动到第m1页,m默认为-1(最后一页)
选择重构合并
在列表中建立带有页码的子pdf。参数为需要重新创建指定页的页码列表页码必须是在范围内会根据列表中的顺序选择整合文档这里演示只合并奇数页。
pdf_document.select([i for i in range(0,pdf_document.page_count,2)])
保存关闭 def save(self,filename,garbage0,clean0,deflate0,deflate_images0,deflate_fonts0,incremental0,ascii0,expand0,linear0,no_new_id0,appearance0,pretty0,encryption1,permissions4095,owner_pwNone,user_pwNone,preserve_metadata1,use_objstms0,compression_effort0,): pdf_document.save(rf{save_img_path}\{pdf_file_name}-副本{int(time())}.pdf)pdf_document.close()
页对象操作
内容读取
PyMuPDF支持将读取到的内容转为多种格式的数据默认为text纯文本内容
text默认带换行符的纯文本不包含格式、文字位置详细信息和图像。 pdf_document fitz.open(pdf_path) # 打开文档获取文档对象for page_num in range(len(pdf_document)):page pdf_document.load_page(page_num) # 获取页对象text page.get_text() # 获取页面文本内容print(text)
blocks生成文本块段落的列表。
words生成不包含空格的字符串单词列表。
html创建包括任何图像的html数据。
def fitz_pdf(pdf_path):pdf_document fitz.open(pdf_path) # 打开文档获取文档对象for page_num in range(len(pdf_document)):page pdf_document.load_page(page_num) # 获取页对象html page.get_text(html) # 获取页面内容with open(ftest-{page_num}.html, w) as f:f.write(html)pdf_document.close()
dict 或 json
rawdict或 rawjson包含XML之类字符详细信息的dict及json的超级集合。
xhtml包含图像及文本信息级别的html数据。
xml不包含图像只有每个文本字符的完整位置和字体信息。
获取页对象的字体样式 page pdf_document.load_page(page_num) # 获取页对象print(page.get_fonts()) # 获取字体样式
[(14, ttf, TrueType, BCDEEECambria, F1, WinAnsiEncoding), (15, ttf, Type0, BCDFEEMS-Gothic, F2, Identity-H), (16, ttf, Type0, BCDGEEMicrosoftYaHei, F3, Identity-H), (17, n/a, TrueType, ArialMT, F4, WinAnsiEncoding), (18, ttf, Type0, BCDHEESimHei, F5, Identity-H), (19, ttf, Type0, BCDIEEMicrosoftYaHei-Bold, F6, Identity-H), (20, ttf, TrueType, BCDJEESimHei, F7, WinAnsiEncoding), (21, ttf, TrueType, BCDKEEMicrosoftYaHei, F8, WinAnsiEncoding), (22, ttf, TrueType, BCDLEECambria-Bold, F9, WinAnsiEncoding), (23, n/a, TrueType, Arial-BoldMT, F10, WinAnsiEncoding), (24, ttf, Type0, BCDMEEWingdings-Regular, F11, Identity-H), (25, ttf, TrueType, BCDNEEArialUnicodeMS, F12, WinAnsiEncoding), (26, ttf, Type0, BCDOEEArialUnicodeMS, F13, Identity-H), (1, n/a, Type1, Helvetica, Xi0, WinAnsiEncoding)]
插入文本标签
page.add_text_annot((50, 150), f文本便利贴测试,这是{page_num 1}页) 插入文本内容
字体设置
如果写入内容时不指定字体时中文内容会乱码。
内置字体:china-s 黑体 china-ss 宋体 china-t 繁体黑体 china-ts 繁体宋体。
自定义字体添加如下很多网上分享者都用 fitz.Font() 添加根本没有用。 page.insert_font(fontname三极妙漫体,fontfilerC:\Users\DELL\AppData\Local\JianyingPro\三极妙漫体.ttf,fontbufferNone, set_simpleFalse) # 自定义字体添加
insert_text添加文本 def insert_text(self,point: point_like,buffer_: typing.Union[str, list],fontsize: float 11,lineheight: OptFloat None,fontname: str helv,fontfile: OptStr None,set_simple: bool 0,encoding: int 0,color: OptSeq None,fill: OptSeq None,render_mode: int 0,border_width: float 1,rotate: int 0,morph: OptSeq None,stroke_opacity: float 1,fill_opacity: float 1,oc: int 0,) - int:
page.insert_text((50, 50), 这是中文测试, fontsize15, fontnamechina-s)
insert_textbox添加文本 def insert_textbox(self,rect: rect_like,buffer: typing.Union[str, list],fontname: OptStr helv,fontfile: OptStr None,fontsize: float 11,lineheight: OptFloat None,set_simple: bool 0,encoding: int 0,color: OptSeq None,fill: OptSeq None,expandtabs: int 1,border_width: float 0.05,align: int 0,render_mode: int 0,rotate: int 0,morph: OptSeq None,stroke_opacity: float 1,fill_opacity: float 1,oc: int 0,) - float: text_rect fitz.Rect(80, 80, 500, 100) # 定义文本框位置page.insert_textbox(text_rect, 测试文本框添加操作, fontsize12,alignfitz.TEXT_ALIGN_LEFT, fontname三极妙漫体,fill(200 / 255, 250 / 255, 100 / 255), rotate90, fill_opacity.2)
插入图片
insert_image(rect, *, alpha-1, filenameNone, height0, keep_proportionTrue, maskNone, oc0, overlayTrue, pixmapNone, rotate0, streamNone, width0, xref0) img_rect fitz.Rect((50, 50, 150, 100))page.insert_image(img_rect, filenamerE:\桌面\99\测试图片\1.jpg) # 可设置位置和图片大小
获取页面注释、链接、表单字段 for ant in page.annots(): # 获取注释print(ant)for link in page.links(): # 获取链接print(link)for widget in page.widgets(): # 获取表单字段print(widget)
获取页面RGB图像数据并将页面保存为图片
get_pixmap(*, matrixpymupdf.Identity, dpiNone, colorspacepymupdf.csRGB, clipNone, alphaFalse, annotsTrue)
获取页面RGB图像参数包含分辨率、颜色空间可生成灰度图像或具有减色方案的图像、透明度、旋转、镜像、移位、剪切等。可设置宽度、高度等。 pix page.get_pixmap()pix.save(test.png)
获取页面的矢量图(转svg) svg_img page.get_svg_image()with open(test.svg, w) as f:f.write(svg_img)
创建新页面
pdf_document.new_page()