我正在尝试将文本注释(不是注释)添加到pdf文件中。 我创建了一个包含文本注释的date.ps文件: %! / Arial findfont 30 scalefont setfont程序 NEWPATH 10 720 moveto (2013年5月5.1日付款)显示 SHOWPAGE
我启动shell命令,其中$ i =要标记的pdf文件的名称: gs -q -dNOPAUSE -dSAFER -dBATCH -sOutputFile = $ RFP / $ DOMAINE / $ NEWNAME -sDEVICE = pdfwrite -sPAPERSIZE = a4 date.ps $ i
这样可行,但它会创建一个新的第一页空白,单独使用文本“仅在5.1.2013上付费”。
我找不到覆盖原始pdf第一页上文字的技巧。
你能帮帮我吗
答案 0 :(得分:1)
您可以使用免费的cpdf command line tools:
直接对PDF执行此操作例如,
cpdf -add-text "PAID on 5.1.2013" -topleft 100 -font "Helvetica" -font-size 30 in.pdf -o out.pdf
答案 1 :(得分:0)
由于PostScript执行了一个showpage,因此在标记后会弹出第一页,因此剩余的内容将在第二页和后续页面上显示。如果您没有执行showpage,那么您制作的标记将位于第一页上,第一个PDF页面将被绘制在“顶部”上。
更复杂的代码可以使用BeginPage和EndPage在页面内容上方和下方绘制,并在指定页面上执行此操作。
[稍后补充]
试试这个:
%!
<<
/EndPage
{
0 eq
{
0 eq
{
/Arialabold findfont 22 scalefont setfont newpath 250 820 moveto 1 0 0 setrgbcolor (PAYE PAR CCP LE $DATEPMT) show
} if
true
}
{
pop false
} ifelse
} >> setpagedevice
适合我。
答案 2 :(得分:0)
由于cpdf
拥有用于商业用途的奇怪许可证,因此我尝试寻找替代方法。这是一个(您需要安装enscript
,ps2pdf
和(pdftk
或qpdf
)。这个想法只是使用enscript
从文本创建一个.ps
,然后使用.ps
将此.pdf
转换为ps2pdf
,然后进行堆栈放在pdftk
或qpdf
...的原始pdf顶部。
pdtfk版本:
echo "I will be stamped on top of the page" | enscript -B -f Courier-Bold16 -o- | ps2pdf - | pdftk input.pdf stamp - output output.pdf
qpdf版本:
如果您希望文本在所有页面上重复出现:
tmpfile=$(mktemp) && echo "I will be stamped on top of the page" | enscript -B -f Courier-Bold16 -o- | ps2pdf - "$tmpfile" && qpdf out_merge.pdf --overlay "$tmpfile" --repeat=1-z -- out_oneline.pdf
如果您只想将其放在首页上
tmpfile=$(mktemp) && echo "I will be stamped on top of the page" | enscript -B -f Courier-Bold16 -o- | ps2pdf - "$tmpfile" && qpdf out_merge.pdf --overlay "$tmpfile" -- out_oneline.pdf
有关更多选项,请参阅文档。
NB:mktemp
仅用于创建临时文件以提供单线解决方案,因为qpdf
不接受来自stdin
的输入