Ran*_*ber 12 unix pdf pdf-generation postscript ghostscript
我正在开发一个UNIX系统,我想将数千个PDF文件合并到一个文件中以便打印它.我不知道他们提前有多少页.
我想双面打印,这样两个文件就不会在同一页面上.
因此,我将合并文件对齐,使得每个文件将以奇数页开始,如果下一个要写的页是偶数页,则将添加空白页.
Chr*_*her 10
这是我使用的解决方案(它基于@ Dingo的基本原理,但使用更简单的方法进行PDF操作):
首先,我在某处创建一个带有单个空白页的PDF文件,例如"/path/to/blank.pdf".
然后,从包含我所有pdf文件的目录中,运行一个小脚本,将blank.pdf文件附加到每个带有奇数页码的pdf:
#!/bin/bash
for f in *.pdf; do
let npages=$(pdfinfo "$f"|grep 'Pages:'|awk '{print $2}')
let modulo="($npages %2)"
if [ $modulo -eq 1 ]; then
pdftk "$f" "/path/to/blank.pdf" output "aligned_$f"
else
cp "$f" "aligned_$f"
fi
done
Run Code Online (Sandbox Code Playgroud)
现在,所有"aligned_"文件都有偶数页码,我可以使用它们加入它们
pdftk aligned_*.pdf output result.pdf
Run Code Online (Sandbox Code Playgroud)
如果你从另一个角度来看这个问题,你的问题会更容易解决
\n\n为了获得这一点,在打印时,第二个pdf 文件的第 1 页将不会附加到同一张纸上第一个pdf 文件的最后一页,并且更一般地,后续 pdf 文件的第一页将不会打印在第二个 pdf 文件的背面与先前 pdf 文件最后一页的同一张纸
\n\n您需要仅向具有奇数页数的 pdf 文件选择性添加一个空白页
\n\n我编写了一个名为abbblankifneeded的简单脚本,您可以将其放入一个文件中,然后复制到/usr/bin或/usr/local/bin
\n\n然后使用此语法在包含 pdf 的文件夹中调用
\n\nfor f in *.pdf; do addblankifneeded $f; done
该脚本在页数为奇数的 pdf 文件末尾添加一个空白页,跳过页数已经为偶数的 pdf 文件,然后将所有 pdf 文件合并为一个
\n\n要求: pdftk、pdfinfo
\n\n注意:根据您的 bash 环境,您可能需要在脚本的第一行将 sh 解释器替换为 bash 解释器
\n\n#!/bin/sh\n#script to add automatically blank page at the end of a pdf documents, if count of their pages is a not a module of 2 and then to join all pdfs into one\n#\n# made by Dingo\n#\n# dokupuppylinux.co.cc\n#\n#http://pastebin.com/u/dingodog (my pastebin toolbox for pdf scripts)\n#\nfilename=$1\naltxlarg="`pdfinfo -box $filename| grep MediaBox | cut -d : -f2 | awk \'{print $3 FS $4}\'`"\necho "%PDF-1.4\n%\xc2\xb5\xc3\xad\xc2\xae\xc3\xbb\n3 0 obj\n<<\n/Length 0\n>>\nstream\nendstream\nendobj\n4 0 obj\n<<\n/ProcSet [/PDF ]\n/ExtGState <<\n/GS1 1 0 R\n>>\n>>\nendobj\n5 0 obj\n<<\n/Type /Halftone\n/HalftoneType 1\n/HalftoneName (Default)\n/Frequency 60\n/Angle 45\n/SpotFunction /Round\n>>\nendobj\n1 0 obj\n<<\n/Type /ExtGState\n/SA false\n/OP false\n/HT /Default\n>>\nendobj\n2 0 obj\n<<\n/Type /Page\n/Parent 7 0 R\n/Resources 4 0 R\n/Contents 3 0 R\n>>\nendobj\n7 0 obj\n<<\n/Type /Pages\n/Kids [2 0 R ]\n/Count 1\n/MediaBox [0 0 595 841]\n>>\nendobj\n6 0 obj\n<<\n/Type /Catalog\n/Pages 7 0 R\n>>\nendobj\n8 0 obj\n<<\n/CreationDate (D:20110915222508)\n/Producer (libgnomeprint Ver: 2.12.1)\n>>\nendobj\nxref\n0 9\n0000000000 65535 f\n0000000278 00000 n\n0000000357 00000 n\n0000000017 00000 n\n0000000072 00000 n\n0000000146 00000 n\n0000000535 00000 n\n0000000445 00000 n\n0000000590 00000 n\ntrailer\n<<\n/Size 9\n/Root 6 0 R\n/Info 8 0 R\n>>\nstartxref\n688\n%%EOF" | sed -e "s/595 841/$altxlarg/g">blank.pdf\npdftk blank.pdf output fixed.pdf\nmv fixed.pdf blank.pdf\npages="`pdftk $filename dump_data | grep NumberOfPages | cut -d : -f2`"\nif [ $(( $pages % 2 )) -eq 0 ]\n then echo "$filename has already a multiple of 2 pages ($pages ). Script will be skipped for this file" >>report.txt\n else\npdftk A=$filename B=blank.pdf cat A B output blankadded.pdf\nmv blankadded.pdf $filename\npdffiles=`ls *.pdf | grep -v -e blank.pdf -e joinedtogether.pdf| xargs -n 1`; pdftk $pdffiles cat output joinedtogether.pdf\nfi\nexit 0\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3758 次 |
| 最近记录: |