@yamayu62

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PythonでPDFを再PDF化したいです。

解決したいこと

PDF内のスタンプを編集されたくないので、再度PDF化したいと考えています。再PDF化は印刷設定で"Microsoft Print to PDF"を指定してPDF化したいです。下記のコードでは印刷設定のダイアログが開いてしまいます。ダイアログは開かずに、input_folder内のファイルをすべて再PDF化しoutput_folderに送りたいです。解決法をご教授願います。

環境

python3.11.7
Adobe Acrobat 2017

該当するソースコード

import os
import subprocess
def print_to_pdf(input_folder, output_folder):
    # 入力フォルダー内のすべてのPDFファイルに対してループを実行
    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            input_pdf_path = os.path.join(input_folder, filename)
            
            # 出力PDFファイルのパスを作成
            output_pdf_path = os.path.join(output_folder, filename)
            
            # Adobe Acrobatのパス
            acrobat_path = r"C:\Program Files (x86)\Adobe\Acrobat 2017\Acrobat\Acrobat.exe"

       # Adobe Acrobatを起動して指定されたPDFファイルをMicrosoft Print to PDFプリンターで印刷
            print_command = f'"{acrobat_path}" /t "{input_pdf_path}" "Microsoft Print to PDF"'
            process = subprocess.Popen(print_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            stdout, stderr = process.communicate()
            exit_code = process.wait()
            
            # Adobe Acrobatの印刷ジョブが正常に終了した場合、出力ファイルが生成されているか確認し、存在すればリネーム
            if exit_code == 0 and os.path.exists(output_pdf_path):
                print(f"{filename} を印刷しました。")
                os.rename(output_pdf_path, os.path.join(output_folder, filename))
            else:
                print(f"{filename} の印刷中にエラーが発生しました。")
                
# 入力フォルダー
input_folder = r"C:\Users\CR\Desktop\PDF入力"

# 出力先フォルダー
output_folder = r"C:\Users\CR\Desktop\PDF出力先"

# PDFを印刷して出力フォルダーに保存
print_to_pdf(input_folder, output_folder)

0 likes

1Answer

Comments

  1. @yamayu62

    Questioner

    ご返答ありがとうございます。
    /sはファイルを開くだけで、/h /t でも状況は変わりませんでした....。

  2. "/t"オプションにはパラメタが4つあるようなので、残りの2つも指定したらどうか。何を指定するのか分かりませんが・・・

    /t <filename> <printername> <drivername> <portname>

  3. @yamayu62

    Questioner

    この2つのパラメーターは関係なさそうなんです...。

  4. そうですか・・・。お役に立てずすみません。

    Power Automate for Desktop を使うと「印刷ダイアログを開かずに」できるかも??

Your answer might help someone💌