GNU gv 設定與使用心得

jollen 發表於 October 23, 2006 4:23 PM

GNU gv 是用來讀取 PostScript 與 PDF 格式文件的利器,GNU gv 其實只是一個前端界面 (front-end),實際上 GNU gv 是由 ghostview 1.5 衍生而來的,並且使用 ghostscript 來直譯文件。

GNU gv 的官方網站:http://www.gnu.org/software/gv/

gv 的使用

我們可以在 X Window System 底下直接下命令,例如:

linux# gv Trans.PS.gz

這是利用 gv 觀看 Trans.PS.gz 文件的範例,特別的是,經由 gzip 壓縮過的 PostScript 或 PDF 文件不需解壓即可直接利用 gv 閱讀,非常的方便。

利用 gv 也可以閱讀 PDF 文件,例如:

linux# gv imug.pdf

gv 命令列的參數:

□ -ad

讀取 資源檔。-ad 參數的優先權較 -style 來得高。

□ -antialias,-noantialias

是否要使用 antialiasing 功能。

□ -arguments

gv 是 ghostscript 的 front-end,在這裡的 是要傳給 ghostscript 的參數。

□ -center,-nocenter

是否要使用自動置中功能。

□ -dsc,-nodsc

是否要使用 DSC (document structuring convention)。如果不使用 DSC (-nodsc),gv 就不會檢查文件的結構,並且直接將整個檔案傳給 ghostscript。在 -nodsc 模式下,閱讀文件時不會有頁數顯示,而且無法在文件裡移動。

□ -eof,-noeof

使用 -eof 時,當遇到結束的註解時,即表示文件的結束。有些文件,例如將兩個文件合併,雖然有結束的註解,但不表示檔案的結束,這時加上 -noeof 參數才能閱讀全部內容。

□ -pixmap,-nopixmap

如果使用 -pixmap 參數,gv 會以 pixmap 的方式將顯示過的內容保存下來,反之,-nopixmap 參數表示是由 X Server 負責這項工作,而不是 gv。

□ -v

查詢版本編號。

□ -h,-?

顯示求助畫面 (參數用法)。

□ -help

顯示較清楚的求助畫面。

□ -scale

是一個整數,指定文件的放大倍數。

□ -scalebase

設定預設的放大倍數。

□ -monochrome, -grayscale, -color

設定調色盤,即文件的顏色樣式。

□ -media

設定紙張大小。

□ -page

指定文件的標名。

□ -portrait,-landscape,-seascape,-upsidedown

設定文件的顯示位置。

□ -quiet,-noquiet

是否要以 -dQUIET 參數執行 ghostscript。

□ -resize,-noresize

設定gv是否可以自動依視窗大小調整文件的大小。

□ -safer,-nosafer

是否要以 -dSAFER 參數執行 ghostscript。

□ -spartan

和 -style gv_spartan.dat 同義。

□ -style

指定設定檔 (resource file)。這個參數的優先權比 -ad 高。

□ -swap,-noswap

是否要交換 landscape 與 seascape 的顯示方式。

□ -watch,-nowatch

使用 -watch 參數的話,預設是 gv 每一秒會檢查一次文件內容是否有改變,如果有的話,gv 即顯示新的內容。

gv 的設定

如果嫌每次都要打一堆煩人的參數,其實我們可以把這些常用的參數編輯在一個檔案裡 (resource file)。

gv 會先使用由 XFILESEARCHPATH 環境變數所指定的 resource file,如果沒有 XFILESEARCHPATH 環境變數,則使用 /usr/X11R6/lib/X11/app-defaults/GV,系統資源檔可以設定 gv 的預設執行環境。

我們可以依我們平時閱讀的習慣來設定自己的 gv 環境,個人化的 resource file 位於 ~/.gv,gv 會優先使用 ~/.gv 這個 resource file。

gv 也有提供我們 resource file 的設定範例,請由 /usr/X11R6/lib/X11/gv/ 將 gv_user.ad 複製到 ~/.gv:

linux# cp /usr/X11R6/lib/X11/gv/gv_user.ad ~/.gv

GNU gv 提供以下 3 個設定範例:

1. /usr/X11R6/lib/X11/gv/gv_class.ad
2. /usr/X11R6/lib/X11/gv/gv_system.ad
3. /usr/X11R6/lib/X11/gv/gv_user.ad

gv_user.ad 是 gv 個人 resource file 的設定範例,gv_system.ad 是系統 resource file 的設定範例,但新裝好的 gv,實際上這兩個檔案內容是一樣的。

gv 的 resource file (gv_user.ad):


!
! gv_user.ad
! User specific application defaults for gv
! Copyright (C) 1995, 1996, 1997 Johannes Plass
!

!########## gv_user_res.dat

!##### Application specific Resources

