Python高效处理PDF的5大技巧

使用 PyPDF2 合并多个 PDF 文件

PyPDF2 是一个功能强大的库,可以轻松合并多个 PDF 文件。安装 PyPDF2 可以通过 pip 完成:pip install PyPDF2。创建一个新的 PDF 写入对象,逐个读取需要合并的文件并添加页面到写入对象中,最后保存合并后的文件。

from PyPDF2 import PdfMerger

merger = PdfMerger()
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

for pdf in pdf_files:
    merger.append(pdf)

merger.write("merged.pdf")
merger.close()

使用 pdfplumber 提取 PDF 文本内容

pdfplumber 提供了精确的文本提取功能,尤其适合处理复杂排版的 PDF。安装 pdfplumber:pip install pdfplumber。通过打开 PDF 文件并逐页提取文本,可以获取文档中的全部文字内容。

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)

使用 PyMuPDF 旋转 PDF 页面

PyMuPDF(又名 fitz)支持页面旋转、裁剪等操作。安装命令:pip install pymupdf。通过打开 PDF 文件,选择需要旋转的页面并设置旋转角度,最后保存修改后的文件。

import fitz

doc = fitz.open("input.pdf")
page = doc[0]  # 选择第一页
page.set_rotation(90)  # 旋转90度
doc.save("rotated.pdf")

使用 ReportLab 创建新的 PDF 文件

ReportLab 是一个生成 PDF 的库,适合从头创建动态 PDF。安装:pip install reportlab。通过创建画布对象,添加文本、图形等内容,可以生成自定义的 PDF 文件。

from reportlab.pdfgen import canvas

c = canvas.Canvas("new.pdf")
c.drawString(100, 750, "Hello, PDF!")
c.drawImage("image.png", 100, 600, width=100, height=100)
c.save()

使用 PDFMiner 提取 PDF 中的表格数据

PDFMiner 适合提取 PDF 中的表格数据。安装:pip install pdfminer.six。通过解析 PDF 文件,可以提取表格数据并转换为结构化格式,如 CSV。

from pdfminer.high_level import extract_text

text = extract_text("table.pdf")
lines = text.split('\n')
for line in lines:
    if line.strip():
        print(line)

以上方法覆盖了 PDF 处理的常见需求,包括合并、文本提取、页面修改、创建新文件和表格数据提取。根据具体需求选择合适的工具和库,可以显著提高工作效率。

BbS.okapop163.sbs/PoSt/1122_082158.HtM
BbS.okapop165.sbs/PoSt/1122_046722.HtM
BbS.okapop166.sbs/PoSt/1122_813997.HtM
BbS.okapop167.sbs/PoSt/1122_271641.HtM
BbS.okapop168.sbs/PoSt/1122_967042.HtM
BbS.okapop169.sbs/PoSt/1122_583422.HtM
BbS.okapop170.sbs/PoSt/1122_088388.HtM
BbS.okapop171.sbs/PoSt/1122_801708.HtM
BbS.okapop172.sbs/PoSt/1122_643849.HtM
BbS.okapop173.sbs/PoSt/1122_998431.HtM
BbS.okapop163.sbs/PoSt/1122_091266.HtM
BbS.okapop165.sbs/PoSt/1122_184620.HtM
BbS.okapop166.sbs/PoSt/1122_957716.HtM
BbS.okapop167.sbs/PoSt/1122_764378.HtM
BbS.okapop168.sbs/PoSt/1122_409187.HtM
BbS.okapop169.sbs/PoSt/1122_161377.HtM
BbS.okapop170.sbs/PoSt/1122_121253.HtM
BbS.okapop171.sbs/PoSt/1122_028686.HtM
BbS.okapop172.sbs/PoSt/1122_852055.HtM
BbS.okapop173.sbs/PoSt/1122_198246.HtM
BbS.okapop163.sbs/PoSt/1122_870497.HtM
BbS.okapop165.sbs/PoSt/1122_960583.HtM
BbS.okapop166.sbs/PoSt/1122_446126.HtM
BbS.okapop167.sbs/PoSt/1122_820978.HtM
BbS.okapop168.sbs/PoSt/1122_894327.HtM
BbS.okapop169.sbs/PoSt/1122_900533.HtM
BbS.okapop170.sbs/PoSt/1122_959188.HtM
BbS.okapop171.sbs/PoSt/1122_113072.HtM
BbS.okapop172.sbs/PoSt/1122_149345.HtM
BbS.okapop173.sbs/PoSt/1122_111388.HtM
BbS.okapop163.sbs/PoSt/1122_062642.HtM
BbS.okapop165.sbs/PoSt/1122_745183.HtM
BbS.okapop166.sbs/PoSt/1122_003285.HtM
BbS.okapop167.sbs/PoSt/1122_339766.HtM
BbS.okapop168.sbs/PoSt/1122_261464.HtM
BbS.okapop169.sbs/PoSt/1122_267312.HtM
BbS.okapop170.sbs/PoSt/1122_988731.HtM
BbS.okapop171.sbs/PoSt/1122_986149.HtM
BbS.okapop172.sbs/PoSt/1122_242996.HtM
BbS.okapop173.sbs/PoSt/1122_514955.HtM
BbS.okapop163.sbs/PoSt/1122_681034.HtM
BbS.okapop165.sbs/PoSt/1122_141418.HtM
BbS.okapop166.sbs/PoSt/1122_583681.HtM
BbS.okapop167.sbs/PoSt/1122_679128.HtM
BbS.okapop168.sbs/PoSt/1122_919253.HtM
BbS.okapop169.sbs/PoSt/1122_263255.HtM
BbS.okapop170.sbs/PoSt/1122_819462.HtM
BbS.okapop171.sbs/PoSt/1122_696277.HtM
BbS.okapop172.sbs/PoSt/1122_646853.HtM
BbS.okapop173.sbs/PoSt/1122_025191.HtM
BbS.okapop163.sbs/PoSt/1122_147560.HtM
BbS.okapop165.sbs/PoSt/1122_173838.HtM
BbS.okapop166.sbs/PoSt/1122_042811.HtM
BbS.okapop167.sbs/PoSt/1122_534807.HtM
BbS.okapop168.sbs/PoSt/1122_564206.HtM
BbS.okapop169.sbs/PoSt/1122_120982.HtM
BbS.okapop170.sbs/PoSt/1122_574526.HtM
BbS.okapop171.sbs/PoSt/1122_352605.HtM
BbS.okapop172.sbs/PoSt/1122_073110.HtM
BbS.okapop173.sbs/PoSt/1122_800790.HtM
BbS.okapop163.sbs/PoSt/1122_334130.HtM
BbS.okapop165.sbs/PoSt/1122_088245.HtM
BbS.okapop166.sbs/PoSt/1122_786498.HtM
BbS.okapop167.sbs/PoSt/1122_265545.HtM
BbS.okapop168.sbs/PoSt/1122_264345.HtM
BbS.okapop169.sbs/PoSt/1122_034209.HtM
BbS.okapop170.sbs/PoSt/1122_945900.HtM
BbS.okapop171.sbs/PoSt/1122_919285.HtM
BbS.okapop172.sbs/PoSt/1122_991629.HtM
BbS.okapop173.sbs/PoSt/1122_321536.HtM
BbS.okapop163.sbs/PoSt/1122_798864.HtM
BbS.okapop165.sbs/PoSt/1122_424365.HtM
BbS.okapop166.sbs/PoSt/1122_502319.HtM
BbS.okapop167.sbs/PoSt/1122_918177.HtM
BbS.okapop168.sbs/PoSt/1122_120303.HtM
BbS.okapop169.sbs/PoSt/1122_692611.HtM
BbS.okapop170.sbs/PoSt/1122_401583.HtM
BbS.okapop171.sbs/PoSt/1122_049647.HtM
BbS.okapop172.sbs/PoSt/1122_831683.HtM
BbS.okapop173.sbs/PoSt/1122_385806.HtM

