將各種格式的文字或程式碼轉為 PS 或 PDF 檔的小工具
Convert text or source code to PDF or PS file.

一般若是要將文件列印出來或是分享給不同平台的使用者時(例如放在 iPad 或其他平板電腦上),將文件排版後轉換為跨平台的 PDF 檔是個不錯的選擇,在 Windows 底下我們可以使用 MS Office 將文件轉換為 PDF 檔,而在 Linux 中其實有更多工具可以使用。

這裡介紹一些在 Linux 下可以將各種格式的文件(包含文字、程式碼、網頁與圖形等格式)轉換為 PS 或 PDF 檔的工具,包含各種辦公軟體與命令列小工具,依照不同的需求使用者可以選擇不同的工具來使用。

LibreOffice

在 Linux 最容易上手的 PDF 轉換工具,就是 LibreOffice(原來稱作 OpenOffice,現在改名為 LibreOffice)了,使用方式很簡單,將文字編輯好之後,使用上方工具列的「直接繪出成 PDF」按鈕,就可以轉換為 PDF 擋了,若是。程式碼的話建議使用 Mono 系列的字型,這樣才會比較容易閱讀。

若是排版程式碼的話,建議使用 indent 這個小工具自動先將程式碼的縮排處理好,在貼上去 LibreOffice 或比較省事,例如要排版 Java 的程式碼檔案 pyramid.java:
indent pyramid.java
這樣 indent 就會自動處理 pyramid.java 中的程式碼縮排,然後再將 pyramid.java 的內容貼上來。

另外如果您習慣用 Vim 的話,也可以直接在 Vim 中進行程式碼的縮排,在 Vim 中縮排全部程式碼的指令是
gg=G
做完之後就可以直接貼上 LibreOffice 了。


這是 LibreOffice 輸出的 PDF 檔用 Linux 下的 Adobe Reader 開啟的情況:



使用 LibreOffice 的優點是很簡單,要加入圖形或是文字都很容易,初學者幾乎不需具備任何 Linux 指令背景就可以使用;缺點就是需要人工手動排版,若是要排版的文件太多,就要花比較久的時間了。

a2ps

a2ps 是個開放原始碼的命令列小工具,a2ps 代表 Any to PostScript,可用來將各種格式的文字或程式碼轉換成 PS 或其他的檔案格式(如 PDF 與 HTML 檔等),除了單純的文字轉換之外,a2ps 還可以替一些常用程式語言的程式碼加上關鍵字的標示,讓程式碼更容易閱讀。

除了處理一般文字之外,a2ps 也支援圖形的處理,只是 a2ps 對於圖形的排版就沒有那麼好用,他只會將圖形轉為 PS 檔,至於擺放的位置就很難調整了。

在使用 a2ps 時,若是原本的程式碼沒有排版,就要先使用 indent 或是 Vim 等程式先進行排版,再使用 a2ps 轉檔,其使用方式很簡單,直接將檔案餵給 a2ps 就可以了,例如若是要將 pyramid.java 這個程式碼檔案用 indent 排版後轉為 PS 檔:
indent pyramid.java
a2ps -o pyramid.ps pyramid.java

這樣會將 pyramid.java 轉換為 PS 檔輸出至 pyramid.ps,但是這樣 indent 會更動到原始的 pyramid.java 的檔案內容,若是不想更動到原始程式碼的內容,可以改用 pipe 的寫法:
indent -st pyramid.c|a2ps -o pyramid.ps
若是要轉為 PDF 檔可以用 ps2pdf 將所產生的 PS 檔轉為 PDF,但通常我們只需要一個 PDF 檔就好,不需要 PS 檔,這時候可以這樣做:
indent -st pyramid.c|a2ps -o -|ps2pdf - pyramid.pdf
這樣就可以直接產生 PDF 檔不用多產生一個不必要的 PS 檔。

使用 a2ps 配合 indent 的優點在於處理大量程式碼的時候,可以省下很多人工排版的時間,例如我們有幾個 Java 與 C++ 的程式碼檔案要排版,就直接把所有的檔案名稱傳給 a2ps 就可以了,它會很聰明的判斷檔案是哪一種語言,並將各種程式語言的程式碼加上關鍵字的標示,例如:
a2ps -o - code1.java code2.java code3.cpp code4.cpp|ps2pdf - output.pdf
這樣 a2ps 就會把所有輸入的原始碼檔案自排版好後,輸出到 ps2pdf 轉為 PDF 檔,這是所產生的 output.pdf 檔用 Adobe Reader 開起來的情況:


a2ps 經過筆者測試,無法處理中文,也就是說程式碼中有中文的話就會變成亂碼,這時候可能就要改用 LibreOffice 了,而若是您的系統語系預設是中文的話,在使用 a2ps 時也會造成日期變成亂碼的情形,轉出來的 PDF 就會像這樣:


這時候可以在執行 a2ps 之前先更改語系:
export LANG=C
這樣再執行 a2ps 時,就會以英文的方式顯示日期。
本站已經搬家了,欲查看最新的文章,請至 G. T. Wang 新網站