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

一、 合并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

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值