Я сделал новую версию консольной утилиты:
fi2pdf v2.0Скачать:
http://www.djvu-soft.narod.ru/soft/fi2pdf_v2_0.rar (610 КБ)
Внутри - сама консольная утилита, её исходники, хелп к ней и FreeImage.dll.
В этой версии сделан важный шаг на пути развития:
fi2pdf научилась создавать многостраничные PDF-файлы.
Мне удалось достичь такого результата благодаря тому, что мне повезло найти удачный прототип для версии 2.0. Вот он:
Simplest PDF Generating API for JPEG Image Contentjpeg2pdf
by Hao Hu [
ihaohu@gmail.com]
http://www.codeproject.com/KB/library/jpeg2pdf.aspxЭто - простейшая консольная программа с исходниками, которая умеет кодировать JPG-файлы в PDF.
Я взял эту программу, и добавил туда функционал из программы PosteRazor (на базе которой была сделана первая версия fi2pdf).
В результате получилась комбинированная программа:
JPG-файлы она кодирует в PDF напрямую - без использования FreeImage (как это и было изначально в jpeg2pdf).
А все остальные растровые форматы она кодирует в PDF так же, как это делает PosteRazor - с ZLib-сжатием (только PosteRazor не умеет создавать многостраничные PDF-файлы - а fi2pdf v2.0 - умеет - за счёт использования кода jpeg2pdf).
fi2pdf v2.0 пока что имеет некоторые ограничения:
- Использование только формата листа А4.
- Жёстко заданный DPI - 72 (игнорирование реального DPI).
- Ограничение максимального количества файлов, одновременно кодируемых в PDF - 256 штук.
- Кодируемый файл, независимо от его размера, растягивается (сжимается) так, чтобы полностью заполнить собою соотв. страницу PDF-файла. При этом даже пропорции сторон нарушаются.
Но эти ограничения - милый пустячок, вполне преодолимые в будущем - по сравнению с тем, что уже достигнуто. Формат PDF - очень непрост для программной работы. Самому делать программу по работе с PDF весьма затруднительно, потому что для этого пришлость бы прочесть и освоить спецификацию формата PDF - а это более тысячи страниц (хотя некоторые индивидуумы так и поступают).
Можно, конечно, использовать готовые программные библиотеки. Но это слишком сложно, и они все слишком избыточны - мне-то нужно все-навсего создание растрового PDF - а все PDF-библиотеки (на С++, другие я не рассматриваю) поддерживают в т.ч. и векторный PDF - что мне в данном случае совершенно не нужно и даёт избыточную сложность и вес программы.
Я сумел найти компромиссный вариант - 2 чужие программы, в которые их авторы уже вложили свой труд по чтению/пониманию/самостоятельной реализации спецификации PDF, и которые (эти программы) получились при этом достаточно простыми, чтобы я смог использовать их код в самостоятельной программной работе с PDF.
В общем, имея теперь такую базу, как fi2pdf v2.0, можно дальше её развивать и совершенствовать.
Использование утилиты:
Положите в папку с fi2pdf.exe любое (но меньшее 256) количество файлов форматов:
bmp, jpeg, jpg, gif, tiff, tif, png, pnm, ppm, pgm, pbm.
И запустите fi2pdf.exe.
Через некоторое время создастся файл output.pdf - в той же папке.
Детали:
fi2pdf v2.0 имеет лицензию GPL 2 and later - соответствующие разрешения мне дали авторы jpeg2pdf и PosteRazor.
В jpeg2pdf я исправил один глючок, без исправления которого всё не работало в определённых условиях.
fi2pdf v2.0 хорош тем, что имеет крайне простой исходный код и крайне малый размер - всего лишь 56 КБ (без FreeImage.dll)! Это очень мало - если сравнить с другими программными PDF-библиотеками.
Другое важное достоинство fi2pdf v2.0 - она сделана на чистом языке СИ (даже не на С++) - что очень облегчает её понимание сторонними людьми. А также она не зависит ни от Java, ни от .NET (ни от тому подобной гадости).
Самое забавное, что я как не умел программно работать с форматом PDF, так и не умею и сейчас - разве что получил некое общее представление об общем внутреннем устройстве PDF. fi2pdf v2.0 я сделал практически "вслепую", методом тыка, не понимая на каждом шаге, что я делаю - и мне повезло, что случайно всё получилось.