2013-06-03 59 views
2

我試圖解析使用的PostScript與Ghostscript的解釋.txt文件。 .txt文件是我需要從中提取日期戳記的各種日誌文件。文件中會有一行如「date:[01-May-2011 06:41:52]」。我試圖簡單地輸出「01-May-2011 06:41:52」部分(沒有括號等)到PDF。Postscipt:讀取文件,寫入PDF

我的PostScript代碼:

/grabdate { 


linehold ([) search { pop pop   % get everything after brackets 
(]) search {exch pop exch pop   % get everything before brackets 

== flush 

} {pop} ifelse 
} {pop} ifelse 
} def 


/strrx 256 string def     % temp line stash 
/filename (C:\\path\\to\\file.txt) def 

filename (r) file /myworkfile exch def % name of opened file 

{myworkfile strrx readline {/linehold exch store grabdate} 
{myworkfile closefile exit} ifelse 

} loop 

在命令提示符下使用的Ghostscript我發出命令:

gswin32c \ 
    -q \ 
    -dNOPAUSE \ 
    -dBATCH \ 
    -sOutputFile=out.pdf \ 
    -sDEVICE=pdfwrite myfile.ps 

的PostScript代碼部分的工作,因爲它輸出的正確解析「日期」行到標準輸出(因爲== flush),但我的問題是,我似乎無法得到「grabdate」操作將相同的「日期」字符串寫入PDF,而不是標準輸出。是否有一組PostScript命令可用於執行此操作?我在這裏錯過了什麼?

任何幫助表示讚賞。

回答

3

在「==」操作者特別將輸出發送到標準輸出,它不是一個「標記operarator,即它使得在輸出頁面上沒有標記。

Ghostscript的讀取PostScript和解釋程序,任何標記操作被作爲圖形基元輸出到輸出裝置,並且該裝置決定如何處理它。在pdfwrite的情況下,它將相當於PostScript的PDF標記操作寫入輸出文件。

顯然,非標記符不產生圖元,所以他們不會傳遞到設備。

如果你想讓你的'grabdate'例程在頁面上寫文本,那麼你將不得不選擇一種字體,(可能重新編碼它)縮放它,設置當前點,然後使用show操作符發送文本。你將不得不跟蹤當前的點,如果移動頁面邊界採取行動外(重新定位,或發出SHOWPAGE,並開始了新的一頁)

你應該看的PostScript運營商; findfont,scalefont,selectfont,setfont程序,通過MoveTo(及其變種rmoveto)當前點,stringwidth,並顯示運營商的整個家庭(秀,widthshow,a顯示,awidthshow,cshow,kshow,xshow,yshow,xyshow,glyphshow)。

您的當前程序在許多PostScript解釋程序中不會「起作用」(在生成任何輸出的意義上),因爲您永遠不會放出showpage。你也應該這樣做。