Рекомендация? для нашего конкретного проекта HTML → PDF

У меня вопрос, который я вижу из googling, обсуждался подробно... но я хочу знать, что вы рекомендовали бы, исходя из наших конкретных потребностей. Я хочу быть на правильном пути, прежде чем я узнаю неделю спустя, что я выбрал неправильный инструмент (инструмент, который работает, но чья особенность, в конце концов, исключает его для нашего проекта).

Я прочитал некоторые хорошие потоки в Qaru уже по этой теме.. но у них есть люди, которые делают рекомендации по всей карте. Как я и ожидал, - как правило, наши потребности и опыт находятся по всей карте. И снова, здесь я хочу знать, что вы рекомендовали бы, учитывая нашу конкретную ситуацию.

У нас есть динамическая HTML-страница, которая отображает 30 "адресных ярлыков" в пределах размеров одного документа с размером буквы US-letter. Мы хотим, чтобы пользователь имел возможность печатать страницу с размером одной буквы и содержал строку содержания идеально (как в браузере) для этикетки с этикеткой (напечатанной) на этикетке Avery, которую они будут использовать, чтобы затем очистить 30 стикеров и прикрепляется к физическому продукту. HTML-страница составляет ~ 200 000 байт (divs и tables), текст, gif, jpgs, графику PNG с штрих-кодом и интенсивное использование взыскательного CSS-CSS2, а также CSS3 (преобразование свойств CSS3), то есть:

/* --- for firefox, safari, chrome, etc. --- */
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
/* --- for ie --- */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);

... который я использую для поворота (90 градусов) штрих-кода, который я снимаю с этого сайта/службы: http://www.barcodesinc.com/generator/index.php

Мы могли бы отказаться от этого PNG/сервиса штрих-кода только в том случае, если бы я мог легко заменить его другим... и штрих-код должен быть повернут на 90 градусов - таким образом, он поместится в его крошечный (вертикально ориентированный) слот с выделенным слотом на каждом из 30 "Ячейки ярлыков адресов".

  • Хотелось бы, чтобы у нас был бюджет для серверной версии PrinceXML;-)... но не повезло.
  • Я никогда не использовал библиотеки PHP, такие как FPDF или TCPDF, но меня беспокоит скорость; корпоративным пользователям (в разных браузерах) понадобится pdf в режиме реального времени. Они могут быть терпеливыми и ждать окончательного PDF файла, если оставить бесплатное решение.. но если для генерации требуется несколько минут, то это минус. Также я не уверен, насколько это хорошо для HTML → PDF (в отличие от прямого PDF с нуля). Кроме того, не уверен, насколько хороша поддержка CSS. На нашей странице немного HTML/CSS kludge.
  • Я использовал инструменты командной строки HTMLDOC и wkpdf, но первый не нуждался в CSS, который мне нужен сейчас, а последний вводит маржу, которая убивает его для точного форматирования адресных меток (плюс этот проект находится в Linux).

Мои навыки PHP еще не очень сильны... но я готов делать все возможное, чтобы вытащить любое решение вместе. В случае, если вы знакомы с любыми инструментами для создания PDF файлов, которые, по вашему мнению, вам пригодятся, пожалуйста, сообщите нам об этом!

Ответы

Ответ 1

Если вы ищете что-то вроде Prince XML, но без затрат, я бы попробовал DocRaptor.com. Это онлайн-генератор PDF, который преобразует из HTML. Я использовал бесплатный план, и это было довольно легко.

Удачи!

Нат

Ответ 2

Мое обычное предложение для таких вещей wkhtmltopdf. Ваша веб-трансформация должна работать, как и все, что работает в браузерах веб-сайтов.

Справедливое предупреждение: я не использовал его сам.

Ответ 3

Вы настроены на решение HTML- > PDF? Я бы не пошел по этому пути: HTML никогда не предназначался для печати... он не имеет понятия о страницах, а различия в ОС, браузере, установленных шрифтах и ​​т.д. Могут сделать что-то столь же точное, как печать наклейки кошмаром. Почему бы не сгенерировать PDF напрямую и вообще обходить HTML?

К сожалению, я никогда не делал такого рода автоматизированное PDF-поколение, о котором вы говорите. Если бы мне пришлось быстро взломать что-то, первые две вещи, которые появляются у меня в голове:

  • Сгенерируйте вывод PS и подайте в утилиту вроде ps2pdf
  • Сгенерируйте вывод TeX и подайте на pdflatex

Я буду беспокоиться о надежности и скорости обоих из них: он будет зависеть от того, сколько запросов вы обрабатываете в секунду.

Глядя на вывод ldd для gs (ps2pdf), он может использовать Cairo для генерации PDF. В Каире есть ссылки на PHP, C, Python и т.д.

Ответ 4

Я не рекомендую вам конвертировать HTML в PDF. Так как вы смогли получить его в HTML, преобразование никогда не сохранит эту точность.

Я использовал FPDF и обнаружил, что он достаточно быстр достаточно для генерации PDF в реальном времени даже сложных документов. FPDF позволяет точное размещение (измеряется в дюймах или ваших предпочтительных единицах) элементов на странице PDF, поэтому выравнивание не должно быть проблемой. Я подозреваю, что вам будет проще создавать PDF файл, чем создавать HTML-код.

Для генерации штрих-кода есть пользовательские скрипты, позволяющие вам делать это в FPDF, если вы выберете. Или вы можете встроить изображение, которое вы создали в другом месте.

EDIT: просто для проверки, я проверил сайт FPDF, и для создания меток в общих форматах Avery есть пользовательский script. Это менее 200 строк кода, поэтому, даже если вы хотите написать свой собственный, я подозреваю, что вы можете сделать это довольно легко.

Ответ 5

В конце концов, мы дали PrinceXML go (через услугу pay-as-you-go "docRaptor". Благодаря Nate для этого совета). На данный момент принц не распознает преобразование CSS3, которое мне нужно для поворота штрих-кода в нашем pdf файле. Но я нашел еще один генератор штрих-кода, который вращает его во время рисования, прежде чем служить... так, чтобы это получилось. Там могут быть более эффективные способы генерации PDF файлов. Но для тех из нас, кто тратит все время на взломы веб-страниц, есть что-то очень приятное в том, что создаваемые pdf файлы форматируются точно так же, как источник HTML/CSS. Я понял, что вся суета над принцем хорошо заработана. Спасибо всем, кто ответил.