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

Я сейчас создаю настольное приложение, которое представляет его читабельный вывод в виде 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 ]

5 голосов
/ 18 февраля 2009

Редактировать (2010-11-28 12:30 PM PST) Пожалуйста, +1 этот ответ, если вы загружаете мой код. Я заметил, что мой образец Codeplex был загружен сотни раз. Код не впечатляет, но он служит отличной отправной точкой с большим количеством ссылок на справку по источникам. Спасибо! + том Редактировать (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 форматы также созданы. Скомпилированная, устанавливаемая версия доступна по адресу CricketSoft.com

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

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

+ * Том 1027 *

3 голосов
/ 21 февраля 2009

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

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

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

2 голосов
/ 24 февраля 2009

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

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

2 голосов
/ 17 февраля 2009

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

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

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

1 голос
/ 24 февраля 2009

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

1 голос
/ 22 февраля 2009

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

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

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

1 голос
/ 22 февраля 2009

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

1 голос
/ 21 февраля 2009

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

1 голос
/ 20 февраля 2009

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

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 17 февраля 2009

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

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

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

...