Frage

Lassen Sie uns sagen, ich habe eine Sammlung von PDF-Dateien mit den folgenden Pfaden:

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

Was Ich mag würde zu heißt Thumbnails für jede PDF generieren tun, die die relative Pfadstruktur achten und Ausgang an einem anderen Ort, das heißt:.

/another/path/thumbnails/birds/duck.png
/another/path/thumbnails/birds/goose.png
/another/path/thumbnails/insects/fly.png
/another/path/thumbnails/insects/mosquito.png

Ich möchte dies in Ant getan werden. Angenommen, ich werde Ghost auf der Kommandozeile verwenden, und ich habe bereits aus dem Aufruf von GS gearbeitet:

    <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>

Also, was ich tun muß, ist Arbeit der richtigen Werte für ${thumbnail.image.path} und ${input.pdf.path} während des PDF-Eingabeverzeichnis durchquert.

Ich habe Zugang zu ant-contrib (nur die „neuesten“ installiert, die 1.0b3 ist) und ich bin mit Ant 1.8.0. Ich glaube, ich kann etwas Arbeit mit der <for> Aufgabe, <fileset>s und <mapper>s machen, aber ich habe Probleme setzen sie alle zusammen.

Ich habe versucht, so etwas wie:

    <for param="file">
        <path>
            <fileset dir="${some.dir.path}/pdfs">
                <include name="**/*.pdf"/>
            </fileset>
        </path>
        <sequential>
            <echo message="@{file}"/>
        </sequential>
    </for>

Aber leider ist die @{file} Eigenschaft ist ein absoluter Pfad, und ich kann nicht auf einfache Weise finden sie in die jeweiligen Komponenten zu zersetzen.

Wenn ich das mit einer benutzerdefinierten Aufgabe nur tun kann, ich denke, ich eine schreiben konnte, aber ich hoffe, ich kann einfach zusammen bestehende Komponenten anschließen.

War es hilfreich?

Lösung

In der sequentiellen Aufgabe könnten Sie möglicherweise in der Lage sein, den ant-contrib propertyregex Aufgabe, die Eingangspfade zur Ausgabe abzubilden. Zum Beispiel:

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

Welche Karten, zum Beispiel /some/path/pdfs/birds/duck.pdf zu /another/path/birds/duck.png.

Andere Tipps

Aus Gründen der Vollständigkeit, hier ist, was ich mit für ein Ziel kam basierend auf Antwort des martin clayton. Es funktioniert nur unter Windows für jetzt, aber das ist, weil ich nicht auf die Installation von Ghostscript in einem nicht-Proxy-Art und Weise noch auf Mac OS X. Hinweis bekommen haben um, dass eine plattformübergreifende Lösung, die ich zu „schrubben“ sein musste die Datei Separatoren sein konsequent zukunfts slash nur.

<target name="make-thumbnails" depends="">
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="/path/to/ant-contrib-1.0b3.jar"/>
        </classpath>
    </taskdef>

    <condition property="ghostscript.executable.name" value="/path/to/gswin32c.exe">
        <os family="windows"/>
    </condition>
    <condition property="ghostscript.executable.name" value="">
        <os family="mac"/>
    </condition>

    <for param="file">
        <path>
            <fileset dir="/path/to/pdfs">
                <include name="**/*.pdf"/>
            </fileset>
        </path>
        <sequential>
            <propertyregex override="yes" property="file-scrubbed" input="@{file}"
                                regexp="\\"
                                replace="/" />
            <propertyregex override="yes" property="output-path-directory-fragment" input="${file-scrubbed}"
                                regexp=".*/pdfs/(.*)/.+\.pdf"
                                replace="\1" />
            <propertyregex override="yes" property="output-path-file-fragment" input="${file-scrubbed}"
                                regexp=".*/pdfs.*/(.+)\.pdf"
                                replace="\1.png" />
            <mkdir dir="${thumbnails.base.dir}/${output-path-directory-fragment}"/>
            <exec executable="${ghostscript.executable.name}">
                <arg value="-q"/>
                <arg value="-dLastPage=1"/>
                <arg value="-dNOPAUSE"/>
                <arg value="-dBATCH"/>
                <arg value="-dSAFER"/>
                <arg value="-r72"/>
                <arg value="-sDEVICE=png16m"/>
                <arg value="-sOutputFile=${thumbnails.base.dir}/${output-path-directory-fragment}/${output-path-file-fragment}"/>
                <arg value="${file-scrubbed}"/>
            </exec>
        </sequential>
    </for>
</target>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top