不必上傳,也能把 Word 文件變成 PDF
這個工具做什麼
這個工具會讀取 .docx 檔案並重新排成 PDF。Word 文件其實是一個裝著 XML 的 ZIP 壓縮檔,工具在瀏覽器中打開它,逐一走過裡面的段落、文字區段、清單與表格,再用 pdf-lib 畫到 PDF 頁面上。紙張大小與邊界取自文件本身的節設定,所以 A4 文件仍是 A4,Letter 文件仍是 Letter。
格式同樣會保留:粗體、斜體、底線與刪除線,字級與顏色,對齊與縮排,標題樣式,含多層巢狀的項目符號與編號清單,內文圖片,保有欄寬與儲存格網底的表格,以及在 PDF 中依然可以點擊的超連結。
整件事如何在一個分頁裡跑完
真正在做事的只有三個元件,而且全都是在您機器上執行的 JavaScript。JSZip 把 .docx 解壓縮,瀏覽器內建的 DOMParser 讀出裡面的 document.xml、styles.xml、numbering.xml 與 theme1.xml,pdf-lib 再把組好的頁面寫成 PDF 位元組。這一串流程裡沒有任何一次跟轉換伺服器的往返;轉換進行時打開開發者工具的網路面板就能自己確認。
好處不只在於資料不外流。頁面載入之後就算斷線也還能用,15MB 的文件不必等上傳就直接開始轉換,速度取決於您自己的 CPU,而不是共用伺服器當下有多忙。
中文文件的字型是怎麼決定的
中文文件幾乎一定得內嵌字型。PDF 內建的十四種字型全都只涵蓋拉丁字母,只要出現一個中文字就排不出來。因此工具會抓取 Noto Sans CJK,再用 HarfBuzz 只裁切出這份文件實際用到的字形內嵌進去。一份履歷用到的字不過數百個,四 MB 出頭的原始字型因此縮到幾十 KB。
精確比對字型不在支援範圍內:微軟正黑體、新細明體、標楷體都會換成同一套 Noto Sans CJK,字的外形可能與 Word 略有出入。不過工具會實際量測字寬來斷行,並套用 `。、」』)` 這類避頭點規則,所以換行位置與整體版面仍然忠於原稿。若連內嵌字型都沒有某個字的字形,例如表情符號或罕用字,工具會列出來而不是悄悄丟掉。
支援與不支援的內容
表格是支援的,包括水平合併、儲存格底色與框線,以及跨頁的列;垂直合併的儲存格則會把延續的格子留白。不支援的有:文字方塊、圖案、藝術字與 SmartArt、圖表、方程式、註腳與章節附註、註解、多欄排版、表格儲存格內的巢狀表格,以及 EMF 與 WMF 圖片。遇到這些元素時,工具會略過該處、把文件其餘部分轉換完,再明確告訴您少了什麼、少了幾個——這樣就不會事後才發現 PDF 內容變薄。
舊的二進位 .doc 檔案完全無法讀取,請先在 Word 中開啟並另存為 .docx。設有密碼的文件必須先解除保護,因為內容本身是加密的。