Ответ 1
Я использовал PhantomJS для создания png-изображений с веб-страниц, и он также может создавать PDF файлы, и качество обычно бывает хорошим. Свойство называется захватом экрана и описано здесь. Поддерживаемые форматы: PNG, JPEG, GIF и PDF.
При преобразовании в PDF тексты страниц сохраняются в виде текстов.
После тестирования нескольких других библиотек или программ, нашел PhantomJS самым идеальным решением. PhantomJS использует WebKit, настоящий механизм компоновки и рендеринга.
Несколько примеров приведены в https://github.com/ariya/phantomjs/wiki/Examples. В разделе Рендеринг/растеризация упоминается следующий script, который поможет вам в этом процессе:
rasterize.js rasterizes a web page to image or PDF
Руководство PhantomJS QuicStart говорит:
Возможно создание PDF файла, например. из статьи в Википедии:
phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
или при создании готового к печати чит-листа:
phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf
Я протестировал pdf-версию из нескольких страниц, и если страница соответствует стандартам, она дает хорошие результаты. Текст можно выбирать и печатать как высококачественный, но на некоторых страницах макет в формате pdf не такой, как в png. Ниже приведены два скриншота, которые генерируются с помощью команд:
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf
Я также тестировал http://lab.simurai.com/buttons/. PDF и png были очень идентичны, и ниже приведен пример pdf, который я растрировал до 5641px в ширину и обрезал область. Как и в предыдущем примере PDF, текст можно выбрать в PDF, и, как видите, текст острый (без антиалиасов!).
Установка
Я попытался сначала установить Qt-библиотеку и PhantomJS на компиляцию Centos5 из исходного кода, но не повезло. Затем на Ubuntu 11.10 и процесс был безболезненным:
Я загрузил http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 и извлек его с помощью
tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2
И затем скопируйте исполняемые phantomjs в bin dir системы:
$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
и phantomjs были готовы к запуску.
Если сгенерированный PDF файл не подходит, вы можете попробовать обновить Webkit, но я полагаю, что результата должно быть достаточно. PhantomJS имеет отличный цикл обновления, поэтому ошибки должны быть исправлены в разумные сроки.
Часто задаваемые вопросы PhantomJS также имеет хорошую информацию о возможностях.