在pdf文件的第一页上添加文本

时间:2013-09-12 16:09:34

标签: file pdf text add ghostscript

我正在尝试将文本注释(不是注释)添加到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第一页上文字的技巧。

你能帮帮我吗

3 个答案:

答案 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拥有用于商业用途的奇怪许可证,因此我尝试寻找替代方法。这是一个(您需要安装enscriptps2pdf和(pdftkqpdf)。这个想法只是使用enscript从文本创建一个.ps,然后使用.ps将此.pdf转换为ps2pdf,然后进行堆栈放在pdftkqpdf ...的原始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的输入