2017-12-13 8 views
1

私がプログラムで動作するアプリケーションは、PDFを生成します。画像の色空間を設定する機能を追加するように求められました。画像の色空間はすべて同じにする必要があります。現在、私のコードでは、次のような色空間が生成されています。色空間を定義してPDFの画像に設定するにはどうすればよいですか?

3 0 obj 
<< 
/N 3 
/Alternate /DeviceRGB 
/Length 284 
/Filter [/FlateDecode] 
>> 
stream 
8c``2ptqre``ÈÍ+) 
rwRˆˆŒR`¿ÀÀÁÀÍ Ì`Ì`˜\\ààà yùy© |»ÆÀ¢/ë‚Ì”Ǹ’ŠJ€ô 6JI-Nf``4 ²³ËK 
€âŒs€l‘¤l0{ˆ]äd²ùÒ!ì+ v„ýÄ.zÈþRŸf3q€Í°[email protected]ì’Ô 
½Îù•E™é% 
F 
Ž)ùI© 
Á•Å%©¹Å 
žyÉùEùE‰%©)@µ÷ D!(Ä4---4Iô7A Šës 8|ÅÎ Ä ¹´¨Êdd2&ÌG˜1G‚Á)Ë„˜I/Ãþ©15C}†}s ïPo 
endstream 
endobj 
4 0 obj 
[/ICCBased 3 0 R] 
endobj 

これは動作し、PDFがロードされます。しかし、ときに私は次のような、画像上でその色空間を設定しよう:

23 0 obj 
<< 
/Type /XObject 
/Subtype /Image 
/Name /I5 
/Length 2995953 
/Width 3675 
/Height 3675 
/Filter /DCTDecode 
/ColorSpace 4 0 R 
/BitsPerComponent 8 
>> 
stream 
画像データは簡潔

endstream 
endobj 

のためにここに含まれていない

これは、と別のPDFをスキャンに基づいて有効になります画像。 Colorspaceを置き換えようとせず、代わりに "/ Colorspace/DeviceRGB"を使用すると、PDFが正常に読み込まれます。

ここで私はおそらく何か重要なものがないことは知っていますが、何が分からないのですか。

ICC profile being used

Bad PDF

+0

純粋なバイナリデータであることが明確なASCII文字を使用することに自信がありますか?または、これはちょうどシミュレートされたビューで、実際のデータ*は圧縮された色空間の正しいバイナリ形式ですか? – usr2564301

+1

実際のデータは確かに圧縮された色空間です。状況を混乱させないようにするならば、私は画像データで行ったように、表示されていないデータがあることに注意してください。 –

+0

あなたはICCストリームデータのデータに自信がありますか?(正しく読み取られ、符号化され、ソースICCがRGBタイプであること) – dwarring

答えて

2

4 0 R[/ICCBased 3 0 R]オブジェクトのエントリが欠けていた相互参照インデックスに問題がありました。

xpdfでPDFを開くと、エラーが発生しました。このエラーはInternal Error: xref num 25 not found but needed, try to reconstructです。

そこから、実際のオブジェクトに対してクロスリファレンステーブルを手動でクロスチェックし、テキストエディタを使用して見つからないオブジェクトを探しました。

xref 0 26 %% <-- was 0 25 0000000000 65535 f 0000000009 00000 n 0000000201 00000 n 0000000253 00000 n 0000000638 00000 n %% <-- added this line 0000000671 00000 n 0000000764 00000 n 0000000928 00000 n 0000001031 00000 n 0000001195 00000 n 0000001298 00000 n 0000001464 00000 n 0000001568 00000 n 0000001734 00000 n 0000001838 00000 n 0000002004 00000 n 0000002108 00000 n 0000002274 00000 n 0000002378 00000 n 0008538650 00000 n 0012148952 00000 n 0020386142 00000 n 0025352962 00000 n 0027568145 00000 n 0030564286 00000 n 0030564334 00000 n trailer

PDFが開かとのxpdfを使用して、正常に表示:次のように

外部参照テーブルは、小さな編集のカップルを必要としていました。

0

例えば、あなたは現在、特定のColorSpaceに表現されているPDFに有効なイメージのXObjectを持っていると仮定しましょうDeviceCMYK。そのイメージを別のColorSpaceを使用するように変更する場合は、 DeviceRGB(私はあなたがこれをやっている理由を別にしておきます)、通常、画像データを変換する必要があります。

そうでない場合は、参照されている色空間を変更するだけで、イメージが表示されない(たとえば、逆さまに見える、または色が混ざってしまう)危険性があります。イメージデータが変更されて表示されない場合がありますが、実際にイメージデータを正しく変更していない場合は非常に脆弱な方法になります。

たとえば、PDFを操作するために使用しているAPIについてお聞かせください。

+0

画像はすでに正しい色空間で出力されています。その色空間をPDFに保存して、プリンタがそれを使用して最終製品を調整できるようにしたいだけです。 APIに関しては、タグを書き出すだけの手作りのものです。 –

関連する問題