news 2026/4/15 21:45:55

PDF图片处理:从提取到精确定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PDF图片处理:从提取到精确定位

在处理PDF文档时,经常会遇到需要提取文档中的图片并重新定位的情况。本文将介绍如何使用Python库borb来实现这一功能,具体包括如何提取图片及其坐标,并将图片精确地插入到新的位置。

提取图片及坐标

步骤一:设置图片提取器

首先,我们需要定义一个ImageExtraction类,用于捕获PDF中的图片。这个类继承自EventListener

fromborb.pdf.documentimportDocumentfromborb.pdf.page.pageimportPagefromborb.pdf.canvas.event.event_listenerimportEventListenerfromborb.pdf.canvas.event.image_render_eventimportImageRenderEventfromtypingimportList,Dict,AnyfromPILimportImageasPILImagefromdecimalimportDecimalclassImageExtraction(EventListener):def__init__(self):self.images:Dict[int,List[Any]]={}def_event_occurred(self,event:ImageRenderEvent)->None:ifevent.get_page()notinself.images:self.images[event.get_page()]=[]self.images[event.get_page()].append({'image':event.get_image(),'x':event.get_x(),'y':event.get_y(),'width':event.get_width(),'height':event.get_height()})

步骤二:加载PDF文档

使用以下代码加载PDF文档并应用ImageExtraction

withopen("test_image.pdf","rb")asin_file_handle:doc=Document()doc.load(in_file_handle,[ImageExtraction()])assertdocisnotNone

步骤三:获取图片信息

I=ImageExtraction()print(I.images)

这将输出一个字典,其中包含每个页面上的图片信息,如下所示:

{0:[{'image':<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=660x660 at0x1A03AC5FEE0>,'x':Decimal('100'),'y':Decimal('200'),'width':Decimal('660'),'height':Decimal('660')}]}

插入图片到新的位置

步骤一:选择页面布局

borb提供了几种页面布局方式,但要实现精确的图片定位,我们可以选择PageLayoutAbsoluteLayout,它允许我们在页面上任意位置添加内容:

fromborb.pdf.canvas.layout.page_layout.absolute_layoutimportAbsoluteLayout layout=AbsoluteLayout(page)

步骤二:插入图片

使用提取到的图片信息,我们可以精确地将图片放置在新的位置:

forpage_num,imagesinI.images.items():forimage_datainimages:pil_image=image_data['image']new_x,new_y=Decimal('300'),Decimal('400')# 新的位置坐标layout.add(Image(pil_image,x=new_x,y=new_y,width=image_data['width'],height=image_data['height']))

这样,我们不仅提取了PDF文档中的图片,还获取了它们的原始坐标,并将它们精确地插入到新的位置。

结论

通过使用borb库的EventListenerAbsoluteLayout,我们可以实现从PDF文档中提取图片及其坐标,并将其重新定位到任何我们想要的位置。这种方法不仅提高了PDF文档处理的灵活性,还为文档的再利用和重新设计提供了有力的工具。希望本文对你有所帮助,尝试在自己的项目中使用这些技术吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 8:34:37

如何使用Sunshine打造完整实用的游戏串流系统

如何使用Sunshine打造完整实用的游戏串流系统 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器&#xff0c;支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一…

作者头像 李华
网站建设 2026/4/15 14:29:53

FSMN VAD置信度输出解读:confidence字段应用实例

FSMN VAD置信度输出解读&#xff1a;confidence字段应用实例 1. 什么是FSMN VAD与confidence字段 FSMN VAD是阿里达摩院FunASR项目中开源的语音活动检测&#xff08;Voice Activity Detection&#xff09;模型&#xff0c;专为中文语音场景优化设计。它能精准识别音频中“哪里…

作者头像 李华
网站建设 2026/4/10 21:19:52

超简单!YOLO11镜像让AI检测变得平民化

超简单&#xff01;YOLO11镜像让AI检测变得平民化 你是不是也经历过——想试试目标检测&#xff0c;结果卡在环境配置上&#xff1a;CUDA版本不对、PyTorch装不上、ultralytics依赖冲突、训练脚本报错“ModuleNotFoundError”……折腾三天&#xff0c;连一张图都没跑通&#x…

作者头像 李华
网站建设 2026/4/11 1:56:37

升级YOLOv10后:推理速度提升,边缘部署更高效

升级YOLOv10后&#xff1a;推理速度提升&#xff0c;边缘部署更高效 在工业视觉落地现场&#xff0c;我见过太多团队卡在同一个环节&#xff1a;模型跑不起来。不是算法不行&#xff0c;不是硬件不够&#xff0c;而是——等权重下载完&#xff0c;天都黑了。更尴尬的是&#x…

作者头像 李华