converter.docx2pdf のソースコード

"""
Microsoft Word (docx) ドキュメントをPDF形式に変換するためのユーティリティスクリプトです。

このモジュールは、`comtypes.client` ライブラリを使用してWordアプリケーションのCOMオブジェクトを操作し、
指定されたWordファイルをPDFに変換する機能を提供します。

関連リンク:
:doc:`docx2pdf_usage`
"""

import os

try:
    import comtypes.client
except Exception:
    print("\ndocx2pdf.py: Import error: comtypes.client")
    input("Install: pip install comtypes\n")


[ドキュメント] def docx_to_pdf(input_path: str, output_path: str = None) -> str: """ 指定されたWord (docx) ファイルをPDF形式に変換します。 この関数は、Microsoft WordアプリケーションのCOMオブジェクトを利用して、 Wordドキュメントをバックグラウンドで開き、PDF形式で保存します。 出力パスが指定されない場合、入力ファイルと同じディレクトリにファイル名を引き継ぎ 拡張子を.pdfとしたパスが自動生成されます。 変換中にエラーが発生した場合は、Wordドキュメントを安全に閉じ、エラーメッセージを表示してNoneを返します。 :param input_path: str: 変換するWordファイル(.docx)のパス。 :param output_path: Optional[str]: 生成されるPDFファイルの出力パス。Noneの場合、 入力ファイルと同じディレクトリにファイル名を引き継ぎ 拡張子を.pdfとしたパスが自動生成されます。 :returns: Optional[str]: 変換に成功した場合は生成されたPDFファイルの絶対パス、失敗した場合はNoneを返します。 """ word = comtypes.client.CreateObject("Word.Application") word.Visible = 0 wdFormatPDF = 17 input_path = os.path.abspath(input_path) if output_path is None: output_path = os.path.splitext(input_path)[0] + ".pdf" else: output_path = os.path.abspath(output_path) print(f" Converting '{os.path.basename(input_path)}' to PDF...") doc = None try: doc = word.Documents.Open( input_path, ConfirmConversions=False, ReadOnly=True, AddToRecentFiles=False, ) doc.SaveAs(output_path, FileFormat=wdFormatPDF) doc.Close() print(f" Successfully converted to PDF: '{output_path}'") return output_path except Exception as e: print(f" Error converting '{input_path}' to PDF: {e}") if doc is not None: try: doc.Close(False) except Exception: pass return None finally: word.Quit()
if __name__ == "__main__": import sys input_path = sys.argv[1] if len(sys.argv) > 1 else None output_path = sys.argv[2] if len(sys.argv) > 2 else None if not input_path: print("Usage: python docx2pdf.py input.docx [output.pdf]") input("\nPress ENTER to terminate>>\n") raise SystemExit(1) docx_to_pdf(input_path, output_path) print("\nProgram execution completed.") input("\nPress ENTER to terminate>>\n")