PDF格式的docinfo元数据的pdfmark不接受关键字或主题中的重音字符

时间:2010-06-09 21:17:42

标签: pdf pdf-generation postscript

我正在使用程序将元数据插入postscript文件中,并使用Adobe Distiller将其提取为pdf。我正在使用我从Thomas Merz's "Web Publishing with Acrobat-PDF"的在线章节中获取的代码:

/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse

[ /Title (mot accenté)

  /Author (mot accenté)

  /Subject (mot accenté)

  /Keywords (mot accenté) 

/DOCINFO pdfmark

当您查看生成的pdf中的元数据时,重音字符将变为“?”在主题和关键字字段中,但不是标题和作者字段。字符与cii 233

相同

我尝试用八进制编码(\ 351)替换它们,它们出现的相同(标题和作者没关系,主题和关键字搞砸了)。

文件编码是latin-1,unix eol

我在adobe论坛上发现了一个提及,但答案对我来说没有意义。

http://forums.adobe.com/message/1165593http://forums.adobe.com/thread/307687

我将编码更改为utf-8,二进制插入字符(在VIM中:<Ctrl-v> u00e9),没有变化。我尝试在几个地方插入BOM,但它没有用。

这是Acrobat Pro 9的Distiller(9.3.3177)

我没有注意到Acrobat Pro 7的这个问题。

有人知道在修改postscript文件时将重音字符放入所有元数据字段的解决方法,或者告诉我我做错了吗?

不同的字段不接受相同的字节似乎很奇怪。

可能相关的SO问题:Unicode in PDF

我正在嵌入所有字体。

5 个答案:

答案 0 :(得分:2)

你可以尝试使用UTF16-BE进行编码并使用254和255(thorn和y-dieresis)启动字符串吗?

答案 1 :(得分:1)

因此,您应该能够使用ANSI编码文件以及PDFDocEncoding集中的任何字符(法语重音字符都是),但这不起作用。

另一种方法是仍使用latin-1编码文件,但将Unicode字符以八进制形式放置(2个字节:\ xxx \ xxx)。并使用BOM:\ 377 \ 366

启动字符串

因此,上述主题字符串“motaccenté”必须翻译为:

/Subject (\377\376\155\000\157\000\164\000\040\000\141\000\143\000\143\000\145\000\156\000\164\000\351\000)

这很有效,但很糟糕。谁有更好的东西?

答案 2 :(得分:1)

您无需转义/编码 ALL 重音字符!

保留标准ASCII字符就足够了,只需混合使用特殊字符应出现的\ NNN符号。

以下Ghostscript命令创建两页PDF。它将有几乎空的页面,包括2个书签/轮廓,加上带重音的元数据。示例适用于Windows,在Unix / Linux上只使用gs并将行结束转义从DOS批处理^更改为unix shell的\

gswin32c.exe ^
 -sDEVICE=pdfwrite ^
 -o 2-empty-pages-with-bookmarks-and-accents-in-metadata.pdf ^
 -c "[/Creator(brains&smarts)/Author(pipitas)/Subject(m\350t accent\351)/Title(mot accent\352)/Keywords(ganz sch\353\353 bl\353\353\d!)/DOCINFO pdfmark" ^
 -c "[/Page 1 /View [/XYZ null null null] /Title (Page One) /OUT pdfmark" ^
 -c "[/Page 2 /View [/XYZ null null null] /Title (Page Two) /OUT pdfmark" ^
 -c "200 500 moveto /Helvetica findfont 100 scalefont setfont (One) show showpage 200 500 moveto (Two) show showpage quit"
  .

我希望最终解决您的问题“有人知道在修改postscript文件时将重音字符添加到所有元数据字段中的解决方法吗?”

答案 3 :(得分:1)

您的上一篇文章包含使用十六进制字符Unicode in PDF的良好提示(请参阅Mark Storer的反馈)

所以而不是

[ /Title (mot accenté)

你可以尝试

[ /Title <FFEF006D006F007400200061006300630065006E007400E9>`
等等......

可能有点笨拙,但是在shell脚本的帮助下,它帮助我将其他特殊字符添加到pdf书签中,例如'ä','õ','ü'。

答案 4 :(得分:0)

尽管这并没有直接回答你的问题,谷歌在搜索“pdf元数据重音”时已经引导我。

因此,对于其他人来说,知道您可以使用pdftk

更改pdf元数据可能很有用

要包含重音字符,请使用HTML CODE

我花了一些时间来弄清楚“Baçan”是如何显示为“Baħan”的,但那是 因为PDF元数据不接受UTF8。

JúlioVerne的元数据示例:

InfoKey: Author
InfoValue: J&#250;lio Verne

此外,我可以使用hexedit并手动将十六进制代码插入正确的位置。

é = HEX E9 HTML: &#233;
ç = HEX E7 HTML: &#231;
ú = HEX FA HTML: &#250;
ó = HEX F3 HTML: &#243;

等等。看看上面的表格。

我希望这可以帮助别人。