CUPSプリンタ/印刷ジョブをリバースエンジニアリングする方法は?

CUPSプリンタ/印刷ジョブをリバースエンジニアリングする方法は?

ローカルPDF印刷(CUPS)とGoogleクラウドプリントの間に品質の問題があります。 (GCPが良いです。CUPSを使用すると、間違ったサイズ、間違った文字、フォントが表示されますので、CUPSが何をしているのか疑問に思います!)

プリンタ自体は複数のフォーマットを扱うことができます:application / pdf(≥1.0、≤1.7)、image / jpeg、image / tiff、image / pwg-raster

数ヶ月間、私はさまざまな方法でCUPSにプリンタを追加してきましたが、CUPSがローカルネットワーク自体からプリンタを検出する「ドライバレス」方式も使用しました。

すべての場合でPDFを印刷するとエラーが発生します。正確ではありませんが、印刷は私には役に立ちません。結果:ページが約30%拡大され、2ページまたは3ページからフォントが混在し、文字が記号に変わり、段落が太字で印刷されます。

同じプリンタで Google Cloud Print で同じ PDF を印刷すると、効果が非常に良いです。 PDFをUSBスティックプリンタに直接送信することもお勧めします。 - 私のコンピュータでも同じように良い結果を印刷できることを願っています!

私の質問は次のとおりです

  • 各CUPSプリンタが実際のプリンタに送信される前に、自分のコンピュータでどのパイプラインを使用しているかを知りたいです。フォーマットを検出しますか?どのように? PDFに戻りますか?どのようなPPDを使用しますか?パイプラインはどのような他の決定を下し、どのような変換を行いますか?
  • 合格した印刷ジョブで知りたいです。 CUPSは何を検出しましたか?どんな変化を起こしますか?生成された中間出力はどこで入手できますか?

これまで、私はCUPSデバッグ/リバースエンジニアリングのための良いエントリポイントを見つけることができませんでした。私のもの私の心の中に質問があります)...

ベストアンサー1

あなたは鋭い精神を持っていて壁を登ることができる隠された輪を見せればいいので、質問の一部だけに答えます。

  1. 「どんな種類のPPDを使うのか?」

    印刷キューの場合printernameローカルにインストールされます(「raw」キューではない場合)。 PPDを使用してください。/etc/cups/ppd/printername.ppd

  2. 「形式を検出できますか?どうすれば?」

    はい、そうです。デバッグロギングを有効にすると(ラインLogLevel debug存在する/etc/cups/cupsd.conf)、線が見えるエラー履歴読む「自動的にファイルをインポート...」。 (ジョブが無言のタイプを宣言した場合、自動的に入力されません。lp -d printername -o document-format=application/pdf my.pdf.)

    さまざまなMIMEタイプの分類規則は、以下に定義されています。/usr/share/cups/mime.typesおよびサフィックスと同じディレクトリにある可能性がある他のファイル*.タイプ。 (また、独自のルールを入れて、カスタムフィルタで処理する必要があるカスタムMIMEタイプを定義することもできます...)

  3. 「他のどの決定が下され、パイプラインによってどのような変化が起こりますか?」

    1. PPDに次のいずれかで始まる行がない場合*cupsFilter:またはcupsFilter2:キーワードは、最終印刷デバイスがPostScriptプリンタであると仮定します。したがって、すべてをPostScriptに変換し、PostScriptに送信するわけではありません。

    2. 1 つ以上の行がキーワードで始まる場合*cupsFilter:または*cupsFilter2:この行では、印刷デバイスが使用できるMIMEタイプを読み取り、適切なフィルタチェーンを適用して対応するMIMEタイプを作成します。

    3. 特定のMIMEタイプを処理できるフィルタは、次のリストにリストされています。/usr/share/cups/mime.convsおよびサフィックスと同じディレクトリにある可能性がある他のファイル*.変換。 (これらのフィルタで処理したいMIMEタイプにカスタムフィルタを配置できます...)

    4. これ*.変換ファイルには、そのフィルタが使用および生成できる入力および出力MIMEタイプと、この変換で発生する仮想「コスト」(整数)の名前が割り当てられます。 CUPSが構築できるさまざまなフィルタチェーンに直面すると、総コストが最も低いフィルタチェーンがapplication/alpha選択されます。application/zeta

  4. 「再びPDFに変換されますか?」

    おそらくそうではありません。要求されない限り、必要なオリジナルPDFの印刷オプションを使用してください。 1枚に2ページ以上を印刷し、小冊子を印刷するためにページを並べ替えます。それからpdftopdfフィルタを適用して次のものに変換できます。application/pdf到着application/vnd.cups-pdf

  5. 「CUPSは何を検出しましたか?」

    上記を参照してください。 「autotype file」文字列を検索してください。/var/log/error_log:

    sudo grep -A 2 "Auto-typing file" /var/log/error_log
    
  6. 「どんな変化をもたらしますか?」

    よりerror_logもう一度、次を含む行を検索します。Started filter:

    sudo grep "Started filter" /var/log/error_log
    
  7. 「生成された中間出力はどこで取得できますか?」

    これを直接行うことはできません。中間形式を作成するには、CUPSの各フィルタに対して操作を実行する必要があります。 (私できるやってみてください。準備されたレシピがありますが、それを適用するには費用を支払う必要があります。 )

    したがって、中間出力を取得するのはおそらくあなたの範囲を超えているので、他のことを行うことができます。アナログフィルタチェーンCUPSはどんな職業にも採用します。

    マニュアルページを読むと、これを行う方法がわかります。cupsfilter。 CUPSがすべての印刷キューに使用するフィルタのみを一覧表示することもできます。

    cupsfilter           \
        --list-filters    \
        -d <printername>   \
        -i <inputmime/type> \
        -m <outputmime/type> \
        -o "number-up=4 page-ranges=3-5,7,11" \
         <filename>
    

おすすめ記事