系统相关
首页 > 系统相关> > Linux下使用gs(GhostScript)命令合并PDF文件并添加目录的方法

Linux下使用gs(GhostScript)命令合并PDF文件并添加目录的方法

作者:互联网

 

 

Linux下使用gs(GhostScript)命令合并PDF文件并添加目录的方法

无名D小兵

于 2019-03-31 17:41:17 发布

3346
收藏 1
分类专栏: 文件处理 文章标签: pdfmark gs linux 合并pdf
版权

文件处理
专栏收录该内容
1 篇文章0 订阅
订阅专栏
一、 合并pdf
使用以下命令合并:
gs -q -sDEVICE=pdfwrite -dBATCH -sOUTPUTFILE=new.pdf -dNOPAUSE pdf_files pdfmark
其中:pdf_files指要合并的PDF文件,pdfmark是目录生成文件。pdf文件可以只指定一个,这样可以用来为pdf文件加目录。

二、 关于pdfmark
简单的pdfmark文件由若干行以下格式的内容组成:
[ /Ttile (string) /Count number /Page number /OUT pdfmark
其中:
/Title:标题名称,若标题名称含有空格,则标题应该用括号括起来。
/Count:标题下的分支数目,若无分支,此值为0,需要注意的是,若此值大于零,则此标题下的对应数量的标题都会被视为此标题的子标题。
/Page:条目指向的页码
/OUT:输出格式
这只是诸多pdfmark格式的其中一种,更多详情可自行谷歌搜索。此外pdfmark文件名可自由指定。

三、 关于中文标题
若要加的目录的标题包含中文,则要涉及到编码问题。默认情况下,linux使用的是UTF-8的编码格式,若pdfmnark文件的中文编码为该格式,则生成的目录中的中文将会变成乱码。因为Pdf文件并不支持UTF-8格式的中文标题,其支持的中文编码格式为带BOM的UTF-16BE和PdfdocEncoding两种,因此我们需要将中文标题的编码转换成上述两个格式之一,而其中,转为UTF-16BE相对简单一些。需要注意的是,我们只需要对标题进行转码,其他地方的编码需要保留。
具体的做法是,将中文标题转成带有BOM的UTF-16BE的格式,然后用16进制表示。可用以下命令实现:
echo -n ‘中文标题’ |iconv -t utf-16|od -x -A none|tr -d ' \n'|sed 's/./\U&/g;s/^/</;s/\$/>\n/'
转码完成后,用转码的结果替换pdfmark文件中的中文标题。最终生成的pdfmark条目是类似以下这样的:
[ /Title <FEFF0031002E00310020004B0056004D7684524D4E164ECA751F> /Count 0 /Page 24 /OUT pdfmark
其中,/Title一项的值已被转成用16进制表示的UTF-16BE编码格式。

PS:
在perl编程中,若要调用上述shell命令实现转码并读取结果,则应使用..调用方法而不能使用system调用方法

参考链接:
https://stackoverflow.com/questions/9188189/wrong-encode-when-update-pdf-meta-data-using-ghostscript-and-pdfmark
————————————————
版权声明:本文为CSDN博主「无名D小兵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010252464/article/details/88932221

标签:文件,中文,GhostScript,gs,格式,标题,pdfmark,Linux,pdf
来源: https://www.cnblogs.com/xiaojikuaipao/p/16504258.html