在C#中使用HTML,XML和XSL-FO进行转换的最佳方法是什么?
我已经有了HTML(来自FCKEditor)并且我想要打印PDF(我有一个XSL-> PDF转换器)。我似乎无法找到一个可以从HTML转换为任何XSL友好的库。
答案 0 :(得分:3)
一两年后,我不得不从C ++ / C#程序生成pdf。最后,我决定启动Apache的Java FOP作为进行转换的单独进程。 xsl-fo的体验并不令人愉快。当时,似乎没有一个工具完全实现了xsl-fo。工具倾向于挑选规范的一个子集并进行破解。鉴于xsl-fo的庞大复杂性,我开始怀疑是否会有完整的实现。
FOP往往是错误的,并且花费了大量时间来解决问题。 XSLT和XPath很难学习。我花了几周的时间才看到了冗长的事情,并且可以很快完成任务。我不认为我曾经对xsl-fo感到满意。它使html和css模型看起来像一个孩子的玩具。幸运的是,pdfs生成,并没有太多问题。 : - )
无论如何,手头的任务是:从FCKEditor的xhtml输出生成pdf。
我似乎无法找到一个可以从HTML转换为任何XSL友好的库。
嘿。是的,那是'因为没有一个,并且可能不会是xsl-fo转换器的任何好处。这样的转换器有一些不利因素:浏览器的复杂性和xsl-fo的复杂性。对于这样一个转换器来处理一个普通的html文档,它需要一个Web浏览器的胆量:布局,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: Ready for Prime Time?将其列为:
可扩展样式表语言系列(XSL)XSL是一系列用于定义XML文档转换和表示的建议。它由三部分组成:
- XSL转换(XSLT),一种用于转换XML的语言
- XML Path Language(XPath),XSLT用于访问或引用XML文档部分的表达式语言。 (XML链接规范也使用XPath)
- XSL格式化对象(XSL-FO),一种用于指定格式化语义的XML词汇表
我的建议?跑。找另一个。寻找其他方案。生成LaTeX文件,并将它们转换为pdf文件。生成别的东西。制作Word文档并使用PDFCreator打印它们。生成图像。控制Firefox将页面打印为pdf。找个答案,以避免需要pdf。任何东西,只要它不与html,xsl-fo,FOP,xslt和xpath作战。
PS:如果您需要任何帮助,请告诉我。 : - )
答案 1 :(得分:1)
我先试试XSLT。当你谈论格式化XML文档时(这就是你所说的),这就是设计用来实现它的工具。
来自Wiki:
“XSL-FO使用背后的一般思路 是用户写文档, 不是在FO中,而是在XML语言中。 XHTML,DocBook和TEI都是 可能性,但它可以是任何XML 语言。然后,用户获得 XSLT转换,可以写一个 他们自己或找到一个 有问题的文件类型。这个XSLT transform将XML转换为 XSL-FO“。
您需要将XSLT转换为HTML到XSL-FO。不知道从哪里得到一个,但显然这个概念不是外星人。
答案 2 :(得分:0)
这里提供非常丰富的信息。我已经为我的IT合同业务使用ASP.NET和C#.NET创建了一个Web应用程序。 Web应用程序的主要目标之一是生成各种格式的自定义简历。我将我的简历内容存储在SQL Server数据库中,并使用C#方法构建XML。我使用XSLT转换为HTML,并且带着一点尴尬终于得到了一个基本的可呈现的简历。我的下一个目标是获得简历的可打印版本。我从图书馆得到了一本关于XML的书,并稍微修改了一下XSLT。然后我来到了XSL-FO章节。那是冰山袭来的时候。我想接受挑战,有一个PDF选项,这将是一个菜单选择,并转换到XSLT到XSL-FO到PDF。事情是所有书籍建议都参考了商业产品。由于PDF不是必需的,所以这笔钱是不值得的。我在30天的路径上查看了Altova XMLSpy,但是当我尝试第一次转换XSL-FO示例文件时,我收到一条消息,说明我需要下载更多软件。这个下载是从他们的网站永远,所以我放弃并删除了该软件。来自其他供应商的免费版商业软件没有转换选项。在阅读了这里的笔记后,我决定自己避免使用XSL-FO。我现在要尝试获取MS Word版本,如果我的客户希望将其转换为PDF,他们可以从Adobe支付PDF创建版本。
答案 3 :(得分:0)
这是一个死的问题,但我想为未来的读者添加FCKEditor(现在的CKEditor)的当前版本更好地生成高质量的XHTML(甚至可以使用用户可定义的标签集)。
我通过实际上不使用XSL-FO而是使用(X)HTML到PDF转换器来解决类似问题,该转换器在没有XSL转换的情况下从您的源呈现PDF。我验证了生成的XHTML并修复了HtmlAgilityPack的罕见问题 - 这种方式将使您从非语义HTML复杂性中获得很长的路要走。有很多转换器可供选择,我的选择是wkhtmltopdf(如果钱不是问题,PrinceXML是一个更好的选择 - 我很乐意使用它,但它太贵了。)