pymupdf使用介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

pymupdf使用
PyMuPDF是一个用Python编写的PDF文档操作库,它是基于MuPDF库的Python封装,可以进行PDF文档的创建、读取、编辑和转换等操作。

MuPDF是一个高性能、轻量级的PDF和XPS文件渲染器和解析器,它是开源的、跨平台的,并且可以嵌入到其他应用程序中使用。

PyMuPDF与MuPDF库密切集成,非常适合处理PDF 文件。

以下是一些PyMuPDF的示例:
1. 打开PDF文件
```python
import fitz
pdf_document = "example.pdf" # PDF文件路径
doc = fitz.open(pdf_document) # 打开PDF文件
# 如需安全打开PDF文件,请将“must_exist”参数设置为True
# doc = fitz.open(pdf_document, must_exist=True)
```
使用`open()`方法打开PDF文件,返回一个`fitz.Document`对象。

第一个参数是要打开的PDF文件的路径。

如果想安全打开PDF文件,在`open()`方法中使用`must_exist=True`参数。

2. 读取PDF页面
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
page = doc[0] # 获取第一页
print(page.getText()) # 输出第一页的文本内容
doc.close()
```
使用索引访问`Document`对象中的页面列表,使用`getText()`方法获取文本内容。

请注意,文本内容提取可能会因PDF文档的制作方式和字体等因素而有所不同。

3. 转换PDF页面为图像
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
for page in doc:
pix = page.getPixmap()
output_path = f"page_{page.number}.png"
pix.writePNG(output_path)
doc.close()
```
遍历`Document`对象中的页面列表,使用`getPixmap()`方法获取页面的图像数据,并使用`writePNG()`方法将图像数据写入文件。

这将把每个页面都转换为一张PNG图像。

4. 创建PDF文件
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
new_doc = fitz.open()
new_page = new_doc.newPage() # 创建一个新页面
new_page.insertPDF(doc, from_page=0, to_page=1) # 插入原始PDF文档的第一页到新页面
new_doc.save("new_file.pdf")
new_doc.close()
doc.close()
```
首先打开一个要复制的PDF文件,然后创建一个新文档。

在新文档中插入要复制的页面,并将插入的页面保存为一个新的PDF文件。

除了上面的例子外,PyMuPDF还支持很多其他操作,比如旋转、裁剪、水印、加密、合并、分割、切换和旋转PDF文档等。

你可以通过PyMuPDF官方文档来学习更多操作。

5. 页码操作
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
for n in range(len(doc)):
page = doc[n]
page_number = n + 1
page.addText("Page %s" % page_number, fontsize=20)
doc.save("example_new.pdf")
doc.close()
```
遍历`Document`对象中的每个页面,使用`addText()`方法在每个页面上添加页面号码。

6. 页面裁剪
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
for page in doc:
w, h = page.rect.width, page.rect.height
rect = fitz.Rect(0, h/2, w, h)
page.setCropBox(rect)
doc.save("example_cropped.pdf")
doc.close()
```
遍历`Document`对象中的每个页面,并定义要保留的裁剪框。

在本例中,`setCropBox()`方法定义了一个新的矩形,它覆盖页面的后半部分。

通过设置每个页面的裁剪框区域,对整个PDF文档进行页面裁剪。

7. 图像转换为PDF
```python
import fitz
from PIL import Image
image_file = "example.png"
pdf_file = "example.pdf"
image = Image.open(image_file)
image.convert('RGB').save(image_file) # 转换为RGB格式
pdf_document = fitz.open()
pdf_page = pdf_document.newPage()
pdf_image = fitz.Pixmap(image_file)
pdf_page.insertImage(pdf_image)
pdf_document.save(pdf_file)
pdf_document.close()
```
使用Pillow库打开一个图像文件,并转换为RGB格式。

然后创建一个新的`fitz.Document`对象,并使用`newPage()`方法创建一个新的空白页面;使用`Pixmap()`方法将图像转换为兼容的PixMap对象,并使用`insertImage()`方法插入图像。

最后,使用`save()`方法将新PDF文档保存。

8. 文本搜索和高亮
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
search_term = "Python"
for page in doc:
text_instances = page.search_for(search_term)
highlight = None
for inst in text_instances:
highlight = page.addHighlightAnnot(inst)
doc.save("example_highlighted.pdf")
doc.close()
```
遍历`Document`对象中的每个页面,使用`search_for()`方法查找文本实例,并使用`addHighlightAnnot()`方法在文本实例周围添加突出显示注释。

9. 旋转和翻转页面
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
for page in doc:
page.setRotation(90) # 将页面顺时针旋转90度
page.flip(upside_down=True)
doc.save("example_rotated.pdf")
doc.close()
```
使用`setRotation()`方法可以旋转页面。

在这个例子中,我们将每个页面顺时针旋转90度。

使用`flip()`方法可以翻转页面。

在这个例子中,我们将每个页面上下翻转。

10. 添加水印
```python
import fitz
pdf_document = "example.pdf"
doc = fitz.open(pdf_document)
for page in doc:
text = "Confidential"
pos = fitz.Point(20, 20) # 水印位置
font_size = 30 # 水印字号
red = (1,0,0) # 红色
page.insertTextbox(pos, text, fontsize=font_size, color=red)
doc.save("example_watermark.pdf")
doc.close()
```
使用`insertTextbox()`方法将文本添加为水印。

在这个例子中,每个页面都添加了一个文本框,其中包括“Confidential”字样,字体大小为30,颜色为红色。

位置通过`Point()`方法指定。

这些示例只涉及到了PyMuPDF的一小部分功能,PyMuPDF还有很多其他有用的功能。

了解PyMuPDF的所有功能可以在大多数PDF应用程序开发中提供很大的帮助。

相关文档
最新文档