当前位置: 首页 > news >正文

京鑫建设集团网站绵阳网页制作

京鑫建设集团网站,绵阳网页制作,北京市住房建设网站,360建站平台Python 操作PDF文档 1、PDF #xff08;便携式文件格式#xff0c;Portable Document Format#xff09;是由Adobe Systems在1993年用于文件交换所发展出的文件格式。 PDF主要由三项技术组成#xff1a;衍生自PostScript#xff1b;字型嵌入系统#xff1b;资料压缩及传…Python 操作PDF文档 1、PDF 便携式文件格式Portable Document Format是由Adobe Systems在1993年用于文件交换所发展出的文件格式。 PDF主要由三项技术组成衍生自PostScript字型嵌入系统资料压缩及传输系统。它的优点在于跨平台、能保留文件原有格式Layout、开放标准能免版税Royalty-free自由开发PDF相容软体是一个开放标准2007年12月成为ISO 32000国际标准。 PDF格式的主要优点 跨平台性PDF文件格式与操作系统平台无关文件不管是在 WindowsUnix还是在苹果公司的 Mac OS 操作系统中都是通用的。 易于阅读不同平台、不同阅读软件打开不会出错或变形以及转换成PDF后可以避免其他软件产生的不兼容和字体替换问题使得文档的灵活性提高。 不易编辑PDF是板式文档可防止他人无意中触到键盘修改文件内容。 体积小巧PDF文件使用了工业标准的压缩算法通常比 PostScript 文件小易于传输与储存。 信息丰富PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息。 1.1. Python处理PDF常用类库 注意 2023年都已经回归到 pypdf 了。 在 Debian 12中通过下面命令安装 sudo apt install -y python3-pypdf 大多数组织以PDF形式发布其数据。随着AI的发展我们需要更多数据来进行预测和分类。 PDF处理有些困难但是我们可以利用下面的API来简化它。 本文将简要介绍如何使用Python处理PDF。Python处理PDF的第三库也有很多主要有 PDFMiner Python中用于PDF处理的库。容易安装也容易使用。PDFMiner为非程序员提供命令实用程序为程序员提供API接口。 PyPDF 这个Python PDF库是可扩展的。可以从pdf中提取文本裁剪然后将PDF文档与加密和解密功能合并。PyPDF有很多版本。在PyPDF4之前PyPDF2更加流行。目前都已经合并到 pypdf . pdfrw 与上面两个提及非常相似。除了这种相似性之外pdfrw还具有自己的USP唯一卖点。pdfrw一个替代的PDF操作包。Patrick Maupin创建了一个名为pdfrw的软件包它可以完成许多与PyPDF2相同的工作。除了加密的特殊情况外本文后面提到PyPDF2的所有操作pdfrw均可以实现。pdfrw的最大区别在于它与ReportLab软件包集成因此你可以使用一些或所有预先存在的PDF构建一个新的PDF。 Slate 它是PDFMiner的包装实现。 reportlab Reportlab的特长在于创建PDF文件尤其是程序动态生成PDF文件的功能十分强大但是遗憾的是开源版本没有提供读取PDF文件的相关功能。 pyMuPDF MuPDF可以访问PDFXPSOpenXPSCBZEPUB和FB2电子书格式的文件并且以其最佳性能和高渲染质量而著称。 tabula-py tabula 是专门用来提取PDF表格数据的同时支持PDF导出为CSV、Excel格式但是这工具是用 java 写的依赖 java7/8。tabula-py 就是对它做了一层 python 的封装 pdfplumber pdfplumber 是按页来处理 pdf 的可以获得页面的所有文字并且提供的单独的方法用于提取表格。 1.2. PyPDF pyPdfPyPDF2和PyPDF4的历史 最初的pyPdf软件包于2005年发布。pyPdf的最后一个正式版本是在2010年。 大约一年后一家名为Phasit的公司赞助了一个名为PyPDF2的pyPdf分支。 该代码编写为向后与原始代码兼容并且用了好多年效果一直很好其最后一个版本是在2016年。 有一个名为PyPDF3的软件包简短系列版本然后该项目被重命名为PyPDF4。 所有这些项目都完全相同但pyPdf和PyPDF2 之间的最大区别在于后者版本增加了Python 3支持。 Python 3的原始pyPdf有一个不同的Python 3分支但是这个分支已经多年没有维护了。 最新版本的PyPDF4支持PyPDF2的大多数功能但也有部分功能不兼容。 pypdf4主要功能 PyPDF4是一个纯Python PDF库能够拆分合并裁剪和转换PDF文件的页面。它还可以将自定义数据查看选项和密码添加到PDF文件。它可以从PDF检索文本和元数据以及将整个文件合并在一起。 提取文档信息标题作者等 逐页拆分文档 逐页合并文档 裁剪页面 将多个页面合并为一个页面 加密和解密PDF文件 2. 读取PDF 接下来使用PyPDF4对PDF文件进行读取需要注意的是他对英文的支持比较好如果读取中文就会出现乱码等问题在后面我们会介绍几个支持读取中文的库。 2.1. 查看PDF信息 可以在自己的电脑上随便找一个PDF文件进行尝试操作。 from pypdf import PdfReader with open(‘minimal.pdf’,‘rb’) as f: pdfPdfReader(f) informationpdf.metadata number_of_pageslen(pdf.pages) txtf““Author: {information.author} Creator: {information.creator} Producer: {information.producer} Subject: {information.subject} Title: {information.title} Number of pages: {number_of_pages}”” print(txt) Author: None Creator: cairo 1.11.2 (http://cairographics.org) Producer: cairo 1.11.2 (http://cairographics.org) Subject: None Title: None Number of pages: 1 PdfFileReader是一个具有多种与PDF文件交互的方法的类。 在此示例中调用了 .getDocumentInfo() 它将返回DocumentInformation的实例,包含了我们感兴趣的大部分信息。 我们还可以在reader对象上调用 .getNumPages() 让它返回文档中的页数。 information这个变量具有多个实例属性可以使用这些属性从文档中获取所需的其余元数据。我们可以打印出该信息并将其返回以备将来使用。 2.2. 读取文本 我们先打开PDF文件再查看他的页数。 pdffile open(‘postgis-essential-0423.pdf’,‘rb’) pdfreader PdfReader(pdffile) print(len(pdfreader.pages)) 202 我们查看第二页的信息。 page pdfreader.pages[0] print(page.extract_text().strip()) 第 1章地理空间数据库的发展、技术与标准 回答地理空间问题有很多工具或桌面应用系统。这种方法虽然功能完备但不能同时回 答许多问题。此外这种方法通常无法在一个数据集中有效地管理和操作大量的空间数据集 也无法使任务自动化。 一旦需要可伸缩性、对大型数据集的支持以及直接输入机制大多数用户就会使用空间数 据库进行探索。有几个可用的空间数据库软件一些是专有的另一些是开源的。 PostGIS 是 一个开源的空间数据库软件可能是所有空间数据库软件中最容易访问的。 PostGIS 作为扩展运行为 PostgreSQL 数据库提供空间功能。在这种能力下 PostGIS 允许将空间数据与常规关系型数据一起包含进来。通过构建 PostGIS 提供的核心功能和 PostgreSQL 固有的可扩展性可以实现新的或增强的功能。 在数据库存储方面数据库是高级形式而 PostGIS 赋予其更多的功能。 1.1平面文件、空间数据引擎到空间数据库 在传统的第一代 地理信息系统 GIS实现中所有的 空间数据 都存储在 平面文件 flat files中需要专门的 GIS软件来解释和操作这些数据。这些第一代管理系统旨在满足用 户的需求其中所有所需的数据都在用户的组织领域中。它们是专为处理 空间数据 而构建的专 有的、独立的系统应用程序和平面文件之间的耦合性非常高平面文件里的空间数据没有数 据独立性。 为了提高数据库管理系统 DBMS对空间数据的管理能力 ,国内外较为流行的主要集中在 “关系型数据库 空间数据引擎” 、 “扩展对象关系型数据库”两方面。 “关系型数据库空间数据引擎” 技术方案访问迅速与 GIS联系紧密在应用中占有一 定优势。问题是引擎与数据库内核独立难以利用数据库系统中已有的成熟的管理、访问技术 在进一步发展上有致命弱点。 “扩展对象空间数据库系统” 技术方案从理论上来看是最适用于空间数据的表达和管理 的。 3 idx_arr [0] for idx, page in enumerate(pdfreader.pages): cnts page.extract_text().strip().splitlines() # print(idx, cnts[0]) if ‘第’ in cnts[0] and ‘章’ in cnts[0]: print(idx) print(cnts[0]) if idx ! 0: idx_arr.append(idx) idx_arr.append(len(pdfreader.pages)) print(idx_arr) 0 第 1章地理空间数据库的发展、技术与标准 12 第 2章创建您的第一个空间数据库 22 第 3章 PostGIS 的数据读写与转换 36 第 4章 PostGIS 中的几何图形文本表达的输入与输出 50 第 5章几何图形的简单性与有效性 64 第 6章合成和分解几何图形 78 第 7章空间数据坐标系统与投影 84 第 8章空间度量与测度 88 第 9章使用 Geography 96 第 10章一元几何图形操作 102 第 11章空间关系 114 第 12章矢量数据空间操作二元算子 128 第 13章空间索引 148 第 14章栅格数据读写导入与导出 158 第 15章使用栅格数据 168 第 16章管理栅格数据 180 第 17章高级话题 190 第 18章运维 [0, 12, 22, 36, 50, 64, 78, 84, 88, 96, 102, 114, 128, 148, 158, 168, 180, 190, 202] from pypdf import PdfWriter pdf_idx 1 from pathlib import Path outws Path(‘xx_post’) if outws.exists(): pass else: outws.mkdir() for qq, hh in zip(idx_arr[:-1], idx_arr[1:]): outfile outws / f’xx_{pdf_idx:02}.pdf’ print(outfile) merger PdfWriter()# add the first 3 pages of input1 document to output merger.append(fileobjpdfreader, pages(qq, hh))# insert the first page of input2 into the output beginning after the second page # merger.merge(position2, fileobjinput2, pages(0, 1))# append entire input3 document to the end of the output document # merger.append(input3)# Write to an output PDF document output open(outfile, wb) merger.write(output)# Close File Descriptors merger.close() output.close() pdf_idx pdf_idx 1xx_post/xx_01.pdf xx_post/xx_02.pdf xx_post/xx_03.pdf xx_post/xx_04.pdf xx_post/xx_05.pdf xx_post/xx_06.pdf xx_post/xx_07.pdf xx_post/xx_08.pdf xx_post/xx_09.pdf xx_post/xx_10.pdf xx_post/xx_11.pdf xx_post/xx_12.pdf xx_post/xx_13.pdf xx_post/xx_14.pdf xx_post/xx_15.pdf xx_post/xx_16.pdf xx_post/xx_17.pdf xx_post/xx_18.pdf 4.2.3. 读取图片 PDF有扫描的图片或者插入图片在内首先验证文档是否加密。 pdffile open(‘servers.pdf’,‘rb’) pdfreader.is_encrypted False 输出为False即为没有加密过。 pg pdfreader.pages[0] pg.keys() dict_keys([‘/Resources’, ‘/Contents’, ‘/Parent’, ‘/Type’, ‘/MediaBox’]) 图片存储在 [‘/Resources’][‘/XObject’] 里通过type查看发现 pg[‘/Resources’][‘/XObject’][‘/Im1’] 是一个EncodedStreamObject,通过 getData() 方法可以获取它的数据直接以二进制模式写入文件即可保存。再使用前面使用的pillow库查看 pg.values() dict_values([IndirectObject(322, 0, 140697627366992), [IndirectObject(321, 0, 140697627366992)], IndirectObject(1646, 0, 140697627366992), ‘/Page’, [0, 0, 595.27999999999997, 841.88999999999999]]) pg[‘/Resources’][‘/XObject’] KeyError Traceback (most recent call last) Cell In [9], line 1 ---- 1 pg[‘/Resources’][‘/XObject’] File /usr/lib/python3/dist-packages/pypdf/generic/_data_structures.py:269, in DictionaryObject.getitem(self, key) 268 def getitem(self, key: Any) - PdfObject: – 269 return dict.getitem(self, key).get_object() KeyError: ‘/XObject’ pg[‘/Resources’][‘/XObject’][‘/FXX1’] im8 pg[‘/Resources’][‘/XObject’][‘/FXX1’].get_data() with open(‘im.png’, ‘wb’) as f: f.write(im8) from matplotlib import pyplot as plt from PIL import Image imgImage.open(‘./im.png’) plt.imshow(img) plt.show() KeyError Traceback (most recent call last) Cell In [11], line 1 ---- 1 im8 pg[‘/Resources’][‘/XObject’][‘/FXX1’].get_data() 2 with open(‘im.png’, ‘wb’) as f: 3 f.write(im8) File /usr/lib/python3/dist-packages/pypdf/generic/_data_structures.py:269, in DictionaryObject.getitem(self, key) 268 def getitem(self, key: Any) - PdfObject: – 269 return dict.getitem(self, key).get_object() KeyError: ‘/XObject’
http://www.w-s-a.com/news/595639/

