转自知乎@Jackpop:https://zhuanlan.zhihu.com/p/153468702知乎搜索“开源 PDF 嵌入字体 Python”的结果

PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档...很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。

PDF是以PostScript语言图像模型为基础的一种文档格式,它在格式的稳定性方面虽然具有很大优势。但是,在可编辑性方面却为使用者引入了另外一个困扰。

例如,在文档的分割、合并、剪切、转换、编辑等方面PDF就有些捉襟见肘了。

Adobe Reader、福昕阅读器、熊猫PDF...经常用到的PDF工具只能用于文档阅读,但是免费版都不可以用于文档编辑。虽然,网页版PDF工具,例如SmallPDF、I love PDF可以用于PDF的编辑,但是对于文档大小也有限制。

曾经,为了替换PDF中的一页,我几乎试遍了所有市面上主流的PDF工具,最终还是不得不选择使用付费工具来解决问题。

事后想了想,既然这些商业化软件不靠谱,为什么不考虑自己动手开发一款工具呢?明明几十行代码能够解决的问题,为什么要费那么多劲去下载、安装那些没有节操的软件呢?

本文就来介绍一下利用Python轻松开发一款PDF编辑工具,可以用于PDF转TxT、分割、合并、剪切、转换。

PyPDF2

PyPDF2是一个第三方的python PDF库,它能够对PDF文件进行分割、合并、裁剪和转换页面。

另外,它还可以对PDF文件添加自定义数据、水印、密码,也可以从PDF文件中检索出文本和元数据。

安装

使用pip直接安装:

$ pip install PyPDF2

下面就来演示几项PDF编辑功能,并且会逐行解释代码的含义。

删除PDF页

先给出实现代码,

from PyPDF2 import PdfFileWriter, PdfFileReader output = PdfFileWriter()     // 1 input1 = PdfFileReader(open("example.pdf", "rb")) // 2 def delete_pdf(index): pages = input1.getNumPages() // 3 for i in range(pages):  if i+1 in index:   continue  output.addPage(input1.getPage(i))  // 4 outputStream = open("PyPDF2-output.pdf", "wb") output.write(outputStream)  // 5 delete_pdf([2,3,4])

下面来解释一下代码中的几个关键点:声明一个用于输出PDF的实例;

读取本地PDF文件;

获取PDF文档的页数;

读取PDF的第i页,添加到输出output实例中;

把编辑后的文档保存到本地;

合并PDF

已经实现了删除PDF页,接下来就看一下如何把另外一个PDF中的页面合并到当前PDF中。

方法1:

可以沿着前面删除PDF页的方式进行拓展一下,对PDF进行合并。

from PyPDF2 import PdfFileWriter, PdfFileReader output = PdfFileWriter() input1 = PdfFileReader(open("example.pdf", "rb")) input2 = PdfFileReader(open("simple2.pdf", "rb")) // 1 def merge_pdf(add_index, origin_index): pages = input1.getNumPages() k = 0 for i in range(pages):  if i+1 in add_index:   output.addPage(input2.getPage(origin_index[k])) // 2   pages += 1   k += 1  output.addPage(input1.getPage(i)) outputStream = open("PyPDF2-output.pdf", "wb") output.write(outputStream) merge_pdf([2,3,4], [0, 0, 0])读取需要合并的源文件;

遍历到指定页,合并源PDF的页面;

方法2:

除了方法1,还有另外一种方法可以合并PDF:

from PyPDF2 import PdfFileMerger // 1 merger = PdfFileMerger() input1 = open("document1.pdf", "rb") // 2 input2 = open("document2.pdf", "rb") input3 = open("document3.pdf", "rb") merger.append(fileobj = input1, pages = (0,3)) // 3 merger.merge(position = 2, fileobj = input2, pages = (0,1)) // 4 merger.append(input3) // 5 output = open("document-output.pdf", "wb") merger.write(output)导入PyPDF2合并模块PdfFileMerger;

读取需要处理和合并的PDF文档;

从第一个PDF文档中取出需要合并的前3页;

把第二个PDF文档的第一页插入到文档中;

把第三个PDF文档附到输出文档末尾;

除了上述介绍的2项主要功能,PyPDF2也有一些其他小功能:

旋转

input1.getPage(1).rotateClockwise(90)

使得页面1旋转90度。

添加水印

page = input1.getPage(3) watermark = PdfFileReader(open("watermark.pdf", "rb")) page.mergePage(watermark.getPage(0))

其中,水印存储在另外一个PDF文档watermark.pdf中。

加密

password = "secret" output.encrypt(password)

首先给一个secret密码,然后使用encrypt对输出文档进行加密。

pdfminer

前面介绍的PyPDF2主要擅长于PDF页面级编辑,而对于文本和源数据级别编辑能力较弱。

所以,这里就来介绍另外一款Python库来弥补它的不足。

PDFMiner是一个PDF文档的文本提取工具,它具有如下特性:能够准确获取文本的位置和布局信息;

可以将PDF转换为HTML/XML等格式;

可以提取目录;

可以提取标签内容;

