Какую технологию создания изображения страницы я должен использовать?

Я сейчас создаю настольное приложение, которое представляет его читабельный вывод в виде XHTML, отображаемого в элементе управления WebBrowser. В конце концов, этот вывод должен быть преобразован из файла XHTML в изображение документа в системе обработки изображений. В отличие от документов XHTML, изображение документа должно быть разделено на физические страницы; Кроме того - и это часть, которая убивает меня - на этих страницах должны быть заголовки и колонтитулы.

Как бы мне ни хотелось, я не могу просто распечатать WebBrowser в файл - поддерживаемые им параметры верхнего / нижнего колонтитула не настолько сложны. Поэтому я пытаюсь выяснить, какая технология подходит для создания этих изображений.

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

  • Используйте какое-то программное обеспечение для преобразования XHTML в PDF. Проблема в том, что, не выполняя много оценки и тестирования, я не могу понять, есть ли у продуктов, на которые я смотрел, даже возможность делать то, что мне нужно, то есть брать существующие документы XHTML, украшать их заголовками и нижние колонтитулы и разбить их на страницы.

  • Используйте XSL-FO для создания PDF-файлов. Здесь помогает быть фанатом XSLT уровня ниндзя (именно так я и создаю XHTML), но все равно это выглядит как неуклюжее и медленное решение с множеством движущихся частей. Кроме того, это означает, что я вставляю большую неуклюжую Java-программу в середину моей красивой чистой системы.NET, хотя я, безусловно, достаточно взрослый, чтобы сделать это, если это правильный ответ.

  • Используйте другую технологию, о которой я даже не думал, например, LaTeX. Возможно, есть какой-то чудесный инструмент для отображения страниц, который превращает XHTML непосредственно в TIFF с верхними и нижними колонтитулами страниц. Это было бы идеально.

Мои основные проблемы:

  • Я строю коммерческий продукт; любая технология, которую я использую, должна быть доступной и поддерживаемой. Это не должно быть бесплатно.

  • Я не хочу исчезать в кроличьей норе в течение трех месяцев, стуча по этому материалу, чтобы заставить его работать. Интуитивно это выглядит как проблемное пространство, где я могу потерять много времени, просто оценивая и отвергая инструменты.

  • Какое бы решение я ни принял, оно должно быть относительно невосприимчивым к изменениям форматирования в XHTML. Причина, по которой я в основном использую XSLT и создаю XHTML, заключается в том, что документы, которые я создаю, динамически собираются с использованием бизнес-правил, которые постоянно меняются.

Я потратил много времени на поиск альтернатив и не нашел ничего, что, очевидно, ответило бы. Но, может быть, один из вас, замечательные люди, уже решил эту проблему, и если это так, я бы хотел встать на ваши плечи.

13 ответов

Решение

Изменить (2010-11-28 12:30 PM PST) Пожалуйста, +1 этот ответ, если вы загружаете мой код. Я заметил, что мой образец Codeplex был загружен сотни раз. Код не впечатляет, но он служит отличной отправной точкой, с множеством ссылок на справку по источникам. Спасибо! + tom Edit (2009-03-29 9:00 AM PST) Прикрепленный пример конвертации.
Изменить (2009-03-23 ​​12:30 PM PST, опубликовано в CodePlex) Я разработал решение для этого и опубликовал его в CodePlex. Опубликованная версия 2.0 написана с использованием шаблона WPF MVVP. Файлы TIFF (по одному на страницу) выводятся в c:\Temp\XhtmlToTiff. XAML и XPS форматы также созданы. Скомпилированная, устанавливаемая версия доступна на http://cricketsoft.com/


Вы пробовали " Microsoft XPS Document Writer "? Это программный принтер, который генерирует постраничный вывод из различных источников, включая веб-страницы.

Существует SDK для работы с документами XPS и документами Open XML в целом. Вот практическая статья Бет Масси: " Доступ к частям документа Open XML с помощью Open XML SDK ".

+ том

Просто мой 2р, но если вы XSLT-ниндзя, я бы предложил придерживаться этого. Вы можете избежать неприятной Java-программы, посмотрев на nFop, который является портом C# проекта apache FOP. Замечательно то, что вы можете просто взять сборку и использовать прямую передачу XML и XSLT в нее, чтобы получить желаемый вывод PDF.

http://sourceforge.net/projects/nfop/

Надеюсь, это поможет.

Если ваша цель - tiff, это может быть бесплатный подход с низким риском:

  1. Используйте компонент для создания изображения для данного URL. Я не уверен, какой инструмент мы использовали для этого, но GIYF: я просто наткнулся на WebPreview SmallSharpTool, который, кажется, делает эту работу
  2. Убедитесь, что он может создать изображение всей страницы, т.е. всей прокручиваемой области.
  3. Используйте ImageMagick для выполнения всех манипуляций с изображениями, таких как разрезание его на несколько страниц, добавление собственных верхних и нижних колонтитулов и нумерация страниц и преобразование в tiff.

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

Используйте другую технологию, о которой я даже не думал, например, LaTeX.

