后记:阅读文件,写信给pdf

时间:2013-06-03 15:08:02

标签: pdf file-io ghostscript postscript

我正在尝试使用带有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命令来执行此操作吗?我在这里缺少什么?

任何帮助表示感谢。

1 个答案:

答案 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。你也应该这样做。