Я создаю 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?
Да, я не знаю, как удалить вопрос, но, возможно, эта информация будет полезна для других в любом случае.
Я мог иметь ту же проблему, что и этот парень Вот где я продублировал этот ответ.
Мне нужно было включить сжатие .pdf, чего я не сделал.
Документация ссылка на сайт
Код C:
HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);
Это потому, что я не провел достаточно исследований, чтобы знать, что формат .pdf изначально не поддерживает .png, или если он был обновлен для этого, libharu по-прежнему нет. Таким образом, эта опция говорит libharu использовать zlib для сжатия всех файлов, включая ваши изображения.
Реализация не идеальна (вы все равно увидите разницу в размере, если вы заархивируете свой вывод .pdf), но это приемлемо для моего варианта использования.
Если вам не нужно полноразмерное изображение в PDF, вы можете уменьшить изображение до миниатюры с помощью API GDI +, равного по размеру с тем размером, который вы хотите, чтобы изображение отображалось в PDF.
Сохраните масштабированный PNG во временном файле и передайте миниатюру PNG в Haru PDF. Это уменьшит размер файла PDF.
Изображение будет пикселизировано, когда зритель увеличит масштаб.