Python将当前活动的pdf文件保存到指定位置和转为图片

在工作中,有时候会遇到得到当前打开的PDF,我们不知道这个PDF的路径是什么,只知道它是当前打开的那个,如何做呢?

首先需要电脑上安装了Adobe Acrobat,然后还安装了win32com。通过win32com打开AcroExch.App,从而操作Adobe Acrobat。其中的具体API还需要参考Adobe官方文档 Acrobat DC SDK Documentation

import os    
import winerror
from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT

ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
my_dir = r"E:\\ffm\\my"
try:
    ApDoc = Dispatch("AcroExch.App")
    paDoc = ApDoc.GetActiveDoc()
    pdDoc = paDoc.GetPDDoc()
    jsObject = pdDoc.GetJSObject()
    abc = pdDoc.GetFileName()
    jsObject.SaveAs(os.path.join(my_dir, abc))
    jsObject.SaveAs(os.path.join(my_dir, abc[:-3]+'jpg'), "com.adobe.acrobat.jpeg")

except Exception as e:
    print(str(e))
    print("出错啦!")

finally:
    ApDoc.CloseAllDocs()
    ApDoc.Hide()
    jsObject = None
    pdDoc = None

这段代码首先用Dispatch(“AcroExch.App”)打开一个AcroExch.App,然后用GetActiveDoc()捕捉到当前活动的PDF,然后用paDoc.GetPDDoc()得到文件,用GetFileName()得到文件名称,用GetJSObject()得到文件的JS对象,把这个JS对象存到另一个地方,并且还把这个JS对象另存为图片。名称都用的PDF原来的名称。

如果是从磁盘上打开一个PDF文档,需要改动一下上面的try语句:

try:
    AvDoc = Dispatch("AcroExch.AVDoc")    
    if AvDoc.Open(src, ""):            
        pdDoc = AvDoc.GetPDDoc()
        jsObject = pdDoc.GetJSObject()
        jsObject.SaveAs(os.path.join(my_dir, abc[:-3]+'jpg'), "com.adobe.acrobat.jpeg")

最后关掉所有活动的PDF文档,隐藏窗口。清空用过的对象等等。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中,我们可以使用PyPDF2库来操作PDF文件,并使用reportlab库来创建并插入图片。 首先,我们需要安装这两个库。可以使用以下命令来安装: ``` pip install PyPDF2 pip install reportlab ``` 接下来,我们需要编写代码来实现将图片添加到PDF指定位置。下面是一个示例代码: ```python import PyPDF2 from reportlab.lib.pagesizes import A4 from reportlab.lib.units import inch from reportlab.pdfgen import canvas # 创建一个新的PDF文件 output = PyPDF2.PdfFileWriter() # 打开现有的PDF文件 with open('existing_file.pdf', 'rb') as pdf_file: pdf = PyPDF2.PdfFileReader(pdf_file) # 获取现有页面的大小 page = pdf.getPage(0) width, height = page.mediaBox.upperRight # 创建一个canvas对象用于绘制图片 c = canvas.Canvas('temp.pdf', pagesize=(width, height)) # 将图片绘制到canvas c.drawImage('image.png', x=100, y=100, width=200, height=200) # 将canvas内容添加到output c.showPage() c.save() # 将临时PDF合并到原始PDF中 with open('temp.pdf', 'rb') as temp_file: temp_pdf = PyPDF2.PdfFileReader(temp_file) output.addPage(temp_pdf.getPage(0)) for i in range(1, pdf.getNumPages()): output.addPage(pdf.getPage(i)) # 保存新的PDF文件 with open('output_file.pdf', 'wb') as output_file: output.write(output_file) ``` 以上代码的思路是: 1. 使用PyPDF2库打开现有的PDF文件,并获取第一页的大小。 2. 使用reportlab库创建一个与PDF页面大小相同的canvas对象。 3. 使用drawImage方法将图片绘制到canvas上,指定位置和大小。 4. 将canvas的内容添加到output对象中。 5. 使用PyPDF2将临时PDF文件的页面合并到output中。 6. 遍历原始PDF文件的每一页,将其添加到output中。 7. 将output保存为新的PDF文件。 请注意,你需要将代码中的'existing_file.pdf'替换为你要操作的现有PDF文件,'image.png'替换为你要添加的图片文件,并将'output_file.pdf'替换为你要输出的PDF文件名。图片位置和大小可以根据需要进行调整。 希望这个示例能帮到你!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值