相关文章:

  • 自适应网站做mip改造浏览器广告投放
  • 网站meta网页描述网站的推广费用
  • 偃师市住房和城乡建设局网站网站个人主页怎么做
  • 做网站要实名认证吗wordpress去掉仪表盘
  • 在哪做网站好Python建网站的步骤
  • 卢松松的网站办公室设计布局
  • 住房城乡建设干部学院网站织梦网站0day漏洞
  • 企业网站seo优帮云手机桌面布局设计软件
  • 无证做音频网站违法吗智能建站加盟电话
  • 鹿泉专业网站建设做网站为什么要建站点
  • 加强网站建设和维护工作新闻大全
  • 红鱼洞水库建设管理局网站左右左布局网站建设
  • 手机网站建设地址做网站公
  • 贵州建设厅网站首页网络公司除了做网站
  • 运动鞋建设网站前的市场分析wordpress 搜索框代码
  • app开发网站开发教程平台网站开发的税率
  • 百度网站优化排名加强服务保障满足群众急需i
  • 宁夏建设职业技术学院网站安徽网站优化建设
  • 四川关于工程建设网站硬盘做网站空间
  • 桂林网站制作培训学校外包seo公司
  • 莱州网站建设方案北京装修公司口碑
  • 大型网站建设济南兴田德润团队怎么样韩国女足出线了吗
  • 南通做网站找谁重庆网络推广网站推广
  • ps网站主页按钮怎么做怎样做网站的用户分析
  • 哪个网站做黑色星期五订酒店活动公司网络营销推广软件
  • 岳阳新网网站建设有限公司网页设计基础考试题目
  • 辽宁响应式网站费用海外平台有哪些
  • 杨凌规划建设局网站网站后台建设怎么进入
  • 有赞商城网站建设企业管理咨询是做什么的
  • 提供衡水网站建设中国石化工程建设有限公司邮政编码