RPA自动化中如何将机器人截图嵌入收据PDF?求可行方案
解决RPA流程中截图嵌入现有收据PDF的问题
你的测试代码核心问题是:直接新建空白PDF添加截图,而非在已有的收据PDF文件上嵌入截图。以下是几种可行的解决方案:
方案1:使用PyPDF2 + Pillow(推荐)
该组合支持读取已有PDF,并将截图精准叠加到指定页面:
from PyPDF2 import PdfReader, PdfWriter from PIL import Image import io def embed_screenshot_to_receipt(oN): receipt_pdf_path = f'output/{oN}.pdf' # 已有收据PDF路径 ss_file = f'output/{oN}.png' output_pdf_path = f'output/{oN}_with_ss.pdf' # 最终输出PDF路径 # 读取原收据PDF reader = PdfReader(receipt_pdf_path) writer = PdfWriter() # 将截图转为PDF格式的图片页 image = Image.open(ss_file) img_byte_stream = io.BytesIO() image.save(img_byte_stream, format='PDF') img_byte_stream.seek(0) img_pdf = PdfReader(img_byte_stream).pages[0] # 合并截图到原收据第一页(可修改索引指定其他页) target_page = reader.pages[0] target_page.merge_page(img_pdf) # 添加处理后的页面及剩余页面到输出 writer.add_page(target_page) for page in reader.pages[1:]: writer.add_page(page) # 保存结果 with open(output_pdf_path, 'wb') as out_file: writer.write(out_file)
方案2:使用ReportLab + PyPDF2
如果需要更精细控制截图的位置和尺寸,可通过ReportLab生成带截图的覆盖层,再合并到原PDF:
from PyPDF2 import PdfReader, PdfWriter from reportlab.pdfgen import canvas import io def embed_screenshot_to_receipt(oN): receipt_pdf_path = f'output/{oN}.pdf' ss_file = f'output/{oN}.png' output_pdf_path = f'output/{oN}_with_ss.pdf' # 创建带截图的临时PDF覆盖层 temp_stream = io.BytesIO() can = canvas.Canvas(temp_stream) # 设置截图位置(x=10, y=10)和宽度100,高度自动按比例适配 can.drawImage(ss_file, 10, 10, width=100) can.save() temp_stream.seek(0) # 读取覆盖层和原PDF overlay_pdf = PdfReader(temp_stream) receipt_pdf = PdfReader(receipt_pdf_path) writer = PdfWriter() # 合并覆盖层到原收据第一页 target_page = receipt_pdf.pages[0] target_page.merge_page(overlay_pdf.pages[0]) writer.add_page(target_page) # 添加剩余页面 for page in receipt_pdf.pages[1:]: writer.add_page(page) # 保存结果 with open(output_pdf_path, 'wb') as out_file: writer.write(out_file)
注意事项
- 提前依赖安装:
pip install pillow pypdf2 reportlab - 可根据收据布局调整截图的
x/y坐标、宽度/高度参数 - 若需嵌入到非第一页,修改代码中
reader.pages[0]的索引值即可
内容的提问来源于stack exchange,提问作者Data 1230
相关产品推荐
相关产品推荐

