Преобразование между форматами документов в C # - PullRequest
0 голосов
/ 17 октября 2008

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

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

Ответы [ 4 ]

3 голосов
/ 17 октября 2008

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

FOP имел тенденцию к ошибкам, и значительное время было потрачено на решение проблем. XSLT и XPaths было трудно выучить. Прошло несколько недель, прежде чем я увидел прошлое за многословием и смог быстро добиться цели. Я не думаю, что я когда-либо вполне разбирался в 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 само по себе является болезненным миром (который может пригодиться tidy ). Далее, если какая-то бедная душа уже не создала FCKEditor xhtml -> xsl-fo xslt для вашей реализации xsl-fo, вам придется ее создать. Это включает в себя изучение xsl-fo, xslt и xpath. По моему опыту, это займет несколько недель и станет мощным решением.

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

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

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

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

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

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

1 голос
/ 17 октября 2008

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

Из Wiki :

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

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

0 голосов
/ 22 ноября 2012

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

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

0 голосов
/ 06 февраля 2009

Очень информативный обмен здесь. Я создал веб-приложение с использованием 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.

...