【问题标题】:How to pass command line parameter to XSL transformation with FOP如何使用 FOP 将命令行参数传递给 XSL 转换
【发布时间】:2014-02-24 15:40:57
【问题描述】:

我的 XSL 文件中有以下变量:

<xsl:variable name="mFileName" select="'MsgMap.xml'"/>

本质上是消息 ID 与该消息的文本的映射。

我正在使用 fop.bat 调用我的转换

fop.bat -xml in.xml -xsl xsl.xsl -pdf out.pdf

那么是否可以从命令行将此变量传递给转换,以便我可以从命令行设置消息文件名?

谢谢

【问题讨论】:

    标签: xml xslt command-line xslt-1.0 apache-fop


    【解决方案1】:

    根据FOP 页面:

    USAGE
    Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl|-ps|-txt|-at [mime]|-print] <outfile>
     [OPTIONS]
      -d                debug mode
      -x                dump configuration settings
      -q                quiet mode
      -c cfg.xml        use additional configuration file cfg.xml
      -l lang           the language to use for user information
      -r                relaxed/less strict validation (where available)
      -dpi xxx          target resolution in dots per inch (dpi) where xxx is a number
      -s                for area tree XML, down to block areas only
      -v                to show FOP version being used
    
      -o [password]     PDF file will be encrypted with option owner password
      -u [password]     PDF file will be encrypted with option user password
      -noprint          PDF file will be encrypted without printing permission
      -nocopy           PDF file will be encrypted without copy content permission
      -noedit           PDF file will be encrypted without edit content permission
      -noannotations    PDF file will be encrypted without edit annotation permission
      -pdfprofile prof  PDF file will be generated with the specified profile
                        (Examples for prof: PDF/A-1b or PDF/X-3:2003)
    
     [INPUT]
      infile            xsl:fo input file (the same as the next)
      -fo  infile       xsl:fo input file
      -xml infile       xml input file, must be used together with -xsl
      -atin infile      area tree input file
      -xsl stylesheet   xslt stylesheet
    
      -param name value <value> to use for parameter <name> in xslt stylesheet
                        (repeat '-param name value' for each parameter)
    
     [OUTPUT]
      outfile           input will be rendered as PDF into outfile
      -pdf outfile      input will be rendered as PDF (outfile req'd)
      -pdfa1b outfile   input will be rendered as PDF/A-1b compliant PDF
                        (outfile req'd, same as "-pdf outfile -pdfprofile PDF/A-1b")
      -awt              input will be displayed on screen
      -rtf outfile      input will be rendered as RTF (outfile req'd)
      -pcl outfile      input will be rendered as PCL (outfile req'd)
      -ps outfile       input will be rendered as PostScript (outfile req'd)
      -afp outfile      input will be rendered as AFP (outfile req'd)
      -tiff outfile     input will be rendered as TIFF (outfile req'd)
      -png outfile      input will be rendered as PNG (outfile req'd)
      -txt outfile      input will be rendered as plain text (outfile req'd)
      -at [mime] out    representation of area tree as XML (outfile req'd)
                        specify optional mime output to allow AT to be converted
                        to final format later
      -print            input file will be rendered and sent to the printer
                        see options with "-print help"
      -out mime outfile input will be rendered using the given MIME type
                        (outfile req'd) Example: "-out application/pdf D:\out.pdf"
                        (Tip: "-out list" prints the list of supported MIME types)
      -mif outfile      input will be rendered as MIF (FrameMaker) (outfile req'd)
                        Experimental feature - requires additional fop-sandbox.jar.
      -svg outfile      input will be rendered as an SVG slides file (outfile req'd)
                        Experimental feature - requires additional fop-sandbox.jar.
    
      -foout outfile    input will only be XSL transformed. The intermediate
                        XSL-FO file is saved and no rendering is performed.
                        (Only available if you use -xml and -xsl parameters)
    
     [Examples]
      Fop foo.fo foo.pdf
      Fop -fo foo.fo -pdf foo.pdf (does the same as the previous line)
      Fop -xml foo.xml -xsl foo.xsl -pdf foo.pdf
      Fop -xml foo.xml -xsl foo.xsl -foout foo.fo
      Fop foo.fo -mif foo.mif
      Fop foo.fo -rtf foo.rtf
      Fop foo.fo -print or Fop -print foo.fo
      Fop foo.fo -awt
    

    具体来说:

    -param name value <value> to use for parameter <name> in xslt stylesheet   (repeat -param name value' for each parameter)
    

    另外,改变:

    <xsl:variable name="mFileName" select="'MsgMap.xml'"/>
    

    收件人:

    <xsl:param name="mFileName" select="'MsgMap.xml'"/>
    

    所以你的命令行看起来像这样:

    fop.bat -xml in.xml -xsl xsl.xsl -pdf out.pdf -param  mFileName "yourfile.xml"
    

    【讨论】:

    • 这正是我所需要的。谢谢
    【解决方案2】:

    如果您可以用顶级&lt;xsl:param&gt; 替换您的&lt;xsl:variable&gt;,那么您可以使用该参数设置值

    fop.bat -xml in.xml -xsl xsl.xsl -pdf out.pdf -param mFileName MsgMap.xml
    

    【讨论】:

    • 感谢您的回答,但我已将 Phil 标记为正确,因为它更详细。
    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 2012-09-01
    • 2020-08-02
    • 2014-01-13
    • 2020-09-02
    • 2014-05-03
    • 2011-10-14
    相关资源
    最近更新 更多