我有一个基础pdf文件,并希望使用ghostscript和pdfmark将标题更新为中文(UTF-8),如下所示
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=result.pdf base.pdf pdfmarks
pdfmarks文件(编码 UTF-8无BOM )低于
[ /Title (敏捷开发)
/Author (Larry Cai)
/Producer (xdvipdfmx (0.7.8))
/DOCINFO pdfmark
当我检查result.pdf
标题更改为æŁ‘æ“·å¼•å‘
请给我提示如何解决此问题,gs
命令或pdfmark中是否有任何参数?
答案 0 :(得分:4)
PDF参考指出文档信息字典中的标题条目是“文本字符串”类型。文本字符串定义为使用带有字节顺序标记的PDFDocEncoding 或 UTF-16BE(参见1.7 PDF参考手册的第158页)。
因此,如果没有BOM,则无法使用UTF-8指定标题。
我想如果你用一个使用带有BOM的UTF-16BE定义内容的字符串替换Title字符串,那么它将正常工作。我建议您使用十六进制字符串而不是常规PostScript字符串来指定数据,只是为了方便使用。
答案 1 :(得分:0)
关注pdfmark for docinfo metadata in pdf is not accepting accented characters in Keywords or Subject
我使用此函数从utf-8为info.txt创建字符串,供gs命令使用。
function str_in_pdf($str){
$cmd = sprintf("echo '%s'| iconv -t utf-16 |od -x -A none",$str);
exec($cmd,$out,$ret);
return "<" . implode("",$out) .">";
}
答案 2 :(得分:0)
使用邱超文的想法,我的解决方案是下一个。通过BOM获取带有材料的UTF-16BE字符串
echo -n '(敏捷开发)' | iconv -t utf-16 |od -x -A none | tr -d ' \n' | sed 's/./\U&/g;s/^/</;s/$/>/'
您将获得<FEFF0028654F63775F0053D10029>
。将其替换为标题。
/Title <FEFF0028654F63775F0053D10029>