生成带有图像的 PDF 文件

Generate PDF File With Image

我正在尝试逐行手动生成 PDF 文件。 我想把图片放进去,但是只放进图片流不行,文件开头还有一个压缩流,好像是必须的。

带图像的示例 PDF 文件:

%PDF-1.4
%âãÏÓ
1 0 obj
<</Type/Page/MediaBox[0 0 2048 1365]/Resources<</XObject 6 0 R>>/Contents 2  0 R/ArtBox[0 0 2048 1365]/CropBox[0 0 2048 1365]/Parent 8 0 R>>
endobj
2 0 obj

<</Filter/FlateDecode/Length 53>>
stream

THE STREAM THAT I AM TALKING ABOUT

endstream
endobj 

3 0 obj
<</D[1 0 R/FitH 1370.000]/S/GoTo>>
endobj
5 0 obj
<</Type/XObject/Subtype/Image/ColorSpace/DeviceRGB/Filter/DCTDecode/Width 2048/Height 1365/Length 623547/BitsPerComponent 8>>
stream

...

JPEG DATA HERE

...

endstream
endobj

...


那么,什么是流以及如何创建它? 谢谢

查看对象 1:

1 0 obj
<</Type/Page/MediaBox[0 0 2048 1365]/Resources<</XObject 6 0 R>>/Contents 2  0 R/ArtBox[0 0 2048 1365]/CropBox[0 0 2048 1365]/Parent 8 0 R>>
endobj

它表示一个页面 (/Type/Page) 并引用对象 2 作为其内容 (/Contents 2 0 R)。因此,您的神秘流包含对在对象 1 中建模的页面上绘制的内容的描述!

内容流不一定要压缩,但由于 PDF 内容描述说明的冗长,它们通常可以很好地压缩。

在这样的流中,可以有各种各样的指令来设置状态(颜色、变换、透明度等)和根据这些设置绘制 text/bitmaps/vector 图形。

在您的情况下,内容流至少应包含类似

的内容
2048 0 0 1365 0 0 cm
/Im0 Do

Im0 是您在对象 6 中与图像资源关联的名称。


总而言之,与其使用纯粹的试错法,您应该简单地阅读 PDF 规范 ISO 32000-1