すべてのドキュメントを1冊の合本にまとめる手法は通読に最適ですが、機能ごとの仕様書や規約集など、ファイル単位で独立した個別PDFとして配布したい場面も数多く存在します。しかし、数十個のPDFを1つずつダウンロードするとブラウザのポップアップ警告が発生し、フォルダも散らかってしまいます。md2pdf を使えば、複数のMarkdownを個別PDFとして生成し、1つのZIPアーカイブにまとめて一括保存できます。
本記事では、個別PDFの一括生成の仕組み、JSZipを用いたブラウザ内ZIP圧縮処理、目的に応じたエクスポート構造の選択について解説します。
統合書籍ではなく個別PDFを選択すべきケース
文書の利用目的に応じて、2つの出力モードを使い分けることが効果的です:
- モジュール別配布: プロジェクト全体の全文書を渡すのではなく、担当者や顧客に必要な特定のガイドのみを配布したい場合。
- マイクロドキュメント管理: API仕様書やリリースノートなど、トピックごとに独立したファイルとしてファイリングしたい場合。
- ダウンロード警告の回避: 単一のZIPファイルにまとめることで、ブラウザによる複数同時ダウンロードのブロック警告を防げます。
Export Modes in md2pdf:
Mode A (Consolidated Book):
- Multi-chapter single PDF (e.g., project-documentation.pdf)
- Unified Table of Contents & continuous page numbering
Mode B (ZIP Archive Bundle):
- project-docs-bundle.zip
├── 01-getting-started.pdf
├── 02-architecture.pdf
└── 03-api-reference.pdf
JSZipを活用したクライアントサイドZIP生成
md2pdfは実績ある JSZip ライブラリを採用し、サーバーを介さずブラウザ内部で直接アーカイブを構築します:
- 順次レンダリング: 選択された各Markdownファイルは、
pdf-libを通じて独立したPDFバイナリバッファとしてレンダリングされます。 - わかりやすいファイル命名: 生成されるPDFには、元のMarkdownファイル名やタイトル見出しに基づいた適切なファイル名が付与されます。
- インメモリ圧縮: レンダリングが完了したPDFから順次、メモリ上のZIPストリームへと追加されます。
- 一括ダウンロード: すべての文書の処理が完了した段階で、1つのZIPファイルとしてブラウザから即座にダウンロードされます。
ZIP内部のディレクトリ構造の維持
多階層のリポジトリからドキュメントを出力する場合、md2pdfはZIP内のフォルダ階層を保持するかどうかを選択できます:
- 階層構造の維持:
docs/api/endpoints.mdのファイルは、ZIP内でもdocs/api/endpoints.pdfとして配置されます。 - フラットな配置: サブフォルダを作らず、重複を避けたファイル名で単一階層にすべてのPDFをフラットに並べることも可能です。
クライアントサイドでのメモリ最適化
大量のPDFを同時にレンダリングすると、ブラウザのメモリが圧迫されるリスクがあります。
md2pdfは処理を適切な単位で逐次実行し、ドキュメントの生成が完了するたびに不要になったDOMノードや画像バッファを速やかに破棄します。このガベージコレクションに配慮した設計により、ページ数の多い大規模ドキュメントでもブラウザがクラッシュすることはありません。
md2pdfにおけるZIPパッケージのエクスポート手順
ZIPアーカイブを作成するには、ファイル一覧で対象のMarkdownを選択し、出力モードを「個別PDF (ZIP)」に切り替えてエクスポートをクリックします。数秒で、すべてのドキュメントがきれいに整理されたZIPファイルとしてダウンロードされます。
自分だけのREADME PDFを作る
無料、ログイン不要、そしてすべてクライアントサイド。