Python操作pdf文件|pdfpiumbe&PyPDF2

Python操作pdf文件

1 pdfpiumber库

pdfpiumber是一个免费、开源的Python库,用于提取PDF文件中的文本和表格数据。它包括一个PDF解析器,可以找到和提取PDF文档中的文本和表格数据。

1.1 安装pdfplumber库

在命令行中输入执行

pip install pdfplumber

1.2 简单使用

import pdfplumber

# pdf文件
pdf_path = './data/1.pdf'

with pdfplumber.open(pdf_path) as pdf:
    # 查看所有的页
    print(pdf.pages)
    # 遍历每一页pdf page
    for page in pdf.pages:
        # 提取文字
        text = page.extract_text()
        # 提取表格内容
        tabel = page.extract_table()
        # 获取pdf页面的大小
        bbbox = page.bbox
        
        print(text)
        print(tabel)
        print(bbbox)

方法和功能:

  1. crop 主要用于裁剪页面
  2. within_bbox 类似crop,但是如果对象含有超出裁剪边框(bounding box)部分,则不包含此对象
  3. dedupe_chars 返回具有重复字符的页面版本
  4. extract_text 将 page 中的字符对象(character object)装入单个字符串(string)
  5. extract_words 提取单词,返回一个 list 返回 pdf 文件中字符的属性
  6. extracr_tables 提取表格中的内容,并转为一个list对象
  7. to_image 返回关于 PageImage 类的实例
  8. close 关闭文件

以上就是使用PDFPlumber库的基本教程。PDFPlumber库还有其他高级功能,例如提取图像和链接。可以查看官方文档以了解更多信息。

2 PyPDF2库

PyPDF2是一个纯Python库,用于处理基本的PDF文档。它允许您合并,拆分,裁剪和旋转PDF文件。

以下介绍pypdf2的3.0版本的使用。

2.1 安装PyPDF2库

在命令行中输入以下命令以安装PyPDF2库:

pip install PyPDF2

2.2 使用

  1. 导入模块
import PyPDF2 as pdf2
  1. 打开PDF文件

对于打开一个PDF文件,我们需要使用PyPDF2方法打开该文件:

# 读pdf
pdf_reader = pdf2.PdfReader(pdf_path)

要访问PDF的页面数量,请使用:

len(pdf_reader.pages)
  1. 读取PDF文本内容

要仅仅读取PDF的文本内容,可以使用以下代码:

for page in pdf_pages:
    text = page.extract_text()
    print(text)
  1. 写入PDF文件

使用以下代码打开一个新的PDF文件:

# pdf编写器
pdf_write = pdf2.PdfWriter()

可以写入文本和图像,使用以下代码:

# 添加页
pdf_writer.addPage(page)

我们可以通过 PdfWriter 来创建一个新的PDF,将文本和图像添加到新的PDF中:

new_file = open('new_file_name.pdf', 'wb')
pdf_writer.write(new_file)
new_file.close()

以上是使用PyPDF2库的基本讲解。使用PyPDF2,你可以在Python代码中处理PDF文件。 PyPDF2也有一些高级功能,例如将PDF拆分为多个文件,添加密码保护等。

2.3 代码案例

2.3.1 拆分pdf

import PyPDF2 as pdf2

pdf_path = './data/企业注册登记表.pdf'

# 1 读pdf
pdf_reader = pdf2.PdfReader(pdf_path)
# 2 获取所有页
pdf_pages = pdf_reader.pages

# 3 获取每一页的pdf文本信息
for page in pdf_pages:
    # 提取文本
    text = page.extract_text()
    print(text)

# 4 拆分pdf 每一页写入一个pdf中
for i, page in enumerate(pdf_pages):
    # pdf编写器
    pdf_write = pdf2.PdfWriter()
    # 添加页 pdf_write.add_page(page)
    pdf_write.add_page(pdf_reader.pages[i])
    with open(f'./{i + 1}.pdf', 'wb') as f:
        # 写入文件
        pdf_write.write(f)

2.3 2 合并pdf

import pathlib
import PyPDF2 as pdf2

pdf_files = pathlib.Path('./data').rglob('*.pdf')

pdf_merger = pdf2.PdfMerger()

for pdf in pdf_files:
    # 下面两行代码效果一样
    pdf_merger.append(pdf)
    # pdf_merger.append(pdf2.PdfReader(pdf))

with open('./合并.pdf', 'wb') as f:
    pdf_merger.write(f)

PdfMerger.append方法:

@deprecation_bookmark(bookmark="outline_item", import_bookmarks="import_outline")
    def append(
        self,
        fileobj: Union[StrByteType, PdfReader, Path],
        outline_item: Optional[str] = None,
        pages: Union[
            None, PageRange, Tuple[int, int], Tuple[int, int, int], List[int]
        ] = None,
        import_outline: bool = True,
    ) -> None:

所以使用PdfMerger中的append方法时,可以直接传入pdf文件的路径,二进制内容和pdf读取器(StrByteType, PdfReader, Path)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章