根據內容將 PDF 頁面路由到特定的印表機托盤

根據內容將 PDF 頁面路由到特定的印表機托盤

我有一個包含數百頁的大型 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 頁面

相關內容