我正在尝试使脚本将几行文本添加到PDF表单中。我无法控制表单的创建并且它不可编辑,但我发现问题“can I use Ghostscript to overlay a text (fax) header onto a PDF and/or TIFF?”的答案几乎解决了我的问题。除了我偶尔需要包装插入的文本,以便它分成两行。 我事先知道目标“盒子”的宽度。
我目前正在使用带有pdfwrite的GhostScript,例如:
gs -o /tmp/desc.$$.pdf -sDEVICE=pdfwrite -c "/Helvetica findfont 9 scalefont setfont" -c "87 328 moveto ($2) show showpage"
答案 0 :(得分:0)
简短的回答是'不',因为PostScript不能那样工作。您需要自己知道并跟踪PostScript程序中对象的位置和大小。
但是...... PostScript 是一种编程语言,所以你可以编写一个PostScript程序来实现这一目标,我希望在这里搜索一下就可以得到一些答案。
否则,搜索comp.lang.postscript UseNet新闻组档案将会启动确定文本字符串宽度的方法,并将其缩短直至适合。
答案 1 :(得分:0)
感谢KenS给了我希望。我去了新闻组,根据我在http://computer-programming-forum.com/36-postscript/509be34895135813.htm发现的内容,我在这里给出了一个MWE:
DESCRIPTION="This Text is so long that I decided to break it into multiple lines. "
XCOORD=88
YCOORD=328
TEXTWIDTH=100
read -d '' WRAPFUNCTION << EOF
/Helvetica findfont 9 scalefont setfont
/wordbreak ( ) def
/linewidth $TEXTWIDTH def
/cwz {/curwidth 0 def} def
cwz
/nlwrap { /y y 12 sub def x y moveto nextword show ( ) show } def
/wrap { /text exch def
{text wordbreak search
{/nextword exch def pop
/text exch def
/wordwidth nextword stringwidth pop def
/breakwidth wordbreak stringwidth pop def
curwidth wordwidth add linewidth gt
{nlwrap /curwidth wordwidth breakwidth add def}
{nextword show ( ) show /curwidth curwidth wordwidth add
breakwidth add def }
ifelse
}
{pop exit}
ifelse
}loop
}def
/x $XCOORD def
/y $YCOORD def
x y moveto ($DESCRIPTION) wrap
showpage
EOF
gs -o desc.pdf -sDEVICE=pdfwrite -c "$WRAPFUNCTION"
该函数基本上逐字逐句,如果下一个单词超过TEXTWIDTH则执行CRLF。迭代算法很简单:注意输入文本和输入文本的空间。