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

File 在pdf文件的第一页添加文本,file,pdf,text,add,ghostscript,File,Pdf,Text,Add,Ghostscript,我正在尝试向pdf文件中添加文字注释(而不是注释)。 我创建了一个date.ps文件,其中包含文本注释: %! /Arial findfont 30磅 setfont 新路径 10720移动到 (2013年1月5日付款)展会 展示页 我启动shell命令,其中$I=要标记的pdf文件的名称: gs-q-dNOPAUSE-dSAFER-dBATCH-sOutputFile=$RFP/$DOMAINE/$NEWNAME-sDEVICE=pdfwrite-sPAPERSIZE=a4 date.ps$

我正在尝试向pdf文件中添加文字注释(而不是注释)。 我创建了一个date.ps文件,其中包含文本注释: %! /Arial findfont 30磅 setfont 新路径 10720移动到 (2013年1月5日付款)展会 展示页

我启动shell命令,其中$I=要标记的pdf文件的名称: gs-q-dNOPAUSE-dSAFER-dBATCH-sOutputFile=$RFP/$DOMAINE/$NEWNAME-sDEVICE=pdfwrite-sPAPERSIZE=a4 date.ps$i

这是可行的,但它创建了一个新的空白第一页,仅文本为“2013年1月5日付款”

我没有发现在原始pdf的第1页上覆盖文本的技巧


你能帮我一下吗?你可以使用免费的:

比如说,

cpdf -add-text "PAID on 5.1.2013" -topleft 100 -font "Helvetica" -font-size 30 in.pdf -o out.pdf

因为您的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
%!
>设置页面设备

适合我。

由于
cpdf
有一个奇怪的商业使用许可证,我试图找到一个替代方案。这里有一个(您需要安装
enscript
ps2pdf
和(
pdftk
qpdf
)。其思想就是使用
enscript
从文本创建
.ps
,然后使用
ps2pdf
.ps
转换为
.pdf
,然后使用
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版本

echo "I will be stamped on top of the page" | enscript -B -f Courier-Bold16 -o- | ps2pdf - | pdftk input.pdf stamp - output output.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" --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
有关更多选项,请参阅文档


注意:
mktemp
仅用于创建一个临时文件以提供一行解决方案,因为
qpdf
不接受来自
stdin

的输入,我使用的是synology NAS,我没有这样的命令。我可能会安装一个名为xpdf 3.02-1的工具包,你认为它能帮上忙吗?我在windows下试用过,这非常有用,效果很好。问题是我使用的NAS没有编译版本,而且我的编译知识太差了!nix包管理器有它的编译版本,你可以用
sh安装nix。不工作,我用ps文件得到同样的结果:%/ArayFiffFoad 30 StaveFoNT StutsNePATH 10 720 MOVET(Paye PAR UBS LE 16.092013)展示,因为它在PDF页面下,它做了一个隐式的ErasPage并填充了白色……也许您可以帮助我更多,您能通过电子邮件与我联系吗?当然,如果您向我提出解决方案,我会为您花费的时间付费。“setpagedevice”您需要在“…”部分填写完整的标记操作。每个页面后都会调用EndPage,此代码测试原因代码以查看其“showpage”(即0),如果是,则测试页面计数以查看其1是否运行代码。非常感谢,这几乎就是我要查找的内容。
但是当我使用2页的pdf时,我得到1页空,第1页对应于pdf的第1页,第三个是空的,第四个用我的文字回复第二个。以下是我的ps文件的完整内容:>setpagedevice。使用gs的shell脚本是:cd/volume1/DATA/A_PAYER gs-q-dNOPAUSE-dSAFER-dBATCH-sOutputFile=./OUT.pdf-sDEVICE=pdfwrite-sPAPERSIZE=a4 datex.ps./IN.pdf