2009-01-29 4 views
9

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

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

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

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

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

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

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

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

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

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

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

+0

возможно дубликат [Программный получить скриншот страницы] (http://stackoverflow.com/questions/1981670/programmatically-get-screenshot-of-page) – h22

ответ

5

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


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

Существует SDK для работы с документами XPS и документами Open XML в целом. Вот статья о работе Бет Масси: «Accessing Open XML Document Parts with the Open XML SDK».

+ tom

+0

Мне нужно больше контроля над форматированием, чем я могу получить, просто перенаправляя напечатанный вывод IE к драйверу, к сожалению. Генерирование базового XPS кажется, мягко говоря, нетривиальным. –

+0

А, я, возможно, немного помогу вам. Я решил составить образец. Pls hold ... (и thx для «Answered».) –

+0

Ну, «ответ» был сделан автоматически, когда щедрота истекла. На самом деле я не намеревался, но система работает так, как она работает. –

1

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

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

1

PrinceXML - это конвертер XHTML/CSS в PDF. Это, кажется, есть функции, которые необходимы: заголовки

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

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

+0

Это было поразительно легко реализовать в моем прототипе. Жаль, что лицензирование сервера настолько дорого. –

+0

Да, меня тоже забрали высокие цены. Возможно, вы могли бы связаться со своим отделом продаж, чтобы узнать, можете ли вы получить специальную сделку? Кажется, иногда работает ... – onnodb

+0

Да, мы могли бы получить OEM-цены. Но даже с 50-процентной скидкой я добавляю $ 2 тыс. К цене моего программного обеспечения (или, что более реалистично, уменьшая свою прибыль на $ 2 тыс.). Я очень сильно мотивирован, чтобы найти другое решение. Хотя все остальное о принце прекрасно. –

2

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

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

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

1

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

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

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

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

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

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

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

Похоже мне (хотя это не обязательно), что я в конечном итоге делает это продуцирующие PDF версии HTML документов

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

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

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

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

+0

Обмен и архивирование - самые убедительные аргументы для PDF. Я не уверен, насколько важны контроль и качество рендеринга - многие документы, которые эта система заменяет, - это документы Word, покрытые рукописными поправками, поэтому ожидания пользователей в настоящее время довольно низки. –

+0

Означает ли это, что вы принимаете документы Word через OCR? В этом случае движок OCR генерирует вам tiff. Или вам нужно генерировать разные (C, M, Y, K) плоскости? – dirkgently

+0

Нет, клиент не отображает документы Word в настоящее время. Изготовление PDF не является * действительно * требованием на данный момент - создание TIFF отформатированных документов. Поэтому я мог бы использовать PS. Какие инструменты мне нужны? Я младенец в лесу с PS. –

3

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

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

Надежда, что помогает.

+0

Мне никогда не приходило в голову, что какой-то умный человек повторит FOP в .Net. Мне, возможно, придется немного поработать над XSL-FO. Я знаю, что могу заставить его работать хотя бы. –

1

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

+0

Замечательно, насколько плохо организована документация для PISA. (Например, на сайте PISA нет даже ссылки на нее. И не важно, чтобы получить полный список зависимостей.) Но в конце концов это работает. –

+0

Я нашел пример, который взял меня прямо через него ... Я помню, что документация немного скудна. – jle

+0

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

1

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

+0

Интересная идея, за исключением того, что IE не дает вам возможности (сказать) определить DIV в качестве нижнего колонтитула страницы, который действительно является уровнем управления форматированием, в котором я нуждаюсь. –

+0

Возможно, вы сможете добавить это с помощью PDFCreator ... – jle

1

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

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

HTML - это просто неправильная технология для отчетов.

+0

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

2

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

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

+0

Это ... устрашающе. Это может быть очень хороший ответ для тех, кто знает LaTeX. Я этого не делаю, так что это два холма, чтобы подняться. Также есть следующее: http://www.w3.org/2004/04/xhlt91/. –

+0

Хорошо, как вы упомянули, я предположил, что вы это знаете. ;-) Начиная с инструментов [X] HTML до LaTeX, большинство из них создают слишком простые, часто даже уродливые документы. – vartec

1

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

+0

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

0

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

XML -> XSL-FO = PDF

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

Моя компания использовала эту технику в Java + кокон webaplication для голландского правительства.

+0

Правильно, поэтому я перечислил его как возможность. Раньше я использовал XSL-FO. Он работает, но он медленный и неуклюжий. –

0

http://iecapt.sourceforge.net/

цитирую выше сайта:

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