3

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

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

堆栈溢出的另一个人也看到了 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?

4

2 回答 2

2

是的,我不知道如何删除问题,但也许这些信息无论如何都会对其他人有用。

我可能和这里的这个人有同样的问题,我已经复制了这个答案。

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

文档链接

C代码:

HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);

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

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

于 2013-09-04T23:33:31.523 回答
0

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

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

当查看器放大时,图像将被像素化。

于 2017-01-05T18:38:52.720 回答