【问题标题】:why is my libharu pdf oversized with .png images?为什么我的 libharu pdf 与 .png 图像过大?
【发布时间】:2013-09-05 06:53:58
【问题描述】:

我正在使用 C++ 中的 libharu(编译为 .cgi)创建一个包含 .png 图像的 pdf。 代码很好,但我的 pdf 文件太大了。 每页包含一个大约 30kb 的图像和大约 4 个 libharu 系统字体的文本字符。如果我打开一个 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?

【问题讨论】:

  • 快速提问:PDF 不本机支持 PNG 格式。你能知道它是否被翻译成未压缩的位图吗?这可以解释尺寸膨胀的原因。
  • 是的,你是对的。我想回答我自己的问题,但不得不等待 7 个小时......然后忘记了:) 但很好发现

标签: c++ pdf png cgi libharu


【解决方案1】:

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

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

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

文档link

C 代码:

HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);

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

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

【讨论】:

  • 我正在使用 libharu 库将二维码添加到 pdf 中。除了我用作页眉的 PNG 徽标之外,所有 QR 码图像都是动态生成的。应用建议的代码行后,PDF 文件的大小从 17 MB 下降到 2.4。谢谢!
  • @M J Barrow:我也面临同样的大尺寸 pdf 问题。我已经有了代码HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);,但它没有任何区别。我的代码的一个简单示例在这里(stackoverflow.com/questions/40111433/…)。你能分享一下你的代码吗?
【解决方案2】:

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

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

查看器放大时图像会像素化。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 2012-10-26
    • 2020-08-18
    • 1970-01-01
    • 2021-03-24
    • 2010-11-30
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多