コンテンツに基づいてPDFページを特定のプリンタトレイにルーティングする

コンテンツに基づいてPDFページを特定のプリンタトレイにルーティングする

数百ページもの大きなPDFファイルがあります。同じページには同じ単語と同じ画像が載っています。私はこれを「特別ページ」

これらの位置特別ページ予測できません。つまり、私のPDFには、例えば5つの通常のページがあり、6ページ目は特別ページ次に通常のページが2ページ、そして再び特別ページ、その後12通常、その後2特別ページなどなど。

これらのPDFファイルの印刷を自動化して、すべての通常のページがプリンタの用紙トレイ1に印刷され、特別ページ用紙トレイ2にセットします(通常用紙と、特別ページ)。

PDFファイル全体を一度に印刷してルーティングする方法があるかどうか知っている人はいますか?特別ページ特定のプリンタトレイに

  • 含まれる特定の単語のテキスト検索
  • あるいはイメージがあるという事実
  • あるいはページ上の色の数(特別ページ画像には他のページよりも多くの色が含まれています)

これを定期的に(月に 1 回)実行する必要があります。

どのような提案でも歓迎します。特定のソフトウェア、Powershell、またはその他のプログラミング言語。何かアイデアはありますか?

オープンソースのソリューションが最適です。Windows、Mac、Linux はすべて私にとって実行可能なオプションです。

これまでに私が見つけた解決策は1つです。リコープリント&シェアしかし、5 年間のメンテナンス付きのライセンス 1 つが約 2,500 ドルです。より安価なソリューションやオープン ソース ソリューションが見つかると良いでしょう。

答え1

ぜひチェックしてみてください翻訳これは PDF ファイルを操作するオープンソース ツールです。これを使用すると、ファイルをページに分割し、特定のページを分離してから、それらのページを再結合してから、個別のファイルを特定のプリンターに送信できます。または、特定のプロパティ (画像が含まれているかどうかなど) に基づいてページを分離したり、ファイルまたはページの長さなどによってページを分離したりすることもできます。また、ファイル特性の JSON 表現を生成することもできるため、別のプログラムを使用して、それらの特性に基づいてファイルを分割するアルゴリズムを構築できます。

このツールは Windows または Linux マシンで実行できます。

私の提案に対する @MrUpsidown からのコメントに応えて、入力ファイルを受け取り、各ページのバイト サイズを評価するためだけに一時的に分割するサンプル シェル スクリプトをここに示します。分割されたページは、大きい「特別なページ」と小さい「通常のページ」のページ リストを作成するために使用され、次にそれらのページをプリンターに送信する cups lpr コマンドを作成します。スクリプトは、各ページのテキスト文字列 (たとえば、pdftotext を使用) またはその他の一意の属性を調べるように変更できます。いずれにしても、1 つのリストはトレイ Upper に、もう 1 つはトレイ Lower に送信されます。その後、スクリプトは後始末を行います。スクリプトは、ニーズを満たすために微調整する必要があり、実稼働用に強化する必要がありますが、私が提案した基本的な方法の概要を示すものになると思います。

Linux マシン (または Mac) に qpdf をインストールした後、ファイル (「splitpages」と呼ぶ) を作成してスクリプトを実行し、 で実行可能にしてからchmod 755、 を呼び出してスクリプトを実行しますsplitpages filename.pdf。現在は、スクリプト内の「echo」を「eval」に置き換えることでアクティブ化できるコマンドのみが出力されます。samplefile.pdf に 4 ページ (通常ページが 3 ページ、4 ページ目が特別ページ) がある場合にスクリプトを実行すると、 splitpages samplefile.pdf 次の文字列が出力されます。

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 フォルダーの 1 つにインストールされたドキュメント レベルの JavaScript を使用して、JavaScript を実行するアクションを作成することで、これを自分で自動化することもできます。

例については、記事をご覧ください。 コンテンツに基づいてPDFページを抽出する

関連情報