Почему мой libharu pdf негабарит с изображениями.png?

Я создаю PDF, используя libharu в C++ (скомпилированный как.cgi), который имеет изображения.png. Код в порядке, но мои PDF-файлы смехотворно завышены. Каждая страница содержит одно изображение размером около 30 КБ и около 4 текстовых символов системным шрифтом libharu. Если я открою 20-страничный выходной файл размером 25 Мб и "напечатаю" его в файле в моей операционной системе, он станет размером около 256 Кбайт без видимых изменений в изображениях.

Я думаю, что проблема связана с 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, чтобы он создавал PDF-файлы разумного размера при использовании изображений.png?

2 ответа

Решение

Да, я не знаю, как удалить вопрос, но, возможно, эта информация будет полезна для других в любом случае.

Возможно, у меня возникла та же проблема, что и у этого парня, где я продублировал этот ответ.

Что мне нужно было сделать, так это включить сжатие.pdf, чего я не сделал.

Ссылка на документацию

Код C:

HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);

Это потому, что я не провел достаточно исследований, чтобы знать, что формат.pdf изначально не поддерживает.png, или если он был обновлен для этого, libharu по-прежнему нет. Таким образом, эта опция говорит libharu использовать zlib для сжатия всех файлов, включая ваши изображения.

Реализация не идеальна (вы все равно увидите разницу в размере, если вы заархивируете свой вывод.pdf), но это приемлемо для моего варианта использования.

Если вам не нужно полноразмерное изображение в PDF, вы можете уменьшить изображение до миниатюры с помощью API GDI+, равного по размеру тому, как вы хотите, чтобы изображение отображалось в PDF.

Сохраните масштабированный PNG во временном файле и передайте миниатюру PNG в Haru PDF. Это уменьшит размер файла PDF.

Изображение будет пикселизировано, когда зритель увеличит масштаб.

Другие вопросы по тегам