2010-05-17 17 views
6

के साथ एक निर्देशिका के माध्यम से बार-बार दोहराना मान लीजिए कि निम्न पथों के साथ मैं पीडीएफ फाइलों का एक संग्रह करते हैं:चींटी

/some/path/pdfs/birds/duck.pdf 
/some/path/pdfs/birds/goose.pdf 
/some/path/pdfs/insects/fly.pdf 
/some/path/pdfs/insects/mosquito.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 

मैं इसे चींटी में करना चाहता हूं। मान लें मैं कमांड लाइन पर Ghostscript का उपयोग करने के लिए जा रहा हूँ और मैं पहले से ही जी एस करने के लिए कॉल बाहर काम किया है:

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

तो मुझे क्या करना ${thumbnail.image.path} के लिए सही मूल्यों बाहर काम कर रहा है की जरूरत है क्या और ${input.pdf.path} जबकि traversing पीडीएफ इनपुट निर्देशिका।

मुझे एंटी-कॉन्ट्रिब तक पहुंच है (बस "नवीनतम" स्थापित किया गया है, जो कि 1.0b3 है) और मैं चींटी 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} संपत्ति एक पूर्ण पथ है, और मैं रिश्तेदार घटकों में यह सड़ते के किसी भी आसान तरीका नहीं मिल रहा।

यदि मैं केवल कस्टम कार्य का उपयोग करके ऐसा कर सकता हूं, तो मुझे लगता है कि मैं एक लिख सकता हूं, लेकिन मुझे आशा है कि मैं केवल मौजूदा घटकों को एक साथ जोड़ सकता हूं।

उत्तर

6

अनुक्रमिक कार्य में आप आउटपुट में इनपुट पथ को मैप करने के लिए 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 करने के लिए।

+0

यह बहुत दिलचस्प लगता है। क्या आप यह दिखाने के लिए अपने कोड का विस्तार कर सकते हैं कि मैं इसका उपयोग कैसे करूं? यानी मैं इसे कार्य के संयोजन के साथ उपयोग करता हूं, और यदि ऐसा है, तो क्या यह में जाता है? –

2

पूर्णता के लिए, यहां मैं मार्टिन क्लेटन के उत्तर के आधार पर एक लक्ष्य के लिए आया था। यह केवल विंडोज़ पर ही काम करता है, लेकिन ऐसा इसलिए है क्योंकि मैक ओएस एक्स पर अभी तक गैर-प्रॉक्सी तरीके से घोस्टस्क्रिप्ट स्थापित करने के लिए मुझे नहीं मिला है। ध्यान दें कि क्रॉस-प्लेटफ़ॉर्म समाधान होने के लिए मुझे फ़ाइल विभाजक को "साफ़ करना" था केवल लगातार-स्लैश रहें।

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

क्या आप समझा सकते हैं कि अंतिम 2 'propertyregex' क्या करता है, वास्तव में प्रतिस्थापन नहीं मिलता है? हो सकता है कि कुछ इनपुट और अपेक्षित आउटपुट उदाहरण – jm2

+0

की मदद करेंगे आपकी संपत्ति regex ने मेरी जिंदगी यहां सहेजी है ... हालांकि मैं यह इंगित करना चाहता हूं कि "ओवरराइड" संपत्ति "सत्य" या "झूठी" स्वीकार करती है। चियर्स – Aakash