Постскриптум: Чтение файла, запись в pdf

Я пытаюсь разобрать файл .txt, используя PostScript с интерпретатором Ghostscript. Файлы .txt представляют собой файлы журналов, из которых мне нужно извлечь отметку даты. В файле будет строка типа «дата: [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), но моя проблема в том, что я не могу заставить операцию «grabdate» записать ту же самую «дату». string в PDF, а не в стандартный вывод. Есть ли набор команд PostScript, которые я могу использовать для этого? Что мне здесь не хватает?

Любая помощь приветствуется.


person justbrown    schedule 03.06.2013    source источник


Ответы (1)


Оператор '==' специально отправляет вывод на стандартный вывод, это не оператор маркировки, то есть он не делает меток на выходной странице.

Ghostscript читает PostScript и интерпретирует программу, любые операции маркировки передаются в виде графических примитивов на устройство вывода, и устройство решает, что с этим делать. В случае pdfwrite он записывает операцию маркировки PDF, эквивалентную операции PostScript, в выходной файл.

Очевидно, что немаркирующие операторы не создают графических примитивов, поэтому они не передаются устройству.

Если вы хотите, чтобы ваша подпрограмма 'grabdate' писала текст на странице, вам нужно будет выбрать шрифт (возможно, перекодировать его), масштабировать его, установить текущую точку, а затем вывести текст с помощью оператора show. Вам нужно будет отслеживать текущую точку, и если она выйдет за пределы страницы, примите меры (измените положение или создайте показ страницы и начните новую страницу).

Вы должны посмотреть на операторы PostScript; findfont, scalefont, selectfont, setfont, moveto (и его вариант rmoveto), currentpoint, stringwidth и все семейство операторов отображения (show, widthshow, ashow, awidthshow, cshow, kshow, xshow, yshow, xyshow, glyphshow).

Ваша текущая программа не будет "работать" (в смысле создания какого-либо вывода) на многих интерпретаторах PostScript в ее нынешнем виде, потому что вы никогда не выдаете showpage. Ты тоже должен это сделать.

person KenS    schedule 04.06.2013