1

FPDF を使用して動的に生成された PDF を作成しています。

私の PDF では、グリッド内に多数の正確な水平/垂直線が必要であり、レンダリングすると、それらはアンチエイリアス処理され、クライアントには非常にあいまいで受け入れられません。ドキュメント内のこれらの (またはすべての) 行のアンチエイリアスを削除する必要があります。

Adobe pdf仕様自体に正しく表示されているため、これが可能であることはわかってい ます http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf(警告:大きなファイル)これがどのように行われるかについては、2ページのボックスを参照してください見る。

このページに表示されているボックスを複製するにはどうすればよいですか?

- 編集 -

%PDF-1.6
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Length 44>>
stream
2 J
1.00 w
20.00 821.89 m 200.00 821.89 l S

endstream
endobj
1 0 obj
<</Type /Pages
/Kids [3 0 R ]
/Count 1
/MediaBox [0 0 595.28 841.89]
>>
endobj
2 0 obj
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
>>
/XObject <<
>>
>>
endobj
5 0 obj
<<
/Producer (FPDF 1.6)
/CreationDate (D:20100311190240)
>>
endobj
6 0 obj
<<
/Type /Catalog
/Pages 1 0 R
/OpenAction [3 0 R /FitH null]
/PageLayout /OneColumn
>>
endobj
xref
0 7
0000000000 65535 f 
0000000179 00000 n 
0000000266 00000 n 
0000000009 00000 n 
0000000087 00000 n 
0000000360 00000 n 
0000000435 00000 n 
trailer
<<
/Size 7
/Root 6 0 R
/Info 5 0 R
>>
startxref
538
%%EOF

これは非常に単純な PDF ファイルで、私が抱えている問題を示す 1 本の線を描いています。トリックはこれを追加することであることがわかりました:

/Type /ExtGState
/SA false

しかし、私はまだそれを機能させることができません。SA は、上記の PDF 仕様の 10.6.5 で定義されています。

4

1 に答える 1

1

正確な答えはありませんが、それはコメント以上のものだと思います...

すでに PDF の仕様に慣れているので、次のことを試してみてください。

fpdf が実際にこれらの線をどのように描画しているかを調べてください。出力される pdf ファイルは圧縮されている可能性があるため、pdftkをダウンロードして解凍する必要があります。次のコマンドでそれを行います。

 pdftk fpdf_output.pdf output fdf_readable.pdf uncompress

PDF をテキスト エディターで開き、見ている PDF 仕様の例と同じように線が描かれているかどうかを確認します。

そうでない場合は、fpdf が線を描画するために使用する方法にアンチエイリアシング オプションがあるかどうかを確認します (PDF の仕様では、つまり)。fpdf が同じ方法で描画している場合 (またはその方法にオプションがある場合)、出力ドキュメントを (テキスト エディターで) 変更して、アンチエイリアスをオフにしてみてください。テキスト エディターで編集した後にドキュメントが開かない場合は、次のコマンドを実行できます。

 pdftk fdf_readable.pdf output fdf_fixed.pdf

破損した参照やバイト数を修正する必要があります。

次に、微調整した pdf を開いて、目的と同じかどうかを確認します。

ここで悪いニュースがあります。上記で達成できる唯一のことは、fpdf が内部で使用しているメソッドを介してアンチエイリアシングが可能か不可能かを検証することです。可能であれば、機能が既に存在するか、機能のリクエストを行うことができるという希望があります。または、本当に自信がある場合は、fpdf を拡張して何らかのantialias("true|false")方法を含めることを試みることができます。彼らが線を描くために使用する方法が仕様と同じではなく、アンチエイリアシングをオフにするオプションがない場合、最善の策はおそらくtcpdfのような代替の pdf ジェネレーターを見つけて、それらが提供するかどうかを確認することです。その機能。

アップデート

さて、最初に指摘したいのは、まだあいまいさが見られないということです。したがって、これで実際に問題が解決するかどうかはわかりません。しかし、自動ストローク調整ルールを例に追加しましたが、PDF は引き続き開きます。

PDF 全体を再度投稿しないために、サンプル コードを更新する方法は次のとおりです。

.........
/Font <<
>>
/XObject <<
>>

//Start my edit right below this point in your example, so at line 31, add:

/ExtGState << /GS1 10 0 R
>>
>>
endobj
10 0 obj
<<
/Type /ExtGState
/SA true
/TR 11 0 R
>>
endobj
31 0 obj
<< /FunctionType 0
/Domain [0.0 1.0]
/Range [0.0 1.0]
/Size 2
/BitsPerSample 8
/Length 7
/Filter /ASCIIHexDecode
>>
stream
01 00 >
endstream
endobj
// Your code picks back up with:

5 0 obj
<<
/Producer (FPDF 1.6)

基本的に、メインのリソース ディクショナリにディクショナリ オブジェクト参照を追加し、ストローク調整ルールを true に設定して実際のディクショナリ オブジェクトを作成しただけです。それが違いを生むかどうかわからないので、仕様の例にある伝達関数も投入しました。簡単に取り出せます。

于 2010-03-12T01:09:40.687 に答える