Markdown はシンプルな記法で文書を作成できるため、技術文書や社内資料の作成、Git での管理などに向いています。一方、完成した文書を取引先に提出したり、印刷用に配布したりする際には、Word や PDF 形式が必要になることがあります。
こうした変換を毎回手作業で行うのは面倒ですが、Python で処理を自動化しておけば、複数の Markdown ファイルをまとめて Word や PDF に変換できます。ローカル環境で処理できるため、外部サービスにファイルをアップロードしたくない場合にも便利です。
この記事では、Spire.Doc for Python を使って Markdown ファイルを Word(.docx / .doc)や PDF に変換する方法を紹介します。PDF のパスワード設定や画像品質の調整、Word から Markdown への変換、一括変換の方法もあわせて解説します。
環境を準備する
今回は Spire.Doc for Python を使用します。Word 文書を扱うためのライブラリですが、Markdown の読み込みにも対応しており、読み込んだ文書を Word や PDF などの形式で保存できます。
まず、以下のコマンドでインストールします。
pip install Spire.Doc
インストールしたら、必要なモジュールをインポートします。
from spire.doc import *
from spire.doc.common import *
Markdown ファイルを読み込む際は、.md ファイルとして指定すれば、通常は FileFormat を明示する必要はありません。
MarkdownをWordに変換する
Markdown を Word に変換する基本的な流れはシンプルです。
-
Documentを作成する -
LoadFromFile()で Markdown を読み込む -
SaveToFile()で Word 形式として保存する
例えば、次のコードでは 1 つの Markdown ファイルから .docx と .doc の両方を作成します。
from spire.doc import *
from spire.doc.common import *
document = Document()
# Markdown ファイルを読み込む
document.LoadFromFile("./Data/FromMarkdown.md")
# Word 文書(.docx)として保存する
document.SaveToFile("FromMarkdown_docx.docx", FileFormat.Docx)
# 従来の Word 形式(.doc)として保存する
document.SaveToFile("FromMarkdown_doc.doc", FileFormat.Doc)
document.Close()
同じ Document オブジェクトから複数の形式へ保存できるため、Markdown を読み込む処理は一度だけで済みます。
通常は .docx を使うのがおすすめです。.doc は古いバージョンの Word との互換性が必要な場合など、用途が限られます。
なお、Markdown の記法によっては、変換後のレイアウトが期待した結果にならないことがあります。特に複雑な表や HTML を含む Markdown を変換する場合は、生成された Word ファイルを一度確認しておくと安心です。
MarkdownをPDFに変換する
印刷や配布が目的なら、Markdown から PDF を直接生成する方法もあります。
Word の場合と同じように LoadFromFile() で Markdown を読み込み、SaveToFile() で FileFormat.PDF を指定します。
from spire.doc import *
from spire.doc.common import *
document = Document()
# Markdown ファイルを読み込む
document.LoadFromFile("./Data/FromMarkdown.md")
# PDF として保存する
document.SaveToFile("FromMarkdown_pdf.pdf", FileFormat.PDF)
document.Close()
この方法なら、Markdown → Word → PDF のように中間ファイルを作成する必要はありません。
例えば、Markdown から PDF を定期的に生成するドキュメント管理ツールや、自動ビルドの処理に組み込む場合にも利用できます。
一方で、PDF 化する前に Word でレイアウトを確認したい場合は、いったん .docx に保存してから PDF に変換する方法もあります。用途に応じて使い分けるとよいでしょう。
PDFにパスワードを設定する
PDF を外部に配布する場合、文書の内容によってはパスワードを設定したいことがあります。
Spire.Doc for Python では、ToPdfParameterList を使って PDF 出力時のセキュリティ設定を指定できます。
from spire.doc import *
from spire.doc.common import *
inputFile = "./Data/Sample.md"
outputFile = "ToPdfWithPassword.pdf"
document = Document()
document.LoadFromFile(inputFile)
# PDF 出力用のパラメータを作成する
toPdf = ToPdfParameterList()
# パスワードを設定する
password = "your-password"
toPdf.PdfSecurity.Encrypt(
"password",
password,
PdfPermissionsFlags.Default,
PdfEncryptionKeySize.Key128Bit
)
# PDF として保存する
document.SaveToFile(outputFile, toPdf)
document.Close()
Encrypt() では、PDF のパスワードや権限、暗号化方式などを指定できます。
機密性の高い資料を共有する場合は、パスワードだけでなく、印刷や編集などの権限も用途に合わせて設定しておくとよいでしょう。
PDFに埋め込む画像の品質を調整する
画像を多く含む文書では、PDF のファイルサイズが大きくなることがあります。その場合は、JPEGQuality を設定して画像の品質を調整できます。
from spire.doc import *
from spire.doc.common import *
document = Document()
document.LoadFromFile("./Data/Sample.md")
# JPEG 画像の品質を 40 に設定する
document.JPEGQuality = 40
document.SaveToFile("SetImageQuality.pdf", FileFormat.PDF)
document.Close()
JPEGQuality には 0~100 の値を指定します。値を下げるほど画像の圧縮が強くなり、PDF のファイルサイズを抑えやすくなります。
メールで送付する資料など、ファイルサイズを小さくしたい場合は低めの値を設定できます。一方、印刷用途など画質を優先する場合は、あまり値を下げない方がよいでしょう。
WordをMarkdownに変換する
Spire.Doc for Python では、Markdown から Word や PDF へ変換するだけでなく、Word から Markdown へ戻すこともできます。
基本的な処理は次のとおりです。
from spire.doc import *
from spire.doc.common import *
# Document オブジェクトを作成する
doc = Document()
# Word 文書を読み込む
doc.LoadFromFile("./Data/ToMarkdown.docx")
# Markdown 形式で保存する
doc.SaveToFile("ToMarkdown_output.md", FileFormat.Markdown)
doc.Close()
例えば、既存の Word 文書を Markdown ベースのドキュメント管理環境へ移行したい場合などに利用できます。
ただし、Word は Markdown よりも複雑なレイアウトを表現できるため、すべての書式をそのまま Markdown に変換できるわけではありません。段組みやテキストボックスなど、Markdown では表現しにくいレイアウトを含む文書では、変換後の内容を確認する必要があります。
MarkdownファイルをまとめてPDFに変換する
Markdown ファイルが 1 つだけなら個別に処理すれば十分ですが、ドキュメントがフォルダにまとまっている場合は、一括変換すると便利です。
例えば、docs_md フォルダ内の Markdown ファイルをすべて PDF に変換し、docs_pdf に保存する場合は次のように書けます。
import os
from spire.doc import *
from spire.doc.common import *
input_dir = "./docs_md"
output_dir = "./docs_pdf"
os.makedirs(output_dir, exist_ok=True)
for filename in sorted(os.listdir(input_dir)):
if not filename.endswith(".md"):
continue
document = Document()
document.LoadFromFile(os.path.join(input_dir, filename))
output_path = os.path.join(output_dir, filename[:-3] + ".pdf")
document.SaveToFile(output_path, FileFormat.PDF)
document.Close()
print(f"変換完了: {filename} -> {output_path}")
os.listdir() の結果はファイルシステムによって順序が異なることがあるため、ここでは sorted() を使って処理順を安定させています。
出力先を別のフォルダにしておけば、元の Markdown ファイルと変換後の PDF が混在することもありません。
Word に変換したい場合は、FileFormat.PDF と出力ファイルの拡張子を FileFormat.Docx と .docx に変更するだけで対応できます。
変換時に確認しておきたいポイント
出力形式と拡張子を合わせる
SaveToFile() で指定する FileFormat と、出力ファイルの拡張子は一致させてください。
例えば、PDF として保存するなら次のようにします。
document.SaveToFile("output.pdf", FileFormat.PDF)
Word の場合は次のようになります。
document.SaveToFile("output.docx", FileFormat.Docx)
形式と拡張子が一致していないと、生成されたファイルを開く際に問題が発生する可能性があります。
変換後のレイアウトを確認する
Markdown はシンプルな文書形式である一方、Word や PDF ではページサイズやフォント、表、画像などのレイアウトが重要になります。
特に以下のような要素を含む Markdown は、変換後に確認しておくことをおすすめします。
- 複雑な表
- 画像や画像キャプション
- コードブロック
- HTML を含む記述
- 入れ子になったリスト
単純な文書であればそのまま利用できるケースもありますが、提出資料や公開文書などでは、変換後のファイルを一度開いて確認すると確実です。
まとめ
Python と Spire.Doc for Python を組み合わせると、Markdown を Word や PDF に変換する処理をコードから自動化できます。
Markdown を Word に変換する場合は SaveToFile() で FileFormat.Docx などを指定し、PDF に変換する場合は FileFormat.PDF を指定します。PDF については、ToPdfParameterList を使ったパスワード設定や、JPEGQuality による画像品質の調整にも対応できます。
また、Word → Markdown の変換や、フォルダ内の Markdown ファイルをまとめて処理する一括変換にも応用できます。
Markdown を編集用の形式として利用し、必要なタイミングで Word や PDF を生成するようにしておけば、文書の管理と配布を分けて運用できます。まずは単一ファイルで変換結果を確認し、問題がなければ複数ファイルの一括処理へ広げると導入しやすいでしょう。