Почему мой 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.
Изображение будет пикселизировано, когда зритель увеличит масштаб.