【问题标题】:XML to XSL-FO C#.NETXML 到 XSL-FO C#.NET
【发布时间】:2015-09-23 12:52:30
【问题描述】:

如何使用 C#.NET 中的 xsl 样式表从 XML 文档转换/转换/创建 xsl-fo 文件?

我想要实现的是一个 REST 服务,用于将 PDF “打印”到浏览器。 XML 是通过另一个 REST 服务加载的,样式表是预定义的,并且作为资源位于我的项目中。

这是到目前为止的代码,只是为了演示我所追求的结构:(注意返回类型 String 仅用于故障排除,一旦我进一步将被替换)

    public String GetPDFList(String apiquery, String template)
    {
        String returnString;

        /* BUILD QUERY TO GET XML CONTENT */
        string returnUrl = api_url + apiquery + api_key;

        /* BUILD XML CONTENT TO DOCUMENT */
        XmlDocument doc = new XmlDocument();
        doc.Load(returnUrl);

        /* GENERATE XSL-FO FILE FROM XML AND XSL STYLESHEET */
        /* TODO */

        /* GENERATE PDF FROM XSL-FO FILE */
        /* TODO */

        /* RETURN PDF TO CLIENT */
        /* TODO */

        return returnUrl; 
    }

编辑:我目前正在尝试使用 fo.net 库来实现这一点,但我找不到任何有关如何执行创建 xsl-fo 文件的单一任务的文档。

【问题讨论】:

  • 你必须使用类似这个库fonet.codeplex.com
  • 是的,我正在将 fo.net 作为此解决方案的库,但我找不到任何有关如何执行此步骤的文档或示例。我在 codeplex (codeproject.com/Articles/595650/Creating-PDF-documents-from-XML) 看到了整个项目的示例,但我似乎无法使用它进行修改。学习如何使用不同的功能似乎有点太复杂了。我的问题应该更清楚,对此我深表歉意,并感谢您的评论!
  • 从内存中,您将执行一个普通的 xml => XSL-T 转换来生成您的 FO。但是,这首先需要您了解所有 FO 语法,以便让您的文档通过 FO 解析器生成 PDF。我会试着给你找个例子。简而言之,您只是在 XML 上执行 XSL-T。
  • 我找到了我的示例,我正在使用 FOP 生成最终的 pdf。你看过这些吗? xmlgraphics.apache.org/fop
  • Apache FOP 是否适用于 Java? fo.net 是与 c# 一起使用的 apache 端口吗?另外,我已经有 xsl 文件来描述输出的样式,但是我缺少将 xml 转换为 xsl-fo 的链接(使用 xsl 样式表)。还是我完全误解了这背后的逻辑?

标签: c# xml pdf xslt xsl-fo


【解决方案1】:
XmlDocument oXML = new XmlDocument();

oXML = LoadXml("And xml string or do the load from file");

// if data loaded from memory save to disk first
oXML.Save(xmlpath)

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(FoXSLtPATH);

// Execute the transform and output the results to a file.
// Ready for the FO engine to generate PDF from
xslt.Transform(xmlpath, FoToConsumeOutputPath);

【讨论】:

  • 谢谢 DubMan,我假设 oXML = LoadXml(...) 可以替换为:oXML.load(fromURL);? FoXSLtPATH 变量应该代表什么?我想在哪里存储 fo 文件?最后是 FoToConsumeOutputPath,它代表什么?
  • 第一点,是的,第二点 FoXSLtPath 是 XSL-t 的输入路径,你说你已经应用到你的 XML,第三点,FoToConsumeOutputPath 是输出路径把输出。这就是准备好输入您创建 PDF 的 FO 解析器的内容。至少我的工作是这样的。这就是我用来输入 FOP 的输出路径,它会生成我的 PDf 文档。希望对您有所帮助。
  • 我很抱歉我在这个问题上完全愚蠢,并感谢您的帮助。您知道在执行 xslt.Transform 时可能导致服务抛出此异常的原因吗?:{“找不到与命名空间 'xml.apache.org/xslt/java'. 关联的脚本或扩展对象。”}。发生的情况是 fo 文件已创建但未完成,这意味着它没有所有结束标签等。我认为这个异常可能是它的原因。
  • @JonathanLind,该异常意味着您的 XSLT 不是纯 XSLT,而是依赖于特定 XSLT 处理器(可能是 Xalan Java)的扩展函数或扩展对象。您需要将样式表代码重写为纯 XSLT 或 XSLT + .NET 扩展,以便能够使用 XslCompiledTransform 执行它。
  • @Martin Honnen,谢谢!你是绝对正确的,我注意到我在 xslt 文件中有一些 Java 引用。我会将这个问题标记为已回答,并感谢大家帮助我解决这个让我非常头疼的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2012-03-15
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多