如何使用borb提取PDF中图片及其坐标并粘贴至指定位置
一、提取PDF图片及坐标尺寸
borb的ImageExtraction工具不仅能提取图片对象,还会自动记录每张图片的边界框信息——也就是你需要的坐标和尺寸。别只盯着get_images(),搭配get_image_locations()就能拿到完整数据:
from borb.pdf import PDF, Document from borb.toolkit import ImageExtraction import typing # 初始化图片提取器 image_extractor = ImageExtraction() # 加载PDF文档 doc = None with open("test_image.pdf", "rb") as in_file: doc = PDF.loads(in_file, [image_extractor]) assert doc is not None # 获取每页的图片和对应位置数据 page_images = image_extractor.get_images() page_locations = image_extractor.get_image_locations() # 遍历每页处理图片信息 for page_num in page_images: imgs = page_images[page_num] locs = page_locations[page_num] for img, box in zip(imgs, locs): print(f"页码:{page_num}") print(f"图片:{img}") print(f"左上角坐标:({box.x}, {box.y})") print(f"宽高:{box.width} × {box.height}")
这里的box是BoundingBox对象,直接取x/y(以页面左下角为原点的左上角坐标)、width/height就能拿到你需要的精确参数。
二、指定坐标插入图片
不需要用SingleColumnLayout这类流式布局,要绝对定位直接绕开布局限制,用以下两种方法实现:
方法1:用Canvas绘制(自由度更高)
from borb.pdf import Document, Page, PDF from borb.pdf.canvas.canvas import Canvas from decimal import Decimal # 创建新文档和页面 doc = Document() page = Page() doc.add_page(page) # 取出之前提取的目标图片 target_img = page_images[0][0] # 绑定Canvas到目标页面 canvas = Canvas(page) # 直接指定坐标绘制图片(x、y为左上角坐标,单位为PDF点) canvas.draw_image( image=target_img, x=Decimal(100), y=Decimal(200), width=Decimal(237.72), height=Decimal(237.72) ) # 保存生成的PDF with open("output.pdf", "wb") as out_file: PDF.dumps(out_file, doc)
方法2:直接给Image设置位置参数
嫌Canvas麻烦的话,直接给Image对象添加x和y参数后,添加到页面即可:
from borb.pdf import Document, Page, PDF from borb.pdf.canvas.layout.image.image import Image from decimal import Decimal doc = Document() page = Page() doc.add_page(page) # 取出目标图片 target_img = page_images[0][0] # 创建Image时直接指定坐标和尺寸 img = Image( image=target_img, x=Decimal(100), y=Decimal(200), width=Decimal(237.72), height=Decimal(237.72) ) # 将图片添加到页面 page.add(img) # 保存文档 with open("output.pdf", "wb") as out_file: PDF.dumps(out_file, doc)
注意:PDF的坐标原点在页面左下角,y轴向上递增,设置坐标时可结合页面高度(默认A4页高为842点)调整位置。
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