TexML, семантика LaTeX с синтаксисом XML. Чтобы использовать это, вы можете создать XSLT, который бы украсил ваш XHTML с помощью команд TexML ( см. Пример)

Вам действительно нужно использовать XHTML/ веб-браузер?

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

HTML просто не подходит для отчетов.

Вы думали об использовании PostScript?

PS: какие колонтитулы вам нужны - ваши собственные, чтобы поместить страницы между ними? если так, постскриптум или PDF, вероятно, лучше. но будет очень сложно создать конвертер xhtml + css в pdf. в основном вам нужна библиотека, которая может анализировать как xhtml, так и css (+ любые объекты, такие как изображения, flash и т. д.)

Вы можете использовать PISA для Python. Он использует набор инструментов reportlab для создания PDF-файла из HTML (используя html5lib)

ExpertPDF HtmlToPdf Converter (www.html-to-pdf.net) должен уметь делать именно то, что вам нужно. Его очень просто использовать, просто сделайте ссылку на сборку в своем проекте и начните использовать ее. Я использовал этот продукт с большим успехом в нескольких рабочих проектах.

Вы также можете попробовать использовать PDFCreator и просто распечатать документ в PDF. PDFCreator действует как любой обычный принтер и использует ghostscript для преобразования вывода на принтер в pdf, tiff, jpeg или что угодно. Я думаю, что вы можете изменить элементы верхнего и нижнего колонтитула через com интерфейс IE и печатать напрямую из IE. PDFCreator содержит примеры для разных языков в папке com каталога установки. Я использовал это и могу ручаться за это. Только для Windows.

Все зависит от того, насколько важно качество создаваемых документов. Это также имеет значение, какие другие операции вам нужно выполнить с документом.

Я сейчас создаю настольное приложение, которое представляет его читабельный вывод в виде XHTML, отображаемого в элементе управления WebBrowser. В конце концов, этот вывод должен быть преобразован из файла XHTML в изображение документа в системе обработки изображений.

Похоже, ваше приложение - это своего рода мягкая форма. Вы генерируете заполненные формы и сохраняете их.

[...] на этих страницах должны быть верхние и нижние колонтитулы.

Это легкая часть. Вы можете использовать шаблоны и объединять данные со статическим шаблоном верхнего / нижнего колонтитула. Вы говорите так, как будто вы делаете VDP. Гектометр Давайте двигаться дальше.

Я не могу просто заставить WebBrowser печатать в файл - параметры верхнего / нижнего колонтитула, которые он поддерживает, не настолько сложны.

Почему так? Все, что вам нужно, это способный водитель.

Мне кажется (хотя это и не обязательно), что я в конечном итоге буду создавать PDF-версии HTML-документов.

Опять же, не ясно, почему вы хотите PDF прямо сейчас. PDF - это формат обмена документами. Не PDL как таковой. PostScript - намного лучший выбор. Да, я знаю, что есть такие вещи, как XPS, PCL, а что нет. Однако количество контроля и качества рендеринга, которое вы получаете с помощью PS, слишком велико, чтобы рисковать более дешевым решением. Я говорю дешевле, потому что вы также должны иметь в виду, какой тип печати вы можете использовать. Принтеры PostScript (не те, что с клонированными RIP) в целом более дорогие.

Теперь вернемся к вашей PDF-вещи. Да, конечно, вы можете создавать PDF. У этого есть определенные преимущества как:

  • Лучшая поддержка прозрачности (и в целом качества)
  • архивный
  • взаимообмен
  • Поделитесь им для обзора
  • Просмотр / Предполетный /Correct
  • Безопасность
  • Потоковое шифрование (как для безопасности, так и для объема данных, передаваемых на принтер)
  • Используйте шаблоны

Но помните, у вас есть какие-нибудь принтеры для копирования в PDF? Потому что в противном случае вы конвертируете PDF в PS/PCL с потерями. И ты только что проиграл игру. Что возвращает меня к PostScript;)

PrinceXML - это конвертер XHTML/CSS в PDF. Кажется, есть функции, которые вам нужны:

  • Верхние и нижние колонтитулы страниц, нумерация страниц и двусторонняя печать.

Я понимаю, что вам, вероятно, понадобятся более подробные ответы, чем этот (извините, но я не оценивал продукт), но, тем не менее, я надеюсь, что это поможет!

Вы упомянули результаты экспорта своего текущего настольного приложения в формате xhtml. Так как xhtml - это правильно сформированный xml, вам следует использовать xsl fo для его экспорта в pdf.

XML -> XSL-FO = PDF

Вот руководство для начинающих: http://www.devx.com/xml/Article/16430

Моя компания использовала эту технику в веб-аппликации java+cocoon для правительства Нидерландов.

http://iecapt.sourceforge.net/

цитирование сайта выше:

IECapt - это небольшая утилита командной строки, предназначенная для записи рендеринга веб-страницы в Internet Explorer в файл изображения BMP, JPEG или PNG. Версия C++ также имеет экспериментальную поддержку векторного графического вывода расширенного метафайла. IECapt доступен в версиях C++ и C#.

Другие вопросы по тегам