Is it possible to execute QPDF through Python script
Asked Answered
W

2

5

I'm working on a python script that processes PDF files, though some of them contain encryption that restricts usage to only printing, which I have to manually remove before I can process them.

For that I have been manually using QPDF to remove these restrictions on individual PDF files before running the script (the commands for qpdf are pretty simple...inside the command prompt -> qpdf --decrypt input.pdf output.pdf)

My question is - rather than doing this bit manually, is it possible to execute the QPDF executable file within my Python script and run the command? I haven't been able to find any python modules specifically to control QPDF so I am not holding much hope.

Withershins answered 15/11, 2016 at 20:52 Comment(3)
use subprocess module to run any external program. ie. subprocess.run(["qpdf", "--decrypt", "input.pdf", "output.pdf"]) Dancette
Possible duplicate of Calling an external command in PythonVet
Python wrapper for qpdf: github.com/pikepdf/pikepdfThreemaster
W
7

Thanks to furas for pointing me in the right direction.

This is how I did it in Windows 10:

  1. Download QPDF, extract the folder and save somewhere on your PC. I put the folder in C:\qpdf-5.1.2. Inside the folder is bin\qpdf.exe.
  2. Set an environment variable to C:\qpdf-5.1.2\bin. To set an environment variable in Windows 10, go to System Properties > Advanced > Environment Variables. With PATH highlighted, click Edit, then click New and paste in the path to the directory in point 2.

Once that is set up, you can reference 'qpdf' in the command prompt and in Python.

import subprocess
subprocess.run(["qpdf", "--decrypt", "C:/qpdf-5.1.2/bin/input.pdf", "C:/qpdf-5.1.2/bin/output.pdf"])
Withershins answered 15/11, 2016 at 22:53 Comment(0)
B
1

Use pikepdf lib which is based on QPDF and referenced in the QPDF manual.

pip install pikepdf (pip or pip3 depending on your system's defaults)

import pikepdf

with pikepdf.Pdf.open('input.pdf', password='passwd') as pdf:
    pdf.save('output.pdf')

If the password is just a blank string, can omit the password param, it'll still save the output pdf file as a no-pw thing.

Berberine answered 19/12, 2021 at 6:41 Comment(1)
Thanks for sharing. When I asked the question in 2016 I don't think pikepdf existed. I have changed this to the accepted answer for anybody searching for this problemWithershins

© 2022 - 2024 — McMap. All rights reserved.