python 给PDF添加目录

目录

一、相关库安装

1、PyPDF系列:

2、pdfplumber

3、pdfminer3k

二、主要代码

1、pdfplumber提取相关信息

2、addBookmark


一、相关库安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pdfplumber
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pypdf2


pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pdfminer3k

1、PyPDF系列:

  PyPDF2,PyPDF3, PyPDF4,主要对PDF进行操作:合并,拆分,旋转。

以下是常见测试代码:

pdfpath='D:/A_myfile/deep learning  by shu008.pdf'
from PyPDF2 import PdfFileReader as reader,PdfFileWriter as writer
with open(pdfpath,'rb') as f:
    pdf = reader(f)
    infomation = pdf.getDocumentInfo()
    number_of_pages = pdf.getNumPages()

    txt = f'''{infomation} information:
    Author : {infomation.author},
    Creator : {infomation.creator},
    Producer : {infomation.producer},
    Subject : {infomation.subject},
    Title : {infomation.title},
    Number of pages : {number_of_pages}
    '''
    print(txt)

2、pdfplumber

  获取PDF每页的每个文本字符、矩形和线条的详细信息。另外:表格提取和可视化调试。

常见测试代码: 

import pdfplumber
pdf = pdfplumber.open(path)
import pandas as pd
for page in pdf.pages:
    # 获取当前页面的全部文本信息,包括表格中的文字
    # print(page.extract_text())   # 只提取文字,对表格信息,有简单合并行
    # print(page.extract_words())   # 提取字符串的文本、坐标等信息
    # print(page.extract_tables())   # 按行元素返回表格信息,无坐标
    # print(page.chars)   # 按字符而非字符串提取文本、坐标等信息
 
    for t in page.extract_tables():
        # for row in t:
        #     print(row)
        # 得到的table是嵌套list类型,转化成DataFrame更加方便查看和分析
        df = pd.DataFrame(t[1:], columns=t[0])
        print(df)
    # 只用第一页测试
    break
 
pdf.close()

链接:GitHub - jsvine/pdfplumber: Plumb a PDF for detailed information about each char, rectangle, line, et cetera — and easily extract text and tables.

  Plumb a PDF for detailed information about each text character, rectangle, and line. Plus: Table extraction and visual debugging.

  Works best on machine-generated, rather than scanned, PDFs. Built on pdfminer.six

3、pdfminer3k

  pdfminer 是python2库,pdfminer3k是python3库。相较于pdfplumber,操作繁琐。暂时没用上

dir(pdfminer)
pdfminer?
pdfminer??

二、主要代码

1、pdfplumber提取相关信息

  根据不同PDF,编写目录信息、页码信息的代码。

import re
import pdfplumber

pdfpath='D:/A_myfile/deep learning  by shu008.pdf'
with pdfplumber.open(pdfpath) as pdf:
    cata_list = []
    for page in pdf.pages:
        text = page.extract_text() # 提取文本
        if text.find('Chen Gong') != -1:
            text = text.partition('Chen Gong') # 1、提取目录信息。
            page_num = re.sub("\D", "", str(page)) # 2、提取目录所在页数
            cata_list.append((text[0],page_num))
print(cata_list)        

2、addBookmark

from PyPDF2 import PdfFileReader as reader,PdfFileWriter as writer
pdfpath='D:/A_myfile/deep learning  by shu008.pdf'
pdf_in=reader(pdfpath)
pdf_out=writer()

pageCount=pdf_in.getNumPages()
#print(pageCount)
for iPage in range(pageCount):
    pdf_out.addPage(pdf_in.getPage(iPage))

for elem in range(len(cata_list)):
    page_name=cata_list[elem][0][:-1] # 目录信息
    page_num=int(cata_list[elem][1]) # 页码信息    
    pdf_out.addBookmark(page_name,page_num-1,None)

outpath='D:/A_myfile/shu008目录版.pdf'
with open(outpath,'wb') as fout:
    pdf_out.write(fout)

参考:1、用python依据txt文档给pdf添加目录以及超链接 - 知乎

2、最强的Python 办公自动化之 PDF 攻略来了(全)_菜鸟学Python的博客-CSDN博客 

3、Python 操作 PDF,这两个库必须会!__k同学的博客-CSDN博客 

 4、python常用PDF库总结_awk_bioinfo的博客-CSDN博客_python的pdf库

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值