Word 轉 PDF
整個轉換在這個分頁裡跑完,你的檔案不會被上傳到任何地方。
本機處理把檔案拖進來,或點擊選擇
支援 DOCX。沒有大小上限,不用註冊。
選好檔案之後,這一頁會先把它的結構讀出來 —— 分欄、文字方框、圖表、公式,以及它要畫的每一個字 —— 然後告訴你哪些會保留、哪些不會。這個檢查在轉檔之前就跑完,而且整個過程沒有任何一個位元組離開這個分頁。
這個工具不做的事
- 多欄版面會攤成單欄。文字一個字都不會少,但左右分欄的視覺配置不會保留。
- 文字方框的文字會保留,位置不會 —— 內容照出現順序排進正文。
- 頁首與頁尾還沒有輸出,頁碼也包含在內。
- 段落框線與分隔線(例如標題底下那條橫線)不會畫出來。
- 圖表與 SmartArt 不轉換。圖表等於一個獨立的繪圖引擎,而一張只對一半的圖表比一塊空白更容易被誤信。
- 只畫 PNG 與 JPEG。EMF、WMF、SVG、TIFF 會略過。
隨站的中文字型是 Noto Sans TC,授權為 SIL Open Font License 1.1,授權全文隨檔案一起提供。OFL 第 5 節末句明文寫著「使用本字型產生的文件」不受「必須維持在本授權下」這個要求約束 —— 也就是你在這裡下載的 PDF 本身不帶任何授權義務。看字型授權
這一頁會自己讀你的 .docx、自己算版面、自己寫出 PDF,全部在瀏覽器裡完成。輸出是真正的向量文字,可以選取、搜尋、複製,不是把頁面拍成圖。而且在動手轉之前,它會先把檔案的結構讀一遍,明確告訴你哪些會保留、哪些不會 —— 因為一個安靜產出錯誤結果的轉檔器,比一個直接說做不到的更糟。
.docx 其實就是一個裝滿 XML 的 ZIP,這就是它能在本機跑的原因
把任何一個 .docx 改名成 .zip 再打開,你會看到一棵資料夾樹:word/document.xml 放文字與結構、word/styles.xml 放具名樣式、word/numbering.xml 描述項目符號與編號規則、word/media/ 放圖片。中間沒有任何專有的二進位區塊。這個格式從 2006 年就是公開且有規格書的標準(ECMA-376)。
這件事的意義是:轉一個 Word 檔不需要 Word,也不需要某台伺服器上跑著 Word 或 LibreOffice。它需要的是一個 ZIP 解壓器、一個 XML 解析器 —— 這兩樣你的瀏覽器本來就有 —— 再加上一段知道那些標籤是什麼意思的程式。全部加起來只有幾百 KB 的 JavaScript,跑在你自己的處理器上。
舊的 .doc 格式是真的不一樣:那是 1990 年代的二進位複合檔,結構難讀得多,實務上也沒有完整的公開文件。我們不支援它。如果你手上是 .doc,用 Word、Google 文件或 LibreOffice 開起來另存成 .docx 就好,三者都只要兩個動作。
為什麼別家要你上傳,而我們不必
大多數線上 Word 轉 PDF 服務是在伺服器上跑 LibreOffice:你上傳,它用一整套 office 套件把你的文件打開、列印成 PDF,再給你一個下載連結。這個做法有效,保真度也很好,但每一次轉換都花營運者真的錢 —— 要有機器在跑、要管排隊、你的檔案至少要在某處放幾分鐘。那筆成本正是那些網站有檔案大小上限、每小時次數限制、浮水印與付費方案的原因。
我們把另一條路量過了。在本機跑 LibreOffice 轉我們的測試文件,每一份要 1.9 到 6.6 秒;同樣的轉換在瀏覽器裡是 13 到 353 毫秒 —— 快了一個數量級,因為沒有上傳、沒有排隊、沒有來回、也不用啟動一整套 office。代價是複雜版面的保真度會輸,那是真的代價,所以我們在下面具體寫出來,而不是含糊帶過。
輸出檔案也小得多。一份中文測試文件用 LibreOffice 轉出來是 843 KB,在這裡是 53 KB;一份真實的六頁 Word 檔從 559 KB 變成 110 KB。原因是字型嵌入方式:伺服器端的轉檔器通常會嵌進一大塊 CJK 字型,而我們只嵌你這份文件真正用到的字。
中文,以及讓多數瀏覽器端轉檔器在這裡失敗的兩個錯誤
PDF 要畫出一個字,那個字的字型必須嵌在檔案裡,或者是每個閱讀器都內建的那十四款標準字型之一。那十四款只有拉丁字母,所以你文件裡的任何中文都需要真的嵌一份字型。我們隨站帶一份 Noto Sans TC 的子集,涵蓋 6,403 個字元 —— Big5 常用字、標點、注音、全形英數、製表符、圈號數字 —— 檔案 1.9 MB,而且只有在你選了檔案、並且那份檔案真的需要中文時才會抓。純英數的文件連一個位元組都不會下載。
這裡有兩個很容易犯而且都會靜默失敗的錯。第一個是讓 PDF 函式庫自己做字型子集:我們把 204 個中文字走過那條路,其中 158 個變成空白,而文字層完全正確、可搜尋。頁數、檔案大小、抽字結果全都看起來很健康。現在我們改用 HarfBuzz 自己切好子集,再原封不動嵌進去。第二個是字重:我們用來產生子集的可變字型預設值是 100,也就是髮絲細的 Thin,結果中文明顯比旁邊的英文淡一階。現在字重釘在 400,而判斷標準是「同一頁的中文與英文看起來是不是同一個力道」,不是任何一個數字接近 1。
第三個問題更細。字型的選擇必須逐字元決定,不能逐段決定。一行字裡只要有一個 en dash,例如「2022–present」,就足以把整行推去用中文字型,字距也跟著變 —— 我們第一版把它印成「2 0 2 2 present」,而那個破折號根本沒畫出來。現在改成逐字元判斷,依據是「標準字型到底編不編得出、畫不畫得出這個字」,而不是一張手寫的字元範圍表。
它做得好的事,以及它會讓你失望的地方
一般文件它處理得不錯:段落與標題、粗體斜體底線刪除線、顏色、字級、含多層的項目符號與編號清單、有框線與底色表頭的表格、PNG 與 JPEG 圖片、上下標,以及文件裡設定的頁面尺寸與邊界。履歷、信件、單頁報告、發票、表單、技術文件是我們測得最多的情況,這些都轉得乾淨。
它會讓你失望的地方是「不是單欄流動文字」的版面。多欄會被攤成單欄 —— 每個字都在,但左右並排的配置沒有了。文字方框與浮動框保留文字但失去位置,本來壓在圖片上的說明文字會變成獨立的一段。頁首與頁尾目前還沒有輸出,頁碼也包含在內。段落框線,包括標題底下那條橫線,不會畫。圖表、SmartArt 與數學公式不轉換,它們原本佔的位置會留白,而不是填一個大概的東西上去。
你不需要靠猜來判斷哪一項會影響你。你一選檔,這一頁就會把結構讀出來並列出它找到的具體問題:幾欄、幾個文字方框、有沒有圖表,以及文字裡有哪些字元在隨站字型裡沒有字形。這個檢查只要幾毫秒,而且發生在轉換之前,所以你可以先決定要不要按下去。
你的檔案會發生什麼事,以及授權對這份 PDF 意味著什麼
沒有任何上傳。你的文件是用瀏覽器給網頁的檔案 API 讀進來的,轉換在同一個分頁裡跑,PDF 在記憶體裡產生然後交給你下載。過程中沒有任何一個請求帶著你的檔案,所以沒有東西可以被攔截、沒有保留期限需要你信任、也沒有一個可能外流的分享連結。你可以自己驗:打開開發人員工具、盯著「網路」分頁、然後轉一次。本站送出的安全性政策把網路連線限制在自己的來源,所以就算程式想把你的文件送出去,瀏覽器本身也會擋下來。
隨站的中文字型是 Noto Sans TC,授權為 SIL Open Font License 1.1,授權全文跟著檔案一起提供。OFL 第 5 節末句明文寫著「必須維持在本授權下」這個要求不適用於使用本字型產生的文件。所以你的 PDF 本身不帶任何授權義務,即使裡面嵌了那份字型的一個子集。
有一件事我們不會宣稱:這不是 PDF/A 輸出,這一頁也不是封存合規工具。我們對拉丁文字用的是 PDF 標準字型,而標準字型依定義是不嵌入的 —— 光這一點就已經讓檔案不符 PDF/A。如果你要的是給檔案管理系統用的合規封存 PDF,你需要一個能驗證自己輸出的工具,而目前沒有任何這樣的驗證器可以在瀏覽器裡跑。
常見問題
我的文件真的沒有被上傳嗎?
真的沒有。轉換是跑在你分頁裡的 JavaScript 與 WebAssembly。打開開發人員工具的「網路」分頁然後轉一份檔案,你的文件不會出現在任何請求裡。唯一的網路活動是抓這個頁面本身,以及在你的文件含中文時抓那份中文字型。
可以轉 .doc 嗎?
不行。舊的 .doc 是二進位複合檔,不是裝 XML 的 ZIP,那是完全不同的工作。請先用 Word、Google 文件或 LibreOffice 開起來另存成 .docx。
PDF 會跟我的 Word 長得一模一樣嗎?
單欄文字加標題、清單、表格、圖片的話會很接近。多欄、文字方框、圖表、SmartArt 或公式就不會 —— 那些是具名的限制,而且這一頁會在轉換之前告訴你哪幾項會影響你的檔案。
為什麼會有字型下載?
因為 PDF 要畫中文就必須嵌一份字型,而每個 PDF 閱讀器內建的那十四款只有拉丁字母。字型是在你選好檔案、而且那份檔案需要中文時才抓。用到比較罕見的字時會改抓一份較大的擴充字集;實測真實的中文文件大約每五份有一份會用到。
有檔案大小限制嗎?
我們沒有設限。實務上的天花板是你裝置的記憶體,因為文件與 PDF 都在分頁裡。幾 MB 的文件很輕鬆;一份一百 MB、幾百張圖的檔案我們沒有測過。
可以轉日文或韓文文件嗎?
不行,而且我們會直接說,不會產出一堆亂碼。隨站字型裡一個諺文音節都沒有;日文就算加了假名,多數只在日文用的漢字仍然缺 —— 一頁只畫對一半比一句明確的拒絕更難解釋。偵測到日文或韓文時,這一頁會在你轉之前就告訴你。