編輯器打開你的 Markdown,按「列印」,把目的地選成「另存為 PDF」。列印的是預覽窗格,所以產出的 PDF 是完稿文件的樣子。你會得到真正的標題階層、有樣式的表格和正常的程式碼區塊,而不是滿是星號的原始文字。

這招能成立,是因為現代瀏覽器的列印對話框都內建 PDF 引擎。不用安裝,也不會上傳。

頁碼、交叉參照,還有用腳本一次產生上百份文件,那是另一件事。那時就換 Pandoc 上場,下方的比較會老實地列出兩者的差別。

重點速覽

可用的方法瀏覽器列印對話框、Pandoc、編輯器擴充套件
排版品質最佳Pandoc 搭配 LaTeX 引擎
需要安裝嗎瀏覽器路線完全不需要
連結會保留嗎會,存成 PDF 後仍然可以點擊
分頁控制自動分頁,可用內容或 CSS 微調

四條路線比較

四種方式都能產生真正的 PDF。差別在於你得安裝什麼,以及換回多少排版控制權。

路線安裝需求排版品質最適合
編輯器的列印按鈕不需要良好,沿用瀏覽器樣式單份文件,馬上要
Pandoc 搭 LaTeX下載量很大書籍等級,自動頁碼報告、論文、印刷品
Pandoc 搭 weasyprintPython 套件由你自己的 CSS 決定網頁團隊、品牌化輸出
VS Code 擴充套件編輯器外掛依套件而異邊寫邊匯出

什麼時候瀏覽器就夠了

對多數人來說,瀏覽器路線不是將就。零成本、十秒完成,產出的文件就和預覽一模一樣。在權限被鎖死、什麼都不能安裝的公司筆電上,它照樣能用。想從一個專為這件事設計的頁面開始,Markdown 轉 PDF 工具把同樣的預覽和列印按鈕放在同一個畫面。

什麼時候該換成 Pandoc

  • 每一頁都要有自動頁碼。
  • 需要自動生成的目錄,或每頁重複的頁首頁尾。
  • 同一道指令必須在每週一早上無人值守地跑完。

讓成品乾淨專業的列印流程

  1. 文件開頭放一個 # 大標題,PDF 一打開就有清楚的名稱。
  2. 把預覽看過一遍,標題階層按順序使用,因為紙本上只剩這個結構可以帶讀者走。
  3. 按列印、目的地選「另存為 PDF」;程式碼區塊看起來太素時,勾選「背景圖形」。
  4. 長文件正式輸出前,先印一頁測試。

最後那一步只花十秒,卻能在修改成本還很低的時候,抓出邊界跑掉、標題落單、表格被裁掉這些問題。

控制好表格與長字串

比頁面寬的表格會被裁切或縮小。太寬的表格請拆開,或把資料行列互換,做法見表格指南。整串不換行的長字串也是同樣的麻煩。直接貼上的網址可能衝出頁面邊緣,改寫成正式的 [連結](網址) 就沒事了。

圖片與程式碼區塊要再看一次

圖片會以渲染尺寸列印,過大的截圖會佔滿整頁。列印前用內嵌的 <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 下載按鈕會直接把它交還給你。

相關問題

立即使用編輯器

開啟編輯器