2

ユーザー入力から動的に PDF を生成しようとしています。ここでは、基本的にユーザー入力を印刷し、作成していない既存の PDF にオーバーレイします。

1つの大きな例外を除いて、機能します。Adobe Reader は、Windows または Linux で正しく読み取れません。私の電話の QuickOffice もそれを読みません。だから私はファイルを作成する私のパスをたどると思った -

1 - LZW エンコーディングを使用して Adob​​e Distiller で作成された背景 PDF 1.2 の元の PDF 。
私はこれを作りませんでした。

2 - Ghostscript で作成された背景
PDF 1.4 の PDF。上記で pdf2ps を使用し、次に ps2pdf を使用して LZW を削除し、reportlab および pyPDF ライブラリがそれを認識できるようにしました。このファイルは、Adobe Reader では不適切なスキャンのように「ぼやけて」表示されますが、他のリーダーでは問題なく表示されることに注意してください。

3 - ユーザー入力から Reportlab で作成された背景 PDF 1.3 と結合するようにフォーマットされたユーザー入力テキストのPDF。
適切に開き、私が試したすべてのリーダーで見栄えがします。

4 - 2 と 3 の PyPDF の関数から作成された完成したPDF PDF 1.3。
mergePage()

開かない:
Windows用 Adob​​e
Reader、Linux 用
Adob​​e Reader、Android 用 QuickOffice

完全に開く:
Google Docs の Web 上の PDF ビューアーLinux 用の
エビンス Linux 用の Ghostscript
ビューアー Windows 用の Foxit リーダー
Mac 用のプレビュー

知っておくべき既知の問題はありますか? 「フラット」が何であるか正確にはわかりませんが、インターネットから、PDF圧縮のためのLZWに代わるオープンソースのようなものだと思いますか? それが私の問題を引き起こしている可能性がありますか?もしそうなら、コードの原因を修正するために使用できるライブラリはありますか?

4

1 に答える 1

4

最初のコメント:

2番目のステップには、非常に多くの欠点があります。PDF を PostScript に変換してから再度 PDF に変換すると、品質が低下します。このプロセスは「PDF の再フライング」と呼ばれ、一般的に PDF の専門家から嫌われています。(理由としては、結果として得られるファイルがスキャン不良のように「ぼやけて見える」、ファイルに埋め込まれているフォントが失われている、ファイルが元のフォントを置き換えている、ファイルの透明度が確実に失われている、画像の解像度が変更されている、色が変更されているなどがあります... .)

「再揚げ」以外に選択肢がない場合もありますが、ここではそうします

Ghostscript を使用すると、PDF ファイルの PDF から PDF への直接変換を行うことができ、内部で隠れた PostScript 変換が行われることはありません。(これは Ghostscript の非常にめったに知られていない機能であるため、通常、この回答は多くの賛成票に値します ;-P )。

内部 LZW 圧縮を取り除きたいので、Ghostscript でそれを行う方法は次のとおりです。

  1. Ghostscript ソース コード リポジトリから入手できる、PostScript 言語で記述された小さなユーティリティ プログラムをダウンロードします: pdfinflt.ps

  2. 次のコマンドラインを実行します。

    gswin32c.exe -- [c:/path/to/]pdfinflt.ps input.pdf output.pdf

更新:これは pdfinflt.ps の最新バージョンにリンクしています。その後、このコミット メッセージで削除されました。

pdfinflt.ps と pdfwrite.ps を削除します。
-----------------------------------
pdfwrite は、(私が見る限り) pdfinflt.ps によってのみ使用されます。

% まだゴールデンタイムには間に合わないが、誰でも利用できる
% 修正します。
%
% 主な問題は次のとおりです。
%
% 1. 書き込まれた PDF ファイルが壊れていることがあります。彼らがいるとき
% 壊れています。GS で外部参照の問題が発生します。
%
% この問題は実際には lib/pdfwrite.ps が原因です。
% 無変換の場合、ファイルが悪い可能性があります。

それは機能しないため、MuPDF(機能する)を使用できます
同じタスクで、これらのファイルを両方とも削除することにしました。

結果の PDF は、 PDF ==> PS ==> PDFの再フライによって品質を失うことなく、すべての内部データ ストリームを解凍します。

2 番目のコメント:

pdftk別のツール、つまり***を使用して 4 番目のステップを実行する必要があると思います。これには、手順 1. と 2. を完全に実行する必要がなくなるという利点があります。

pdfk (PDF ToolKit、ダウンロードはこちら) はコマンドライン ユーティリティであり、Linux、Unix ( pdftk)、および Windows ( pdftk.exe) で使用できます。これは、2 つの PDF のページを重ね合わせるなど、PDF で多くのことを行うことができます。そんな方におすすめしたいのがこちら。pdftk は、ステップ「3」の PDF をオーバーレイできます。最初にそれぞれをデフレートまたは de-LZW する必要なく、一度に元の PDF (またはその逆) に変換できます。

テストするコマンドは次のとおりです。

pdftk.exe ^ original.pdf ^ background pdf-from-userinput-step3.pdf ^ output merged.pdf pdftk.exe ^ pdf-from-userinput-step3.pdf ^ background original.pdf ^ output merged.pdf pdftk.exe ^ original.pdf ^ stamp pdf-from-userinput-step3.pdf ^ output merged.pdf pdftk.exe ^ pdf-from-userinput-step3.pdf ^ stamp original.pdf ^ output merged.pdf

stampbackgroundコマンドの違いについて疑問に思われるかもしれません。コマンドは、その名前が示すように、PDF ページをフォアグラウンドまたはバックグラウンド レイヤーに配置します。両方の PDF の背景が透明である場合 (白一色の不透明ではなく)、多くの場合、結果は同じように見えます。

于 2010-08-09T08:27:59.513 に答える