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

Как лучше всего конвертировать HTML, XML и XSL-FO в C#?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
2 606
4

Ответы 4

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

От Вики:

"The general idea behind XSL-FO's use is that the user writes a document, not in FO, but in an XML language. XHTML, DocBook, and TEI are all possibilities, but it could be any XML language. Then, the user obtains an XSLT transform, either by writing one themselves or by finding one for the document type in question. This XSLT transform converts the XML into XSL-FO."

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

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

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

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

I just can't seem to find a library that will convert from HTML into anything XSL friendly.

Хех. Да, это потому, что его нет, и, вероятно, не будет хорошего конвертера 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: Готовы к прайм-тайму? представляет это как:

The Extensible Stylesheet Language Family (XSL) XSL is a family of recommendations for defining XML document transformation and presentation. It consists of three parts:

  • XSL Transformations (XSLT), a language for transforming XML
  • The XML Path Language (XPath), an expression language used by XSLT to access or refer to parts of an XML document. (XPath is also used by the XML Linking specification)
  • XSL Formatting Objects (XSL-FO), an XML vocabulary for specifying formatting semantics

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

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

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

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

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

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