当前位置: 首页 > 科技观察

用Python实现一个永久免费的PDF编辑工具

时间:2023-03-21 11:10:26 科技观察

前言:PDF(PortableDocumentFormat),中文名PortableDocumentFormat是我们经常接触到的一种文件格式,文档,文档...很多都是PDFFormat.格式稳定的优势,使我们在打印、分享、传输的过程中,能够最佳地保持原有的色彩和格式。一个永久免费的PDF编辑工具》>但是它在可编辑性上给用户带来了另一个问题,有一次为了替换PDF中的一个页面,几乎尝试了市面上所有主流的PDF工具,还是不行't不要选择付费工具来解决问题,后来想了想,既然这些商业软件都不靠谱,为什么不考虑自己开发一个工具呢?为什么一个可以解决的问题还要花那么大的力气?几十行代码?下载安装那些无良软件如何?本文介绍使用Python轻松开发一个PDF编辑工具,可用于PDF转TxT、分割、合并、剪切、转换。请介绍主角PyPDF2和pdfminer3kPyPDF2:纯Python构建的PDF工具包。它可以:提取文档信息(标题、作者等)按页拆分文档按页合并文档裁剪页面将多个页面合并为一个页面加密和解密PDF文件OperationfromPyPDF2importPdfFileReader,PdfFileWriterinfn='infn.pdf'outfn='outfn.pdf'#获取一个PdfFileReader对象pdf_input=PdfFileReader(open(infn,'rb'))#获取PDF信息的基本信息=pdf_input.getDocumentInfo()print(information)#获取PDF的页数page_count=pdf_input.getNumPages()print(page_count)#返回一个PageObjectpage=pdf_input.getPage(i)#得到一个PdfFileWriter对象pdf_output=PdfFileWriter()#给PdfFileWriter添加一个PageObjectpdf_output.addPage(page)#outputtothefilepdf_output.write(open(outfn,'wb'))deletePDFpagefromPyPDF2importPdfFileWriter,PdfFileReader#instantiateanoutputPDFinstanceoutput=PdfFileWriter()#readaPDFfileinput1=PdfFileReader(打开("example.pdf","rb"))#要删除的操作defdelete_pdf(index):pages=input1.getNumPages()#循环删除foriinrange(pages):ifi+1inindex:continueoutput.addPage(input1.getPage(i))outputStream=open("PyPDF2-output.pdf","wb")output.write(outputStream)delete_pdf([2,3,4])合并PDFfromPyPDF2importPdfFileWriter,PdfFileReaderoutput=PdfFileWriter()input1=PdfFileReader(open("example.pdf","rb"))input2=PdfFileReader(open("simple2.pdf","rb"))//1defmerge_pdf(add_index,origin_index):pages=input1.getNumPages()k=0foriinrange(pages):ifi+1inadd_index:output.addPage(input2.getPage(origin_index[k]))//2pages+=1k+=1output.addPage(input1.getPage(i))outputStream=open("PyPDF2-output.pdf","wb")output.write(outputStream)merge_pdf([2,3,4],[0,0,0])旋转#旋转90度input1.getPage(1).rotateClockwise(90)添加水印page=input1.getPage(3)watermark=PdfFileReader(open("watermark.pdf","rb"))page.mergePage(watermark.getPage(0))加密password="secret"output.encrypt(password)解密print(output.decrypt('secret'))#secret==密码正确显示1,其他显示0page_obj=output.getPage(0)#This是如何正确读取print(page_obj.extractText())pdfminer3k简介pdfminer3k是pdfminer的Python3端口PDFMiner是一个从PDF文档中提取信息的工具。与其他PDF相关工具不同,它完全专注于获取和分析文本数据。PDFMiner允许获取页面中文本的确切位置,以及其他信息,如字体或线条。它包括一个PDF转换器,可以将PDF文件转换为其他文本格式,例如HTML。它具有可扩展的PDF解析器,可用于文本分析以外的其他目的,以准确获取文本位置和布局信息;可以将PDF转成HTML/XML等格式;可以提取目录;可以提取标签内容;支持多种字体类型(Type1、TrueType、Type3和CID);支持中文、日文、韩文和竖写文字;安装pipinstallpdfminer3k文件的操作fromurllib.requestimporturlopenfrompdfminer.converterimportPDFPageAggregatorfrompdfminer.layoutimportLAParamsfrompdfminer.pdfinterpimportPDFResourceManager,PDFPageInterpreterfromPDFprocuring.pdfparserimportDoculogment=Falselogging.getLogger().setLevel(logging.ERROR)fp=open.rb#online'pdf#fp=urlopen('http://---/---.pdf')#创建与文档关联的解析器parser=PDFParser(fp)#PDF文档对象doc=PDFDocument()#创建pdf文档对象,存储文档结构document=PDFDocument(parser,password)#链接解析器和文档对象parser.set_document(doc)doc.set_parser(parser)#初始化文档doc.initialize("")#创建DPF资源管理器resource=PDFResourceManager()#参数分析器laparam=LAParams()#aggregatordevice=PDFPageAggregator(resource,laparams=laparam)#Createapageparserinterpreter=PDFPageInterpreter(resource,device)#使用文档对象从pdf中读取内容forpageindoc.get_pages():#使用页面解析器interpreter.process_page(page)#使用聚合器获取内容layout=device.get_result()fortext_objinlayout:#判断有没有aget_textattributeifhasattr(text_obj,'get_text'):print(text_obj.get_text())#ProcesseachpagecontainedinthedocumentforpageinPDFPage.create_pages(document):interpreter.process_page(page)layout=device.get_result()forxinlayout:#获取文本对象ifisinstance(x,LTTextBox):print(x.get_text().strip())#获取图像对象ifisinstance(x,LTImage):print('Getapicturehere')#获取图形对象ifisinstance(x,LTFigure):print('Afigureobjectisgettinghere')详细操作参考官网:https://github.com/canserhat77/pdfminer3k页面转文本元数据编辑,本文简单介绍一下各个item的基本用法。详细的使用方法和功能列表可以阅读官方文档,或者阅读GitHub上的项目源码了解更多。