#牛客AI配图神器#

全部评论

相关推荐

11-21 22:22
中南大学 Java
本人背景9本,三段大厂实习,后端开发方向。本文将分享秋招至今失败的一切,供读者参考,也是找个渠道抒发心里的郁闷。我的秋招大概在八月底开始,其中八月和九月的约面是非常多的,除了阿里系以外,其他企业大部分给了面试,也大多走到后续的流程了,具体情况如下:腾讯二面挂,字节完成hr面,百度完成三面,滴滴完成三面,美团二面挂,京东一面挂,小红书一面结束(之后过了两个月才挂,不知道何意味),虾皮完成hr面。这段时间的面试总体情况比较顺利,这是符合我的bg的预期的,但是挂的面试已经出现了一些奇怪的端倪,例如:腾讯一面聊了两个小时特别投缘,二面因为我不太会大数据的技术直接挂了美团一面二面都非常顺利,跟面试官聊的也很好,但是没有任何缘由的挂京东一面则是死扣我在京东的实习经历问细节,接近一年前的细节我实在是记不起来,于是挂了但是鉴于当时有好几家大厂已经走完流程,想着怎么样泡池子也能泡出来一个,于是非常悠然自得地等了一段时间现在回头看,其实命运似乎早已在冥冥之中影响着某些事国庆八天假期刚过去,我等来的不是其他人那种假期结束的遗憾和回味,而是字节和百度相继泡池子挂掉的绝望消息,惊诧之余马上感受到的是恐惧,恐惧自己秋招就这样与大厂失之交臂。于是马上火速重新投简历,包括但不限于之前挂过的大厂和一些中厂。令我没有想到的是,腾讯、美团、小红书再也没有任何约面,京东在两个月以后复活以后再次一面挂掉。唯一令我抱有希望却又一次次令我绝望的是字节,因为前面面试表现还不错,重新投递以后马上被约了面试,顺利通过前两轮拷打,第三轮面试遇到难以理喻的主管,全程问ai相关知识,我讲工程他说我不懂底层原理,我讲原理他说你一个搞开发的给我说这些干什么。全程否定,令人汗颜,最后不出意料的挂了。至此已经有些心灰意冷,没想到的是马上又被捞起来约面试,这一次一面问了八十分钟基础知识,很是全面,于是二面发生了完全令我没想到的情况,面试官在让我做了一道我做过的最难的lc题以后,直接开始与我讨论数学问题,是一个排列组合问题,现场推导递推公式。真的,当时那种耻辱、愤怒和无奈交织的心情我永远不会忘记,它是我一辈子的阴影,即使未来某一天拿到offer我都永远记得秋招的残酷和恶心。前面讲了这么多我所经历的事情,想在这里谈谈我的想法和心情。每一个等待的日子,枯燥、焦躁而且没有尽头,像一只鹿在无尽的密林里奔走。直到鹿跑断了腿,人绷断了神经,这煎熬才被动地结束。然而,即便跑出了密林,那守在尽头的也未必是好运。经历了这些事情,其实也让我意识到一些事情,人生不是贪心算法,不能试图在每个阶段追求最好的结果来实现完美的人生。以上是一个失意者的自白,与大家分享一些经历和看法,offer收割机大佬们请轻点嘲讽
不懂你的黑色幽默~:千里马常有而伯乐不常有。不要否定自己,加油!
投递美团等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-20 10:05
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务