GV.pageMedia: automatic
GV.orientation: automatic
GV.fallbackOrientation: portrait
GV.swapLandscape: False
GV.autoCenter: True
GV.antialias: True
GV.respectDSC: True
GV.ignoreEOF: True
GV.confirmPrint: True
GV.reverseScrolling: False
GV.scrollingEyeGuide: True
GV.autoResize: True
GV.maximumWidth: screen-20
GV.maximumHeight: screen-44
GV.minimumWidth: 400
GV.minimumHeight: 430
GV.confirmQuit: 1
GV.watchFile: False
GV.watchFileFrequency: 1000
GV.showTitle: True
GV.miscMenuEntries: redisplay \n\
# update \n\
stop \n\
line \n\
toggle_current \n\
toggle_even \n\
toggle_odd \n\
unmark \n\
line \n\
print_all \n\
print_marked \n\
save_all \n\
save_marked
GV.scale: 0
GV.scaleBase: 1
GV.scales: Natural size, 1.000, screen \n\
Pixel based, 1.000, pixel \n\
0.100, 0.100 \n\
0.125, 0.125 \n\
0.250, 0.250 \n\
0.500, 0.500 \n\
0.707, 0.707 \n\
1.000, 1.000 \n\
1.414, 1.414 \n\
2.000, 2.000 \n\
4.000, 4.000 \n\
8.000, 8.000 \n\
10.00, 10.00
GV.medias: Letter, 612 792 \n\
# LetterSmall, 612 792 \n\
Legal, 612 1008 \n\
Statement, 396 612 \n\
Tabloid, 792 1224 \n\
Ledger, 1224 792 \n\
Folio, 612 936 \n\
Quarto, 610 780 \n\
# 7x9, 504 648 \n\
# 9x11, 648 792 \n\
# 9x12, 648 864 \n\
# 10x13, 720 936 \n\
10x14, 720 1008 \n\
Executive, 540 720 \n\
# A0, 2384 3370 \n\
# A1, 1684 2384 \n\
# A2, 1191 1684 \n\
A3, 842 1191 \n\
A4, 595 842 \n\
# A4Small, 595 842 \n\
A5, 420 595 \n\
# A6, 297 420 \n\
# A7, 210 297 \n\
# A8, 148 210 \n\
# A9, 105 148 \n\
# A10, 73 105 \n\
# B0, 2920 4127 \n\
# B1, 2064 2920 \n\
# B2, 1460 2064 \n\
# B3, 1032 1460 \n\
B4, 729 1032 \n\
B5, 516 729 \n\
# B6, 363 516 \n\
# B7, 258 363 \n\
# B8, 181 258 \n\
# B9, 127 181 \n\
# B10, 91 127 \n\
# ISOB0, 2835 4008 \n\
# ISOB1, 2004 2835 \n\
# ISOB2, 1417 2004 \n\
# ISOB3, 1001 1417 \n\
# ISOB4, 709 1001 \n\
# ISOB5, 499 709 \n\
# ISOB6, 354 499 \n\
# ISOB7, 249 354 \n\
# ISOB8, 176 249 \n\
# ISOB9, 125 176 \n\
# ISOB10, 88 125 \n\
# C0, 2599 3676 \n\
# C1, 1837 2599 \n\
# C2, 1298 1837 \n\
# C3, 918 1296 \n\
# C4, 649 918 \n\
# C5, 459 649 \n\
# C6, 323 459 \n\
# C7, 230 323 \n\
# DL, 312 624
GV.magMenu: 2, 2 \n\
4, 4 \n\
8, 8 \n\
16, 16 \n\
32, 32 \n\
64, 64

!##### Ghostview Widget

GV*Ghostview.background: white
GV*Ghostview.foreground: black

!########## gv_intern_res.dat (generated by makefile)

GV.gsInterpreter: gs
GV.gsCmdScanPDF: gs -dNODISPLAY -dQUIET -sPDFname=%s -sDSCname=%s pdf2dsc.ps -c quit
GV.gsCmdConvPDF: gs -dNODISPLAY -dQUIET -dNOPAUSE -sPSFile=%s %s -c quit
GV.gsX11Device: -sDEVICE=x11
GV.gsX11AlphaDevice: -dNOPLATFONTS -sDEVICE=x11alpha
GV.gsSafer: True
GV.gsQuiet: True
GV.gsArguments:
GV.uncompressCommand: gzip -d -c %s > %s
GV.printCommand: lpr

!########## gv_make_res.dat (generated by makefile)

GV.scratchDir: ~/
GV.defaultSaveDir: ~/
GV.fallbackPageMedia: letter
GV.useBackingPixmap: True
GV*dirs: Home\n\
Tmp\n\

/usr/doc\n\
/usr/local/doc
GV*filter: no .*
GV*filters: None\n\
*.*ps* *.pdf* no .*\n\
*.*ps* no .*\n\
*.pdf* no .*\n\
no .*

設定說明

□ antialias

是否使用 antialias 功能 (True/False)。

□ autoCenter

是否使用自動置中功能 (True/False)。

□ autoResize

是否依照目前文件的頁面大小來調整視窗 (True/False)。

□ confirmPrint

列印時是否需要額外的確認 (True/False)。

□ confirmQuit

離開時是否要確認 (0/1/2)。預設值是 1 表示文件內容有變更時 (例如轉換格式) 才確認,0 表示永遠做不確認,2 表示每次離開時都做確認。

□ scrollingEyeGuide

