在編輯器打開你的 Markdown,按「列印」,把目的地選成「另存為 PDF」。列印的是預覽窗格,所以產出的 PDF 是完稿文件的樣子。你會得到真正的標題階層、有樣式的表格和正常的程式碼區塊,而不是滿是星號的原始文字。
這招能成立,是因為現代瀏覽器的列印對話框都內建 PDF 引擎。不用安裝,也不會上傳。
頁碼、交叉參照,還有用腳本一次產生上百份文件,那是另一件事。那時就換 Pandoc 上場,下方的比較會老實地列出兩者的差別。
重點速覽
| 可用的方法 | 瀏覽器列印對話框、Pandoc、編輯器擴充套件 |
|---|---|
| 排版品質最佳 | Pandoc 搭配 LaTeX 引擎 |
| 需要安裝嗎 | 瀏覽器路線完全不需要 |
| 連結會保留嗎 | 會,存成 PDF 後仍然可以點擊 |
| 分頁控制 | 自動分頁,可用內容或 CSS 微調 |
列印轉 PDF 的運作原理
- 瀏覽器列印的是渲染後的預覽,所以 PDF 呈現的是排版,不是 Markdown 符號。
- 檔案由你瀏覽器自己的列印引擎產生,不是由本站產生,所以沒有任何上傳。
- 紙張大小、邊界、縮放、背景圖形,全部都在列印對話框裡。
- 連結在存好的 PDF 裡仍然可以點擊,分頁位置則由瀏覽器自動決定。
關鍵觀念是:瀏覽器列印的是渲染後的窗格,不是你的原始文字。標題保有各自的大小,表格保有框線,連結在存好的檔案裡仍然可以點擊,原始符號則完全不會出現。所以預覽就是你的樣張:你在那裡看到什麼,PDF 裡就是什麼。
版面設定屬於瀏覽器,不屬於我們。紙張大小、邊界、縮放、頁首頁尾都在列印對話框裡,Chrome、Safari、Edge、Firefox 的用字略有不同。分頁位置是自動決定的。如果某個標題剛好落在頁面最底部,在它前面加一兩行內容通常就能把它推到下一頁。
小提醒:在大段落前插入一條水平線,能給讀者一個乾淨的視覺分界,往往還會順便把那一段推到新的一頁。
四條路線比較
四種方式都能產生真正的 PDF。差別在於你得安裝什麼,以及換回多少排版控制權。
| 路線 | 安裝需求 | 排版品質 | 最適合 |
|---|---|---|---|
| 編輯器的列印按鈕 | 不需要 | 良好,沿用瀏覽器樣式 | 單份文件,馬上要 |
| Pandoc 搭 LaTeX | 下載量很大 | 書籍等級,自動頁碼 | 報告、論文、印刷品 |
| Pandoc 搭 weasyprint | Python 套件 | 由你自己的 CSS 決定 | 網頁團隊、品牌化輸出 |
| VS Code 擴充套件 | 編輯器外掛 | 依套件而異 | 邊寫邊匯出 |
什麼時候瀏覽器就夠了
對多數人來說,瀏覽器路線不是將就。零成本、十秒完成,產出的文件就和預覽一模一樣。在權限被鎖死、什麼都不能安裝的公司筆電上,它照樣能用。想從一個專為這件事設計的頁面開始,Markdown 轉 PDF 工具把同樣的預覽和列印按鈕放在同一個畫面。
什麼時候該換成 Pandoc
- 每一頁都要有自動頁碼。
- 需要自動生成的目錄,或每頁重複的頁首頁尾。
- 同一道指令必須在每週一早上無人值守地跑完。
讓成品乾淨專業的列印流程
- 文件開頭放一個
#大標題,PDF 一打開就有清楚的名稱。 - 把預覽看過一遍,標題階層按順序使用,因為紙本上只剩這個結構可以帶讀者走。
- 按列印、目的地選「另存為 PDF」;程式碼區塊看起來太素時,勾選「背景圖形」。
- 長文件正式輸出前,先印一頁測試。
最後那一步只花十秒,卻能在修改成本還很低的時候,抓出邊界跑掉、標題落單、表格被裁掉這些問題。
控制好表格與長字串
比頁面寬的表格會被裁切或縮小。太寬的表格請拆開,或把資料行列互換,做法見表格指南。整串不換行的長字串也是同樣的麻煩。直接貼上的網址可能衝出頁面邊緣,改寫成正式的 [連結](網址) 就沒事了。
圖片與程式碼區塊要再看一次
圖片會以渲染尺寸列印,過大的截圖會佔滿整頁。列印前用內嵌的 <img width="400"> 標籤把它縮小,版面就能保持平衡。程式碼區塊的底色只有在勾了背景圖形時才會保留,而且太長的一行會被右邊界直接切掉而不是換行,所以長指令請自己拆成多行。
PDF 出來不對勁的原因
幾乎所有令人失望的 PDF 都出自這四個原因。
| 症狀 | 原因 | 解法 |
|---|---|---|
| 程式碼區塊變得很素 | 沒開背景圖形 | 在列印對話框勾選它 |
| 表格右側被切掉 | 表格比頁面寬 | 減少欄位,或改橫向 |
| 長網址衝出頁面 | 裸網址無法換行 | 改寫成有標籤的連結 |
| PDF 裡看得到星號 | 你列印的是原始碼窗格 | 切到預覽顯示狀態再列印 |
列印到原始碼窗格是最經典的一種
直接列印原始 Markdown,得到的是一頁滿滿的 ## 和 **,沒有人想收到這種文件。兩者的差別是這樣。
從原始碼窗格列印 從預覽列印
## 季度報告 季度報告(大字、粗體)
本季營收成長 **12%**。 本季營收成長 12%。
(12% 為粗體)
整個章節憑空消失時
請檢查 Markdown 裡是不是有沒關閉的程式碼圍欄。落單的三個反引號之後,內容全部會被吞進程式碼區塊,預覽窗格也會照實呈現。把圍欄補好,章節就回來了。圍欄的完整規則見程式碼區塊參考。
用 Pandoc 自動產生 PDF
週報、文件發佈、用範本大量產生的請款單,都屬於重複性工作。Pandoc 可以在指令列產生這些 PDF,排版交給 LaTeX 引擎或無頭瀏覽器。
pandoc report.md -o report.pdf
pandoc report.md --pdf-engine=weasyprint -o report.pdf
pandoc report.md --toc -V geometry:margin=2cm -o report.pdf
怎麼挑引擎
- 預設路線需要安裝 LaTeX。下載量不小,但排版是書籍等級,頁碼也直接附送。
--pdf-engine=weasyprint改用 CSS 排版,對網頁背景的人親切得多,也能直接沿用既有的樣式表。--toc會加上一份真正的目錄,-V geometry:margin=2cm則在指令列直接設定邊界。
什麼時候不必動用它
一次性的文件用這套就太重了。瀏覽器路線用一小部分的力氣,就能拿到絕大部分的品質。如果你要的其實是網頁而不是文件,把 Markdown 轉成 HTML 才是那個方向;只是想拿回原始檔的話,編輯器的 .md 下載按鈕會直接把它交還給你。
相關問題
立即使用編輯器
開啟編輯器