为什么我的libharu pdf超大了.png图片?

时间:2013-09-02 08:19:56

标签: c++ pdf png cgi libharu

我正在使用带有.png图像的C ++(编译为.cgi)中的libharu创建一个pdf。 代码很好,但我的pdf版本太过分了。 每个页面都有一个大约30kb的图像和libharu系统字体中的大约4个文本字符。如果我打开一个25mb的20页输出文件并将其“打印”到我操作系统中的文件,它会变成256kb左右,而且图像没有明显的变化。

我认为这个问题与libharu有关,因为这个人也看到了它,here。他正在使用php,libharu作为编译的.cgi。 (我的C ++代码也编译.cgi,链接到libharu)。

另一个人here on stack overflow也看到了libharu的大小问题,但是他的问题没有提到与.png有关的事情,所以它可能是无关的。

参考代码:

WorkingGraphic = HPDF_LoadPngImageFromMem  (    *gPdfPtr,
                                                PngAssets[AssetIndex],  //Image data ptr
                                                PngSizes[AssetIndex]);  //data length


//Render Appropriate
HPDF_Page_DrawImage  (*BlitParams->page,
                        WorkingGraphic,
                        BlitParams->OutputRect->X,
                        BlitParams->OutputRect->Y,
                        BlitParams->OutputRect->Width,
                        BlitParams->OutputRect->Height);

有没有人知道如何驱动libharu,以便在使用.png图像时创建合理大小的pdf?

2 个答案:

答案 0 :(得分:1)

对,我不知道如何删除问题但是这些信息反正对其他人有用。

我可能遇到了与此同事here相同的问题,我已经重复了这个答案。

我需要做的是启用压缩.pdf,这是我没有做过的。

文档link

C代码:

HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);

这是因为我没有做足够的研究来知道.pdf格式本身不支持.png,或者如果已经更新这样做,libharu仍然没有。因此,此选项告诉libharu使用zlib压缩它可以包含的所有内容,包括图像。

实现并不完美(如果你压缩输出.pdf,你仍会看到大小差异),但我的用例可以接受。

答案 1 :(得分:0)

如果您不需要PDF中的全尺寸图像,则可以使用GDI + API将图像缩小为缩略图,大小相等,无论您希望图像在PDF中显示多大。

将缩放的PNG保存到临时文件,并将缩略图PNG传递给Haru PDF。这将减小PDF文件的大小。

当观看者放大时,图像将被像素化。