Преобразование между форматами документов в C#

Каков наилучший способ преобразования HTML, XML и XSL-FO в C#?

У меня уже есть HTML (переданный из FCKEditor), и я хочу распечатать PDF (у меня есть конвертер XSL-> PDF). Я просто не могу найти библиотеку, которая будет конвертировать из HTML во что-нибудь дружественное к XSL.


person Community    schedule 16.10.2008    source источник


Ответы (4)


Год или два назад мне пришлось генерировать PDF-файлы из программы на C++/C#. В конце концов я решил запустить Apache Java FOP как отдельный процесс для преобразования. Опыт работы с xsl-fo был не из приятных. В то время казалось, что не существует ни одного инструмента, полностью реализующего xsl-fo. Инструменты, как правило, выбирают подмножество спецификации и взламывают его. Учитывая расползающуюся сложность xsl-fo, я начинаю задаваться вопросом, будет ли когда-нибудь полная реализация.

FOP, как правило, содержал ошибки, и на решение проблем уходило много времени. XSLT и XPath было трудно освоить. Потребовалось несколько недель, прежде чем я перестал обращать внимание на многословие и смог быстро добиться цели. Я не думаю, что когда-либо полностью разбирался в xsl-fo. Это делает модель html и css похожей на детскую игрушку. К счастью, PDF-файлы генерируются и не вызывают особых проблем. :-)

В любом случае, стоящая задача: создание pdf-файлов из xhtml-вывода из FCKEditor.

Я просто не могу найти библиотеку, которая будет конвертировать из HTML во что-нибудь дружественное к XSL.

Хе. Да, потому что его нет и, вероятно, не будет конвертера html в xsl-fo, который был бы полезен. У такого конвертера есть несколько недостатков: сложность браузеров и сложность xsl-fo. Чтобы такой конвертер мог работать со средним html-документом, ему нужны кишки веб-браузера: макет, поддержка css, возможно, даже JavaScript. Затем он должен взять отрендеренную страницу и выяснить, что нужно xsl-fo, чтобы получить что-то похожее и вписывающееся в ограничения xsl-fo.

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

Так что ты можешь сделать? Что ж, иметь небольшое подмножество html для работы — хорошее начало. Будем надеяться, что вывод FCKEditor будет xhtml, поскольку преобразование html в xml само по себе является миром боли (что аккуратно может пригодиться). Далее, если какой-то бедняга уже не сделал FCKEditor xhtml -> xsl-fo xslt для вашей реализации xsl-fo, вам придется его сделать. Это включает в себя изучение xsl-fo, xslt и xpath. По моему опыту, это займет несколько недель и будет готовым решением.

Для начала работы с xsl-fo мне пригодились следующие ссылки:

Так что же это за xsl-fo, xslt и все такое прочее? XSL-FO: готовы к прайм-тайму? изложены следующим образом:

Семейство расширяемых языков таблиц стилей (XSL) XSL — это семейство рекомендаций по определению преобразования и представления XML-документов. Он состоит из трех частей:

  • Преобразования XSL (XSLT), язык для преобразования XML
  • XML Path Language (XPath) — язык выражений, используемый XSLT для доступа к частям XML-документа или обращения к ним. (XPath также используется спецификацией XML Linking)
  • Объекты форматирования XSL (XSL-FO), словарь XML для определения семантики форматирования.

Мой совет? Бегать. Найдите другого подальше. Найдите другое решение. Создавайте файлы LaTeX и конвертируйте их в pdf. Сгенерируйте что-нибудь еще. Создавайте документы Word и распечатывайте их с помощью PDFCreator. Создавайте изображения. Управляйте Firefox для печати страниц в формате PDF. Найдите подальше, чтобы вообще не нуждаться в pdf-файлах. Что угодно, лишь бы не боролись с html, xsl-fo, FOP, xslt и xpath.

PS: Дайте мне знать, если вам нужна помощь. :-)

person Jonathan Wright    schedule 17.10.2008

Я бы сначала попробовал XSLT. Когда вы говорите о форматировании XML-документов (а это почти то, о чем вы говорите), это инструмент, предназначенный для этого.

Из Вики:

«Общая идея использования XSL-FO заключается в том, что пользователь пишет документ не на языке FO, а на языке XML. Возможности XHTML, DocBook и TEI, но это может быть любой язык XML. Затем пользователь получает XSLT-преобразование, либо самостоятельно написав его, либо найдя его для рассматриваемого типа документа. Это XSLT-преобразование преобразует XML в XSL-FO».

Вам нужно преобразование XSLT для HTML в XSL-FO. Не уверен, где его взять, но, видимо, концепция не чужая.

person Community    schedule 16.10.2008

Очень информативный обмен здесь. Я создал веб-приложение с использованием ASP.NET и C#.NET для своего ИТ-контракта. Одной из основных целей веб-приложения является создание индивидуальных резюме в различных форматах. Я храню свое резюме в базе данных SQL Server и строю XML в основном в необработанном виде методом C#. Я использовал XSLT для преобразования в HTML и с небольшой неловкостью наконец-то получил простое презентабельное резюме. Моя следующая цель — получить печатную версию резюме. Я взял в библиотеке книгу по XML и немного подправил XSLT. Затем я перешел к главе XSL-FO. Вот когда ударил айсберг. Я хотел взять на себя задачу иметь вариант PDF, который был бы выбором меню и выполнять преобразование из XSLT в XSL-FO в PDF. Дело в том, что во всех книжных рекомендациях были ссылки на коммерческие продукты. Это просто не стоит денег, так как PDF не нужен. Я посмотрел на Altova XMLSpy в течение 30 дней, но как только я попробовал свое первое преобразование файла примера XSL-FO, я получил сообщение о том, что мне нужно загрузить больше программного обеспечения. Эта загрузка длилась целую вечность с их сайта, поэтому я сдался и удалил программное обеспечение. Бесплатные версии коммерческого программного обеспечения от других поставщиков не имеют возможности преобразования. После прочтения заметок здесь я решил сам избегать XSL-FO. Сейчас я попытаюсь получить версию для MS Word, и если мои клиенты захотят преобразовать ее в PDF, они могут заплатить за версию для создания PDF в Adobe.

person Community    schedule 06.02.2009

Это мертвый вопрос, но я хотел бы добавить для будущих читателей, что текущая версия FCKEditor (сейчас CKEditor) лучше подходит для создания высококачественного XHTML (возможен даже определяемый пользователем набор тегов).

Я обошел подобные проблемы, фактически не используя XSL-FO, а используя конвертер (X) HTML в PDF, который отображает PDF из вашего источника без XSL-преобразований. Я проверяю полученный XHTML и исправляю редкие проблемы с помощью HtmlAgilityPack — таким образом вы избавитесь от несемантических сложностей HTML. Есть много конвертеров на выбор, мой выбор - wkhtmltopdf (если деньги не проблема, PrinceXML - лучшая альтернатива - я бы с удовольствием использовал его, но он слишком дорог).

person Joel Peltonen    schedule 22.11.2012