アップロードせずに Word 文書を PDF にする
このツールがすること
.docx ファイルを読み取り、PDF として組み直します。Word 文書は実のところ XML を収めた ZIP アーカイブで、このツールはそれをブラウザで開き、中の段落・ラン・リスト・表をたどりながら pdf-lib で各ページに描画します。用紙サイズと余白は文書自身のセクション設定から取るため、A4 の文書は A4 のまま、レターの文書はレターのまま出力されます。
書式も引き継がれます。太字・斜体・下線・取り消し線、文字サイズと色、配置とインデント、見出しスタイル、入れ子を含む箇条書きと段落番号、本文中の画像、列幅とセルの網かけを保った表、そして PDF でもクリックできるハイパーリンクまでそのままです。
タブ一つで変換が完結する仕組み
働いている部品は三つだけで、いずれも手元の端末で動く JavaScript です。JSZip が .docx を展開し、ブラウザ内蔵の DOMParser が中の document.xml・styles.xml・numbering.xml・theme1.xml を読み取り、pdf-lib が組み上がったページを PDF のバイト列として書き出します。この流れのどこにも変換サーバーとの往復はありません。変換中に開発者ツールのネットワークパネルを開けば、そのまま確認できます。
利点は情報の扱いだけではありません。ページを一度読み込めば通信が切れても使い続けられますし、15MB の文書でもアップロードを待たずにすぐ変換が始まります。速度を決めるのは共有サーバーの混み具合ではなく、手元の CPU です。
日本語文書でフォントがどう決まるか
日本語の文書は、ほぼ必ずフォントの埋め込みが要ります。PDF が標準で持つ 14 書体はどれもラテン文字しか収めておらず、かなや漢字が一文字でもあればその 14 書体では組めないからです。そこで Noto Sans CJK を取得し、HarfBuzz でその文書が実際に使った字形だけを切り出して埋め込みます。履歴書一枚に出てくる文字は数百字程度なので、4MB を超える元のフォントが数十 KB にまで縮みます。
フォントを厳密に一致させることは対象外です。游ゴシック・MS 明朝・メイリオはすべて Noto Sans CJK 一書体に置き換わるため、字形は Word と多少異なって見えることがあります。ただし文字幅を実測して行を折り、`。、」』)` などの行頭禁則も守るので、改行位置と紙面の組み方は原本のままです。埋め込んだフォントにも字形がない文字、たとえば絵文字や異体字は、黙って落とさず一覧で知らせます。
対応している要素・していない要素
表には対応しています。横方向の結合、セルの背景と罫線、ページをまたぐ行まで処理し、縦方向の結合は続きのセルを空欄にして描画します。対応していないのは、テキストボックス・図形・ワードアート・SmartArt、グラフ、数式、脚注と文末脚注、コメント、段組み、表の中に入れ子になった表、EMF・WMF 画像です。これらに出会うとその要素だけを飛ばして残りを最後まで変換し、何がいくつ省かれたかを結果画面で伝えます。内容の減った PDF に後から気づくことがないようにするためです。
旧形式のバイナリ .doc はそもそも読み取れないため、Word で開いて .docx として保存してから使ってください。パスワード付きの文書は内容自体が暗号化されているので、先に解除が必要です。