假设我有以下路径的PDF文件集合:

/some/path/pdfs/birds/duck.pdf
/some/path/pdfs/birds/goose.pdf
/some/path/pdfs/insects/fly.pdf
/some/path/pdfs/insects/mosquito.pdf

我想做的是为每个PDF生成尊重相对路径结构的缩略图,然后输出到另一个位置,即:
/another/path/thumbnails/birds/duck.png
/another/path/thumbnails/birds/goose.png
/another/path/thumbnails/insects/fly.png
/another/path/thumbnails/insects/mosquito.png

我希望在Ant中完成此操作。假设我将在命令行上使用Ghostscript,并且我已经计算出对GS的调用:
    <exec executable="${ghostscript.executable.name}">
        <arg value="-q"/>
        <arg value="-r72"/>
        <arg value="-sDEVICE=png16m"/>
        <arg value="-sOutputFile=${thumbnail.image.path}"/>
        <arg value="${input.pdf.path}"/>
    </exec>

因此,我需要做的是在遍历PDF输入目录时为${thumbnail.image.path}${input.pdf.path}设置正确的值。

我可以访问ant-contrib(仅安装了“最新版本”,即1.0b3),并且使用的是Ant 1.8.0。我想我可以使用<for>任务,<fileset><mapper>来使某些工作正常进行,但是我很难将它们放在一起。

我尝试了类似的东西:
    <for param="file">
        <path>
            <fileset dir="${some.dir.path}/pdfs">
                <include name="**/*.pdf"/>
            </fileset>
        </path>
        <sequential>
            <echo message="@{file}"/>
        </sequential>
    </for>

但是不幸的是,@{file}属性是一条绝对路径,我找不到将其分解为相关组件的任何简单方法。

如果我只能使用自定义任务来完成此任务,那么我想我可以编写一个任务,但是我希望可以将现有组件组合在一起。

最佳答案

在顺序任务中,您可能可以使用ant-contrib propertyregex任务将输入路径映射到输出。例如:

<propertyregex override="yes" property="outfile" input="@{file}"
               regexp="/some/path/pdfs/(.*).pdf"
               replace="/another/path/\1.png" />

哪个映射,例如/some/path/pdfs/birds/duck.pdf/another/path/birds/duck.png

10-07 16:10
查看更多