利用鍵盤捲動文件時是否提示上一頁的部份,使用這個參數,在捲動文件時才能分辨的出那些內容是上一頁的舊內容 (True/False)。

□ ignoreEOF

是否忽略 EOF,當 gv 遇到結束的註解時,並不表示檔案的結束,可能文件中間來雜了 EOF,設定 ignoreEOF=True 時才能完全閱讀這樣的文件 (True/False)。

□ respectDSC

是否要使用 DSC (document structuring convention)。如果不使用 DSC,gv 就不會檢查文件的結構,並且直接將整個檔案傳給 ghostscript (True/False)。在 respectDSC=False 時,閱讀文件時不會有頁數顯示,而且無法在文件裡移動。

□ swapLandscape

landscape 與 seacape 的義意是否要互相交換 (True/False)。

□ scratchDir

設定一個暫存目錄。

□ defaultSaveDir

設定一個預設的存檔目錄。

□ useBackingPixmap

False 表示由 X Server 負責暫存顯示過的內容。True 則是由 gv 以 pixmap 方式暫存顯示過的內容。

□ watchFile

是否要自動檢查文件的改變 (True/False)。

□ watchFileFrequency

設定檢查文件的時間間隔,單位為 milliseconds,這個值必須大於 500 (milliseconds)。當 WathFile 為 True 時這個設定才有效。

□ printCommand

設定列印文件的指令,%s 巨集可用在這個指令的參數上,表示要列印的文件檔名。

□ gsInterpreter

啟動 ghostscript interpreter 的命令。

□ gsCmdScanPDF

由 PDF 格式的檔案中讀取 DSC 的命令。

□ gsCmdConvPDF

將 PDF 的格式轉換成 PostScript 的命令。

□ gsX11Device

啟動 X11 的命令。

□ gsX11AlphaDevice

當 antialiasing 啟動時,執行 X11 的命令。

□ gsSafer

確認 ghostscript 是否應該以 -dSAFER 的參數啟動。

□ gsQuiet

確認 ghostscript 是否應該以 -dQUIET 的參數啟動。

□ gsArguments

設定要傳給 ghostscript 的參數。

□ dirs

設定在目錄列表時可以選擇的目錄。

□ filter

設定 gv 的目錄列表方式,語法:

<filespecs> [no <filespecs>]

例如:

GV*filter: *.ps *.pdf no .*

表示只列出 *.ps 與 *.pdf 的檔案,但不列出 "." 開頭的檔案 (隱藏檔)。

□ filters

設定 Fliters 選單中可用的目錄列表方式。

□ miscMenuEntries

設定在文件上按滑鼠右鍵的彈跳視窗內容(update/redisplay/toggle_current/toggle_even/toggle_odd/unmark/stop/print_all/print_marked/save_all/save_marked/line)。

□ showTitle

是否在 title 上顯示目前所閱讀的文件名稱。

□ maximumWidth, maximumHeight

設定主視窗的最小寬度與高度,必須是正整數,最大當然是螢幕的解析度設定。

□ minimumWidth, minimumHeight

設定主視窗的最小寬度與高度,必須是大於 200 的正整數。

□ scale

設定放大倍數。

□ scaleBase

設定預設的放大倍數,必須為正整數。

□ scales

設定在 Scale 選單中的可用的閱讀放大倍數。

□ orientation

設定預設的文件顯示位置 (portrait/landscape/seascape/upside-down/automatic)。automatic 表示由 DSC 取得。

□ fallbackOrientation

設定自動偵測失敗時的預設紙張大小,value 有 portrait/landscape/seascape/upside-down。

□ medias

設定紙張大小,在 gv 的 Media 選單中可以選擇,如果是以 "!" 或 "#" 開始,表示不列入 Media 的選單中,但仍可以被自動偵測並使用。

□ pagemedia

設定紙張大小,value 為在 paper-sizes 中的設定。value 為 automatic 的話,gv 會試著由 DSC 自動偵測大小。

□ fallbackPageMedia

設定紙張大小,value 為在 paper-sizes 中的設定。當自動偵測失敗時就使用這裡設定的大小。

gv 的操作

底下只是基本常用的按鍵,其它 gv 的操作熱鍵請參考 man gv。

□ O 開啟新檔案
□ Q 離開 gv
□ shift-ctrl-P 列印目檔的文件
□ ctrl-L 重新顯示目前這一頁
□ . 重新顯示目前這一頁

□ V 把目前文件置中
□ Home 跳到第一頁
□ End 跳到最後一頁

□ shift-up 把文件往上捲,或移動 -1 頁
□ shift-left 把文件往左移,或移動 -1 頁
□ shift-down 把文件往下捲,或移動 1 頁
□ shift-right 把文件往右移,或移動 1 頁

□ shift-up 移動 -1 頁
□ shift-down 移動 1 頁

□ c-Enter 移動 -1 頁
□ s-Enter 移動 -1 頁

□ Enter 移動 1 頁
□ B 移動 -1 頁
□ F 移動 1 頁

□ ctrl-left 移動 -5 頁
□ ctrl-right 移動 5 頁
□Insert 移動 -5 頁
□ Delete 移動 5 頁

Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw