2013-06-03 101 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。你也应该这样做。