这个问题如下:Is it possible to pass custom ANT parameters into custom plugin with DITA-OT?
我在DITA-OT / plugins文件夹下有一个名为: com.mymods.pdf 的插件文件夹。简要说明了结构和文件(紧跟这个例子http://dita-ot.github.io/1.8/readme/dita2pdf-customization.html)。插件工作但现在我想将ANT命令行参数传递给mycustom.xsl:
com.mymods.pdf/
cfg/
common/
vars/
en.xml
fo/
attrs/
mycustom.xsl
xsl/
mycustom.xsl
catalog.xml
integrator.xml
plugin.xml
build_mymods_pdf_template.xml (dita2com.mymods.pdf.init target is here and it depends on dita2pdf2)
build.xml (<project><import file="build_mymods_pdf.xml"/></project>)
insertParameters.xml (see the linked question for contents)
那么我需要应用更改和/或添加新文件?
我使用带有“mainANT.xml”的其他位置的插件,该插件具有使用“dita2mymodsPDF”的目标和转换类型。
plugin.xml代码:
<?xml version='1.0' encoding='UTF-8'?>
<plugin id="com.mymods.pdf">
<require plugin="org.dita.pdf2" />
<feature extension="dita.conductor.transtype.check" value="com.mymods.pdf" />
<feature extension="dita.transtype.print" value="com.mymods.pdf" />
<feature extension="dita.conductor.target.relative" file="integrator.xml" />
<feature extension="dita.conductor.com.mymods.pdf.param" file="insertParameters.xml"/>
<extension-point id="dita.conductor.com.mymods.pdf.param" name="PDF XSLT parameters"/>
</plugin>
build_mymods_pdf_template.xml代码:
<?xml version='1.0' encoding='UTF-8'?>
<project name="com.mymods.pdf" default="com.mymods.pdf">
<property name="transtype" value="com.mymods.pdf"/>
<target name="dita2com.mymods.pdf.init">
<property location="${dita.plugin.com.mymods.pdf.dir}/cfg" name="customization.dir" />
<property location="${dita.plugin.com.mymods.pdf.dir}/xsl/fo/topic2fo_shell_fop.xsl" name="args.xsl.pdf" />
<property name="args.chapter.layout" value="BASIC" />
<property name="args.bookmark.style" value="COLLAPSED" />
<!--property name="args.fo.include.rellinks" value="nofamily" /-->
</target>
<target depends="dita2com.mymods.pdf.init, dita2pdf2" name="dita2com.mymods.pdf" />
</project>
也是integrator.xml代码:
<?xml version='1.0' encoding='UTF-8'?>
<project name="com.mymods.pdf">
<target name="dita2com.mymods.pdf.init">
<property location="${dita.plugin.com.mymods.pdf.dir}/cfg" name="customization.dir" />
<property location="${dita.plugin.com.mymods.pdf.dir}/xsl/fo/topic2fo_shell_fop.xsl" name="args.xsl.pdf" />
<property name="args.chapter.layout" value="BASIC" />
<property name="args.bookmark.style" value="COLLAPSED" />
<!--property name="args.fo.include.rellinks" value="nofamily" /-->
</target>
<target depends="dita2com.mymods.pdf.init, dita2pdf2" name="dita2com.mymods.pdf" />
</project>
不完全确定integrator.xml或build_mymods_pdf_template.xml是否与实际应用的一样。但是这个文件集工作并使用mycustom.xsl(其他用于XSLT覆盖的属性和其他)。现在的问题是如何获取我自己的自定义ANT参数,以便插件可以看到它的值。
这对于pdf2插件来说非常简单,但仍然无法在我的 com.mymods.pdf 中使用它。我想我不需要发布catalog.xml,因为它只是告诉哪些“mycustom.xsl”文件正常工作。
答案 0 :(得分:1)
非常简单,不是最干净的方法是:
注意:这适用于DITA-OT 1.8.4检查其他版本的适用性。
按照http://dita-ot.github.io/1.8/readme/dita2pdf-customization.html
创建“insertParameters.xml”,如:http://dita-ot.github.io/1.8/dev_ref/plugin-xsltparams.html
在我的情况下使用以下自定义参数:
<?xml version='1.0' encoding='UTF-8'?>
<dummy>
<!-- EXAMPLE: <param name="paramNameinXSLT" expression="${antProperty}" if="antProperty"/> -->
<param name="custom.data1" expression="${custom.data1}" if="custom.data1"/>
<param name="custom.data2" expression="${custom.data2}" if="custom.data2"/>
</dummy>
现在将此“insertParameters.xml”放入 DITA-OT \ plugins \ org.dita.pdf2
在 xsl \ custom.xsl 下创建对custom.xsl的处理。
以下是custom.xsl
的示例代码段<?xml version='1.0' encoding='UTF-8'?>
<snippet>
<xsl:param name="custom.data1"/>
<xsl:param name="custom.data2"/>
<fo:block><xsl:value-of select="$custom.data1"/></fo:block>
<fo:block><xsl:value-of select="$custom.data2"/></fo:block>
</snippet>
运行integrator.xml将更改集成到DITA-OT中。
提供用于运行PDF方案的命令行命令,例如:“ant dita2mypdf -f -Dcustom.data1 =”myCustomParameter1value“-Dcustom.data2 =”myCustomParameter2value“
运行流程以创建PDF,您的参数应该可见!
这个问题的目的是为了获得一步一步的指令,将所有这些东西设置为100%在自定义插件中工作,而不需要将任何东西添加到DITA-OT默认插件中(甚至不是单个)将文件存入pdf2文件夹,如本解决方案)。这可能会使DITA-OT的更新变得更加容易。
答案 1 :(得分:1)
清洁工?这种方法的替代方案是
将占位符insertParameters.xml
添加到DITA-OT 1.8.5的根目录。该文件不存在于标准DITA-OT 1.8.5
<?xml version='1.0' encoding='UTF-8'?>
<dummy>
<param name="dummy" expression="{$dummy} if="dummy"/>
</dummy>
将覆盖insertParameters.xml
添加到插件的根目录
<?xml version='1.0' encoding='UTF-8'?>
<dummy>
<param name="my.runtime.parameter" expression="{$my.runtime.parameter} if="my.runtime.parameter"/>
</dummy>
然后运行ant -f integrator.xml
答案 2 :(得分:0)
如果不确切知道需要通过哪些参数,就很难回答这个问题。但是,让我们假设你从命令行调用它,并且你已经定义了mymodspdf的转换类型。该命令如下所示:
ant -f build.xml -Dtranstype mymodspdf -Dmyparameter1 paramval1 -Dmyparameter2 paramval2
HTH,
Julio J. Vazquez 写下精神 http://www.writespiritservices.com