我正在尝试使用带有Ghostscript解释器的PostScript解析.txt文件。 .txt文件是我需要从中提取日期戳的各种日志文件。文件中会有一行,例如“date:[01-May-2011 06:41:52]”。我试图简单地输出“01-May-2011 06:41:52”部分(没有括号等)到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
)但我的问题是,我似乎无法获得“抓取”操作将相同的“日期”字符串写入PDF,而不是标准输出。我可以使用一组PostScript命令来执行此操作吗?我在这里缺少什么?
任何帮助表示感谢。
答案 0 :(得分:3)
' =='运算符专门将输出发送到stdout,它不是标记操作符,即它在输出页面上没有标记。
Ghostscript读取PostScript并解释程序,任何标记操作都作为图形基元提供给输出设备,设备决定如何处理它。在pdfwrite的情况下,它将PDF标记操作(相当于PostScript文件)写入输出文件。
显然,非标记运算符不会生成图形基元,因此它们不会传递给设备。
如果你想拥有自己的“抓住时间”。例程在页面上写文本然后你必须选择一种字体(可能重新编码)缩放它,设置当前点然后使用show运算符发出文本。您将必须跟踪当前点,如果它移动到页面边界之外采取行动(重新定位,或发出显示并开始新页面)
你应该看一下PostScript运算符; findfont,scalefont,selectfont,setfont,moveto(及其变体rmoveto)currentpoint,stringwidth和整个show运算符族(show,widthshow,ashow,awidthshow,cshow,kshow,xshow,yshow,xyshow,glyphshow)。
您当前的计划不会工作' (在产生任何输出的意义上)就像许多PostScript解释器一样,因为你永远不会发出一个showpage。你也应该这样做。