关于PHP和Python对PDF的处理

无独有偶,最近和PDF结缘了,有两个客户虽然行业不同,但都需要对PDF进行处理。

一个客户需要将某电商渠道的订单用PDF的方式导入到ERP里面,其重点是将PDF内容转换为可识别的结构化数据;
一个客户需要将HIS生成的PDF手术文件在小程序展示患者,需要对已经存在的PDF文件进行加密处理,并支持在线浏览。

PDF订单这个,最开始我想着使用pdfparser这个PHP三方库,但是他只能按行读取,或按坐标读取,无法按表格读取,同一页多个表格的时候,处理起来就非常困难,并且他这个处理效率也比较低,可扩展性不高。

后面经过对比,决定使用Python的pdfplumber这个库,其优点就是即可以按行读取,也可以按表格读取,同一页多个表格的时候,它提取的数据可以是不同结构的列表(List),并且在处理多页的时候也很方便。

import pdfplumber
import json  

# 打开PDF文件  
with pdfplumber.open("./test.pdf") as pdf:  
    # 获取PDF文件的页数  
    page_count = len(pdf.pages)  
    # 遍历每一页  
    for page_num in range(page_count):  
        # 获取当前页  
        _table = pdf.pages[page_num].extract_tables() 

        print(_table)

按行读取的话,可以使用extract_text() 方法。
使用Python这个库的话,安装也比较简单。

wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.t
./configure --prefix=/usr/local/python3
make && make install
export PATH=/usr/local/python3/bin:$PATH
python3 -V
ln -s /usr/local/python3/bin/python3 /usr/sbin/py

pip3 install pdfplumber

PDF报告这个,尝试了tcpdffpdi这两个PHP三方库,fpdi基于tcpdf的,这两个都是生成PDF并添加密码,无法对已经存在的PDF进行加密处理,并且还依赖一些扩展。

后面经过对比,决定使用Python的spire.pdf这个库,其优化点就很明显了,就是简单,安装和使用非常简单。

from spire.pdf.common import *
from spire.pdf import *
  
# 加载PDF文件
pdf = PdfDocument()
pdf.LoadFromFile("待加密PDF文档.pdf")
  
# 用指定密码加密 PDF 文件, 并设置操作权限和密钥大小
pdf.Security.Encrypt("123", "abc", PdfPermissionsFlags.Print, PdfEncryptionKeySize.Key128Bit)
  
# 保存加密的PDF文件
pdf.SaveToFile("已加密PDF文档.pdf", FileFormat.PDF)

# 密码是123

安装就更简单了,直接pip install Spire.PDF就可以了,如图:
在这里插入图片描述
这里重点要注意的是python的版本,一般服务器自带的python版本是2.4或2.7,而这两个库可能要求3.几以上的版本。

当然,使用Python处理PDF,并不代表PHP处理不好,而是在使用成本上Python更合适。而且PHP业务代码里面要使用Python处理PDF,要么需要使用函数exec, 要么需要用Ptyhon起一个WEB服务,像使用fastapi这种WEB框架,使用起来也很简单,但是部署和维护成本就增加了。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值