
我有一個包含數百頁的大型 PDF 檔案。每一個n頁麵包含相同的特定單字和相同的圖像。我將稱這些為“特殊頁面”。
這些的位置特別頁面是不可預測的。這意味著我的 PDF 可以有 5 個普通頁面,那麼第 6 頁是特別頁面然後是 2 個普通頁面,然後是一個特別頁面,然後 12 正常,然後 2特別頁面等等等等
我需要一種方法來自動列印這些 PDF 文件,以便所有正常頁面都列印在印表機的紙匣 1 上,並且所有特別頁面到紙盤 2 上(因為我需要特定的紙張用於普通紙張,而需要不同的紙張用於普通紙張)特別頁面)。
有誰知道是否有辦法一次列印整個 PDF 文件並路由特別頁面根據特定的印表機托盤
- 對它們包含的特定單字進行文字搜索
- 或有一個圖像的事實
- 甚至頁面上的顏色數量(特別頁面圖像包含比其他頁面更多的顏色)
我需要定期執行此操作(每月一次)。
我願意接受任何建議。特定軟體、Powershell 或其他程式語言。有任何想法嗎?
開源解決方案將是最好的。 Windows、Mac 或 Linux 對我來說都是可行的選擇。
到目前為止我找到了一個解決方案,那就是理光列印與共享但是一個包含 5 年維護的許可證大約需要 2500 美元。
答案1
你可以看看量子PDF這是一個用於操作 PDF 檔案的開源工具。使用它,您可以將文件拆分為多個頁面,隔離特定頁面,然後在將單獨的文件傳送到特定印表機之前重新組合這些頁面。或者,您可以根據特定屬性(例如,如果它們包含映像)或檔案或頁面長度等來隔離頁面。另一個程式的這些特徵。
該工具可以在 Windows 或 Linux 機器上運行。
為了回應 @MrUpsidown 對我的建議的評論,我在這裡提供了一個範例 shell 腳本,它接受一個輸入文件,並將其暫時分割以評估每個頁面的大小(以位元組為單位)。然後,使用分割的頁面來建立大的「特殊頁面」和小的「常規頁面」的頁面列表,然後建立cups lpr 命令以將這些頁面傳送到印表機。可以修改腳本來檢查每個頁面的文字字串(例如使用 pdftotext)或某些其他獨特屬性。不管怎樣,一個清單被送到托盤上部,另一個清單被送到托盤下部。然後它會自行清理。該腳本需要進行調整以滿足您的需求,並針對生產使用進行強化,但我認為它應該概述我建議的基本方法。
在 Linux 機器(或 Mac)上安裝 qpdf 後,您可以透過建立一個檔案(我們稱之為「splitpages」)來執行腳本,然後透過 使其可執行chmod 755
,然後透過呼叫 來執行腳本splitpages filename.pdf
。目前它只會列印出可以透過將腳本中的“echo”替換為“eval”來啟動的命令。執行這樣的腳本的一個例子
splitpages samplefile.pdf
是,samplefile.pdf 有 4 頁(3 個正常頁面,第四個特殊頁面),它會列印出這些字串
lpr -o media=Upper -o page-ranges=1,2,3, samplefile.pdf
lpr -o media=Lower -o page-ranges=4, samplefile.pdf
當然其他的東西需要調整以滿足您的需求
#!/bin/bash
# print pages based on page size
# greater than minimumsize goes to tray1
# else goes to tray2
minimumsize=500000
infile=$1
if [ ! -f "$infile" ]; then
echo "no input file"
exit
fi
# location of temporary files used to identify page characteristics
outfile=/tmp/test
rm -f ${outfile}*
# split the file so we can assess lengths
qpdf $infile --split-pages $outfile
pnum=0
bigpage=
smallpage=
for page in ${outfile}*
do
((pnum++))
actualsize=$(wc -c <"$page")
if [ $actualsize -ge $minimumsize ]; then
#echo size is over $minimumsize bytes
bigpage="${bigpage}${pnum},"
else
#echo size is under $minimumsize bytes
smallpage="${smallpage}${pnum},"
fi
done
# replace the echo command with the eval command to actually execute the strings
lprc1="lpr -o media=Upper -o page-ranges=$bigpage $infile"
echo $lprc1
lprc2="lpr -o media=Lower -o page-ranges=$smallpage $infile"
echo $lprc2
rm -f ${outfile}*
答案2
Adobe Acrobat Pro 以及 AutoSplit Pro 插件 (149 美元)可以做到。更多資訊可在文章中找到 使用文字搜尋從 PDF 文件中提取頁面。
您也可以使用安裝在 Acrobat 的 JavaScript 資料夾之一中的文件級 JavaScript 自行自動化此操作,並建立執行 JavaScript 的操作。
有關範例,請參閱文章 根據內容擷取 PDF 頁面。