idml

2012-09-18 3 views
5

में दृश्य तत्व के लिए निर्देशांक की पहचान करें मुझे इंडेक्सिन आईडीएमएल फ़ाइलों को संसाधित करने, छवि उत्पन्न करने और HTML में कुछ तत्वों पर अन्य तत्वों को ओवरले करने की आवश्यकता है।idml

एक इंडिज़ीन आईडीएमएल फ़ाइल (जो ज़िप्ड एक्सएमएल का एक पैकेज है) को देखते हुए और उस फ़ाइल में एक दृश्य तत्व (एक्सएमएल में टैग के माध्यम से) दिया गया। क्या दृश्य तत्व गिरने वाली छवि पर निर्देशांक खोजने का कोई तरीका है?

उत्तर

10

के लिए धन्यवाद एक IDML दस्तावेज़ में चित्र के लिए कंटेनरों के पदानुक्रम है इस प्रकार है:

दस्तावेज़ [शामिल]> फैले> PageItem> PlacedImage । पेजों को कंटेनरों के रूप में उपयोग नहीं किया जाता है, और पेज इटम्स फैल निर्देशांक में संग्रहीत होते हैं, इसलिए हम दस्तावेज़ और पेज तत्वों के बारे में भूल सकते हैं। यदि आप स्प्रेड निर्देशांक में एक अनुमानित छवि पा सकते हैं, और उन तारों को दोबारा दबाएं तो 0,0 आपकी स्क्रीन के ऊपरी बाईं ओर है, तो आप एक छवि को स्थिति में रख सकते हैं क्योंकि यह इनडिज़ीन दस्तावेज़ में था।

एक पृष्ठ आइटम (जिसमें एक छवि है) में आईडीएमएल में ज्यामितीय सीमाएं नहीं हैं। अपनी सीमा, PathGeometry टैग के भीतर PathPointType ऑब्जेक्ट की श्रृंखला के रूप में जमा हो जाती है इस तरह:

<Properties> 
      <PathGeometry> 
       <GeometryPathType PathOpen="false"> 
        <PathPointArray> 
         <PathPointType Anchor="-32.04 -35.04" LeftDirection="-32.04 -35.04" RightDirection="-32.04 -35.04" /> 
         <PathPointType Anchor="-32.04 35.04" LeftDirection="-32.04 35.04" RightDirection="-32.04 35.04" /> 
         <PathPointType Anchor="32.04 35.04" LeftDirection="32.04 35.04" RightDirection="32.04 35.04" /> 
         <PathPointType Anchor="32.04 -35.04" LeftDirection="32.04 -35.04" RightDirection="32.04 -35.04" /> 
        </PathPointArray> 
       </GeometryPathType> 
      </PathGeometry> 
     </Properties> 

आप सीमा अपने आप को बस पर्याप्त न्यूनतम/सबसे बड़ी अंक मान रही, सीमा मानते हुए चारों ओर अपने पेज मद है द्वारा गणना कर सकते हैं एक चतुर्भुज। फिर आप आइटम को बदलने की जरूरत है

ItemTransform="1 0 0 1 509.27559055100005 -123.76377952749999" 

... और आप के लिए अनुमति देने के लिए जहां IDML सोचता 0,0 है (जो बदलने का मूल है) की जरूरत है।

एक्स अक्ष में, 0 बाध्यकारी स्थान होगा (जो परिवर्तनीय है - एक पृष्ठ दस्तावेज़ में यह आमतौर पर प्रसार का बायां हाथ किनारा होता है, लेकिन दो पृष्ठ दस्तावेज़ में यह प्रसार का केंद्र हो सकता है) । यह वह जगह है जहां आपको पृष्ठों की आवश्यकता होगी। बाइंडिंग लोकेशन को पूर्णांक के रूप में व्यक्त किया जाता है (पहले पृष्ठ से पहले 0, पहले और दूसरे के बीच के लिए 1)। आपको पिछले पृष्ठों के आइटम ट्रान्सफॉर्म जोड़कर इसके समन्वय मिलते हैं।

