PDFローカルプリント(CUPS)とGoogleクラウドプリンティングの品質に問題があります。GCPの方が優れています。CUPSを使用すると、サイズ、文字、フォントが正しくありません。そのため、 CUPSはあります!)
プリンターは、application/pdf(≥1.0、≤1.7)、image/jpeg、image/tiff、image/pwg-rasterの2つの形式をネイティブに処理できます。
何ヶ月にもわたってさまざまな方法でプリンターをCUPSに追加しましたが、CUPSがローカルネットワーク自体でプリンターを検出する「ドライバーレス」でも使用しました。
すべての場合で、PDFエラーで印刷されますが、完全ではありませんが、印刷は役に立たないものになります。何が起こるか:ページが2〜3ページから始まって、最大30%拡大され、フォントが取得されます混同、文字が記号に変わる、段落が太字で印刷されるなど...
同じプリンタでGoogleクラウドプリントを介して印刷すると、同じPDFが優れた結果になります。 PDFを使用してUSBスティックをプリンタに直接供給することも同様に優れています。–コンピュータからの印刷でも同じ結果を得たいです!
私の質問は次のとおりです。
これまでのところ、CUPSデバッグ/リバースエンジニアリングの適切なエントリポイントは見つかりませんでした(myの質問を念頭に置いて)...
私はあなたの質問の一部だけに答えています。あなたは壁を登るためにいくつかの隠されたフックを見せられるだけでよい鋭い心を使っているようです:
「どのPPDを使用しますか?」
Printqueue printername
がローカルにインストールされている場合(および「raw」キューでない場合)、PPD /etc/cups/ppd/printername.ppd
を使用します。
「フォーマットを検出しますか?どうやって?」
はい、そうです。デバッグログを有効にしている場合(/etc/cups/cupsd.confの行LogLevel debug
)、error_log reading "Auto-typing file .. 。 "。 (lp -d printername -o document-format=application/pdf my.pdf
のように、ジョブがすでにmimeタイプを示している場合、自動入力は行われません。)
さまざまなMIMEタイプを分類するためのルールは、/usr/share/cups/mime.typesおよび* .typesが付いた同じディレクトリにある他のすべてのファイルで定義されます。 (独自のルールをそこに配置して、独自のカスタムフィルターで処理する必要がある独自のカスタムMIMEタイプを定義することもできます...)
「パイプラインは他にどのような決定を下し、どのような変換を行っていますか?」
*cupsFilter:
またはcupsFilter2:
キーワードのいずれかで始まる行がPPDにない場合、PPDは最終的な印刷デバイスがPostScriptプリンターであると想定します。したがって、すべてをPostScriptに変換しますが、PostScriptとして送信されることはありません。
キーワード*cupsFilter:
または*cupsFilter2:
で始まる行が1つ以上ある場合、これらの行から、印刷デバイスが使用できるMIMEタイプを読み取り、適切なフィルターチェーンを使用してそれぞれのMIMEタイプを生成します。 。
特定のMIMEタイプを処理できるフィルターは、/ usr/share/cups/mime.convsと、同じディレクトリに接尾辞*.convsが付いている可能性のある他のすべてのファイルにリストされています。 (これらのフィルターで処理したいMIMEタイプ用に独自のカスタムフィルターを配置できます...)
* .convsファイルは、それぞれのフィルターが消費および生成できる入力と出力のMIMEタイプ、およびそのような変換によって発生する仮想「コスト」(整数のみ)に名前を付けます。 CUPSがapplication/alpha
からapplication/zeta
に移動するために構築できるさまざまなフィルタリングチェーンに直面した場合、合計コストが最も低いものを選択します。
"再びPDFに再変換されますか?"
おそらくない。オリジナルに使用する印刷オプションを要求した場合を除き、PDF必要な場合:ある範囲のページのみを印刷する、1枚の用紙に2ページ以上を印刷する、拡大縮小する;ブックレット印刷などのためにページを再編成します。次に、pdftopdf
フィルターを適用して、application/pdf
をapplication/vnd.cups-pdf
に変換します。
「CUPSは何を検出しましたか?」
上記を参照:/var/log/error_log
で文字列「自動入力ファイル」を検索します。
Sudo grep -A 2 "Auto-typing file" /var/log/error_log
「それはどのような変換をしましたか?」
error_log
をもう一度参照し、Started filter
を含む行を検索します。
Sudo grep "Started filter" /var/log/error_log
「生成された中間出力はどこで取得できますか?」
これを直接行うことはできません。中間形式を書き出すには、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>
あなたの質問はあなたが使っているOSを特定していません。私の答えは、Debian 9.6と、「PDFダイレクトプリント」を処理するように指定されているネットワーク接続された京セラFS-1350DNです。カップがPDFファイルを改ざんする必要はありませんshould。
確認するには、cups-debuggingを有効にする必要があります。残念ながら、_cupsctl --debug-logging
_(rootとして)はエラーメッセージ_cupsctl: Forbidden
_で失敗しました。ファイル/etc/cups/cupsd.confに_LogLevel debug
_を設定してcupsdを再起動した後、_lpr scale.pdf
_を使用して印刷ジョブを送信しました。このファイルには、CADプログラム(グレースケールなし)からのライングラフィックが含まれ、100%のスケールで印刷されました。
/ var/log/cups/error_logの関連する行(ジョブ全体で300行)は次のようになります。
_⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] Request file type is application/pdf.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] 3 filters for job:
D [11/Dec/2018:17:50:02 +0100] [Job 319] pdftopdf (application/pdf to application/vnd.cups-pdf, cost 66)
D [11/Dec/2018:17:50:02 +0100] [Job 319] pdftops (application/vnd.cups-pdf to application/vnd.cups-postscript, cost 100)
D [11/Dec/2018:17:50:02 +0100] [Job 319] - (application/vnd.cups-postscript to printer/fs1350, cost 0)
⋮
I [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter /usr/lib/cups/filter/pdftopdf (PID 16570)
I [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter /usr/lib/cups/filter/pdftops (PID 16571)
I [11/Dec/2018:17:50:02 +0100] [Job 319] Started backend /usr/lib/cups/backend/socket (PID 16572)
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] pdftops - copying to temp print file \"/tmp/040bb5c158ce7\"
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16570 (/usr/lib/cups/filter/pdftopdf) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] 319 h scale.pdf 1 \'finishings=3 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-Host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf\'
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] Running command line for gs: gs -q -dNOPAUSE -dBATCH -dSAFER -dNOMEDIAATTRS -sDEVICE=ps2write -sOUTPUTFILE=%stdout -dLanguageLevel=3 -r1200 -dCompressPages=false -dCompressFonts=false -dNoT3CCITT -dNOINTERPOLATE -c \'save pop\' -f /tmp/040bb5c158ce7
D [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter gs (PID 16577)
D [11/Dec/2018:17:50:02 +0100] [Job 319] Started post-processing (PID 16578)
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter pstops (PID 16579)
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] %!PS-Adobe-3.0
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%BoundingBox: 0 0 595 842
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%HiResBoundingBox: 0 0 595.00 842.00
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%Creator: GPL Ghostscript 920 (ps2write)
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%LanguageLevel: 2
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%CreationDate: D:20181211175002+01\'00\'
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%Pages: 1
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%EndComments
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16577 (gs) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16578 (Post-processing) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16579 (pstops) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16571 (/usr/lib/cups/filter/pdftops) exited with no errors.
⋮
_
- (application/vnd.cups-postscript to printer/fs1350, cost 0)
を含む行は、cupsがポストプロセッサー(別名プリンタードライバー)/etc/cups/ppd/fs1350.ppdを使用していることを示しています。同じプロセスの別のビューは、ps
-コマンドで取得できます。の出力の抜粋
_while true ; do date +'%N'>> log; ps axSfu | fgrep -v grep | egrep '^lp[[:space:]]|/usr/sbin/cupsd' >> log ; done
_
それは
_⋮
root 15796 0.1 0.1 171440 8536 ? Ssl 17:49 0:00 /usr/sbin/cupsd -l
lp 16571 0.0 0.0 77632 5728 ? S 17:50 0:00 \_ fs1350 319 h scale.pdf 1 finishings=3 number-up=1 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-Host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
lp 16577 0.0 0.2 129760 20836 ? R 17:50 0:00 | \_ gs -q -dNOPAUSE -dBATCH -dSAFER -dNOMEDIAATTRS -sDEVICE=ps2write -sOUTPUTFILE=%stdout -dLanguageLevel=3 -r1200 -dCompressPages=false -dCompressFonts=false -dNoT3CCITT -dNOINTERPOLATE -c save pop -f /tmp/040bb5c158ce7
lp 16578 0.0 0.0 77632 924 ? S 17:50 0:00 | \_ fs1350 319 h scale.pdf 1 finishings=3 number-up=1 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-Host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
lp 16579 0.0 0.0 75424 5288 ? S 17:50 0:00 | \_ fs1350 319 h scale.pdf 1 finishings=3 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-Host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
lp 16572 0.0 0.0 79792 5900 ? S 17:50 0:00 \_ socket://fs1350.xxxx.xxxx.xxx 319 h scale.pdf 1 finishings=3 number-up=1 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-Host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
⋮
_
cups
はプレフィルター(pdftops、ここではfs1350という名前のPID 16571)とバックエンド(ここではsocket://fs1350.xxxx.xxxx.xxxという名前のPID 16572)を呼び出すことを伝えます。プレフィルターはgs
を呼び出します。全体の処理にかかる時間が0.2秒未満であるため、出力をファイルに収集することは理にかなっています。 _date +'%N'
_は、タイミングを把握するためだけにあります。
(コメントで書いた)証拠による不要なスケーリングは、_evince→Print→Print Setup→Scale→100%
_が 静かに上書き _evince→Print→Page Handling→Fit to Printable Area
_による。したがって、印刷クライアントを細心の注意を払って確認してください。
残念ながら、これがすべてではありません。カップをバイパスしてプリンターの「PDFダイレクトプリント」機能を使用するために、ファイルを直接送信しました:_nc fs1350.xxxx.xxxx.xxx 9100 < scale.pdf
_。 10分以上の処理時間の後、プリンターは用紙を発送しました。
Netcatを使用した生の印刷では、数字はmm単位のサイズを反映しています。
Lpr→cupsを使用した印刷
ファイルのビットマップイメージ(1200 dpi)
プリンター設定「OverrideA4/LT」に関係なく、生の印刷のスケーリングは97.7%ですが、lpr→cups印刷のスケーリングは問題ありません。生のプリントには小さなドットゲインがありますが、lpr→cupsプリントは少し貧弱です。
raw印刷前に図面のページサイズを縮小すると、縮尺が大きくなります。