支持各种字体类型(Type1、TrueTpe、Type3和CID);

支持中、日、韩语言和垂直书写文本;

安装

$ pip install pdfminer

PDF转TxT

pdfminer在GitHub的托管项目中,在目录tools下给出了一些实用的工具集,例如,PDF转HTML、PDF转HTML、PDF转TXT。我们可以直接通过使用下面命令提出PDF文档中的文本信息。

$ pdf2txt.py samples/simple1.pdf

总结

通过上述2款Python库,就可以实现从页面到文本元数据的编辑,本文只是简单的介绍了每项的基本用法。关于详细的用法和函数列表,可以阅读官方文档,或者阅读GitHub上项目源码进行了解。此外,可以在这些基本的用法基础上进行发散思维,发掘更多有价值的应用场景,例如,提出文本数据之后调用翻译API进行文献翻译。也可以,对软件进行封装,开发成一款通用的PDF编辑工具。干货

最近,为了方便大家,我花费了半个月的时间把这几年来收集的各种实用工具整合到一起,其中涉及影音娱乐、效率办公、系统清理、编程开发等上百款强大工具,其中涵盖Windows、Mac、Andriod、Chrome,我把各种软件的安全下载链接整理到一个文档中供大家使用,减少麻烦、避免踩坑,目录如下:

所有干货送给大家,希望能够点赞支持一下!

https://pan.baidu.com/s/1StnTCgCgOful535PMU_ioQ (提取码:0000)

python编辑器中文版_20行Python代码实现一款永久免费PDF编辑工具相关推荐

  1. python pdf编辑开发_20行Python代码实现一款永久免费PDF编辑工具的实现

    PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程 ...

  2. 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具

    (扫码关注) PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以格式稳定的优势,使得我们在打印. ...

  3. html旋转代码_付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具

    PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程 ...

  4. antd的table遍历之后添加合计行_付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具...

    专注Python.AI.大数据 @七步编程 ​PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以 ...

  5. python 作物识别_20行Python代码开发植物识别 app

    这篇文章介绍如何用Python快速实现一个植物识别的app,家里养了几盆多肉还叫不上名字,正好拿来识别一下.实现这样一个app只需要20行左右的代码,先来看下效果: 另外,我也开发了微信小程序版本,大 ...

  6. python微信头像_20行Python代码给微信头像戴帽子

    朋友圈里@微信官方要求戴圣诞帽的活动曾经火爆一时,有些会玩的小伙伴都悄咪咪地用美图秀秀一类的 app 给自己头像 p 一顶,然后可高兴地表示"哎呀好神奇hhhh",呆萌的小伙伴当然 ...

  7. Wondershare PDFelement for Mac v8.6.1 中文版 – 强大的PDF编辑工具

    PDFelement Pro是一款Mac平台的全功能PDF编辑及转换工具,无论是PDF的格式转换还是PDF文件的编辑处理工作,都能轻松胜任,还具备OCR光学文字识别功能,PDF转换功能包括将PDF文件 ...

  8. python必背100代码-100行Python代码实现一款高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为 Textshot 的截图工具,刚开源不到半个月已经500+Star. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本 ...

  9. 100行Python代码实现一款高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为 Textshot 的截图工具,刚开源不到半个月已经500+Star. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本 ...

最新文章

  1. hessiancpp编译和使用(C++版)
  2. Linux环境HBase安装配置及使用
  3. C++中explicit关键字的使用
  4. luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论
  5. 阿里云服务器重启后无法访问的解决
  6. C语言for循环的嵌套例题,c语言 for循环的嵌套(含答案)
  7. Linux 进程概念
  8. iOS : 静态库(.framework)合并
  9. 确认!聚划算百亿补贴要向iPad 8等新品下手,这次是真的刚刚好
  10. 未来计算机技术的发展趋势有哪些,未来计算机发展的5种趋势
  11. ORA-28002 the password will expire
  12. python运维系统开发_老男孩Python运维系统开发教程
  13. python如何安装pdfminer_Python3.8安装pdfminer
  14. 原生js用ajax上传图片,关于js ajax上传图片
  15. linux一键安装aria2,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
  16. tan和cot的梗_“sin对cos说 我们今晚是tan呢?还是cot呢?”啥意思
  17. 计算机毕业设计Java车辆调度管理系统(源码+系统+mysql数据库+lw文档
  18. [转]一个商业计划书模板
  19. 计算机科学与技术反思录
  20. 中规中矩的linux安装jdk 1.8

热门文章

  1. socket编程TCP程序
  2. 将GBK格式的文件转为UTF-8格式,避免中文乱码
  3. 基于小波图像去噪的MATLAB实现
  4. EasyRecovery16最新免费版电脑数据恢复软件功能介绍
  5. MATLAB—医学DICOM图像处理
  6. Arctime for mac 影视字幕制作软件 V1.2 Final 版下载
  7. 使用Blinker控制esp01s Relay继电器模块
  8. 商业银行基础知识 银行测试工程师必会的业务知识
  9. C语言实现欧拉角转方向余弦矩阵
  10. Xgboost及Logistic regression预测的R实现