वाई अक्ष में, एडोब को सबसे अच्छी तरह से ज्ञात कारणों से, 0 प्रसार का लंबवत केंद्र है (या तो ऊपर या नीचे, जैसा कि आप उम्मीद कर सकते हैं)।

आईडीएमएल दस्तावेज़ों में समन्वय उदाहरण हैं: http://www.photoshopelementsmac.com/devnet/indesign/documentation.html जिसमें एक समन्वय स्थान से दूसरे में अनुवाद शामिल है।

इसके अलावा, एक पेज मद (जो ज्यामितीय सीमा देता है), एक रखा छवि ग्राफिक सीमा है, जो इसे आगे ऑफसेट कर सकते हैं, साथ ही साथ के अपने स्वयं के सेट है अपनी ही ItemTransform

तो भीतर, जवाब देने के लिए अपने सवाल है, तो आप IDML ज़िप फ़ाइल को अनपैक करने, एक्सएमएल में छवि खोजने की आवश्यकता होगी, तो जैसे एक योग कुछ करना:

// Pseudo-code: 
// Calculate PageItem GeometricBounds First as noted above 
X: (Spread.BindingLocation) + Spread.ItemTransform.tx + PageItem.itemTransform.tx + PageItem.GeometricBounds.Left + PlacedImage.ItemTransform.tx + PlacedImage.GraphicBounds.Left 

Y: (Half Spread Height) + Spread.ItemTransform.ty + PageItem.itemTransform.ty + PageItem.GeometricBounds.Top+ PlacedImage.ItemTransform.ty + PlacedImage.GraphicBounds.Top 

ओह, एक और बात: सभी IDML coords अंक में हैं। यदि आप पिक्सेल में परिणाम प्राप्त करना चाहते हैं तो आपको अपनी स्क्रीन के पीपीआई द्वारा विभाजित 72 तक सभी मानों को विभाजित करने की आवश्यकता होगी।

1

एक पृष्ठ पर प्रत्येक <PageItem>ItemTransform विशेषता का उपयोग करता, पैमाने पर करने के घुमाने के लिए, कतरनी, और खुद अपनी युक्त तत्व के सापेक्ष बदलने (तकनीकी रूप से PageItem XML तत्व मौजूद नहीं है लेकिन एक आयत, ओवल, आदि तत्व हो सकता है) ।

<PageItem> के भीतर, अपने आकार <PathGeometry> तत्व और उसके युक्त तत्वों (IDML reference उदाहरण के साथ विस्तार से इस का वर्णन करता है) से निर्धारित होता है, यह भी JcFx के जवाब का संदर्भ लें।

भारी सुधारा जवाब IDML विनिर्देश के आधार पर: JcFx

+0

तो, मुझे यकीन नहीं है कि उस ज्ञान को कैसे लागू करें। मेरे पास एक idml फ़ाइल है जिसे मैं इंडिज़िन सर्वर पर भेजता हूं जो अंततः एक छवि देता है। क्या आप कह रहे हैं कि मुझे एक स्क्रिप्ट उत्पन्न करनी चाहिए और सर्वर को सर्वर के लिए एक और दौर यात्रा करना चाहिए? –

+0

मुझे यकीन नहीं है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। क्या आप कह रहे हैं कि आप एक आईडीएमएल फ़ाइल को बदलकर एक छवि (वेक्टर कला) उत्पन्न करने की कोशिश कर रहे हैं? क्या कोई पूर्व-मौजूदा छवि है जिसे आप संशोधित कर रहे हैं? क्या आप खरोंच से एक छवि बना रहे हैं? –

+0

@ जोश वोइग्स - पेज इटम्स स्प्रेड निर्देशांक में आईडीएमएल में संग्रहीत हैं, इसलिए पेज जियोमेट्रिकबाउंड्स बहुत मदद नहीं कर रहे हैं। दुर्भाग्य से छवि में कोई भी ज्यामितीय बाउंड नहीं होगा (कम से कम आईडीएमएल में संग्रहीत नहीं किया जाएगा) - नीचे मेरा पूरा उत्तर देखें। – JcFx