heirarchy pojemników na obrazie w dokumencie IDML jest następująca:
Dokument [Zawiera]> Rozprzestrzenianie> PageItem> PlacedImage . Strony nie są używane jako kontenery, a strony są przechowywane we współrzędnych rozłożonych, więc możemy zapomnieć o dokumencie i elementach strony. Jeśli możesz znaleźć współrzędne rozmieszczonego obrazu w rozkładaniu i zmienić te współrzędne, tak aby w lewym górnym rogu ekranu znajdowało się 0,0, możesz umieścić obraz tak, jak był w dokumencie InDesign.
Element strony (zawierający obraz) nie ma granic geometrycznych w IDML. Jej granice są przechowywane w postaci tablicy obiektów PathPointType w tagu PathGeometry, tak:
<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>
Można obliczyć granice siebie wystarczy po prostu poprzez uzyskanie najniższych/największe wartości punktowe, zakładając granicę wokół przedmiot strona jest prostokąt. Następnie trzeba element transformacji
ItemTransform="1 0 0 1 509.27559055100005 -123.76377952749999"
... i trzeba umożliwić gdzie IDML myśli 0,0 to (co jest początkiem transformacji).
w osi X 0 zostanie położenie wiązania (co jest zmienna - w jednym dokumencie strony jest to zwykle lewej krawędzi rozprzestrzeniania, lecz w dokumencie dwie strony może to być środek spread) . Tutaj będą potrzebne strony. BindingLocation jest wyrażone jako liczba całkowita (0 dla pierwszej strony, 1 dla pierwszej i drugiej itd.). Możesz znaleźć współrzędne tego, dodając ItemTransforms z poprzednich stron.
W osi Y, z przyczyn najlepiej znanych firmie Adobe, 0 jest pionowym środkiem rozsiewu (ani górną ani dolną, jak można się było spodziewać).
Dokumenty IDML mają przykłady współrzędnych: http://www.photoshopelementsmac.com/devnet/indesign/documentation.html, w tym tłumaczenie z jednej przestrzeni współrzędnych na drugą.
Również wewnątrz elementu strony (co daje geometryczne granic), umieszczony obraz ma swój własny zestaw granice graficznych, które mogą go offsetowych dalej, a także własnej ItemTransform
Tak więc, aby odpowiedzieć na Twoje pytanie, trzeba by rozpakować plik zip IDML, znajdź obraz w formacie XML, a następnie zrobić to suma coś takiego:
// 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
Aha, jeszcze jedno: wszystkie koordy IDML są w punktach. Będziesz musiał podzielić wszystkie wartości przez 72 podzielone przez PPI ekranu, jeśli chcesz uzyskać wyniki w pikselach.
Więc nie jestem pewien, jak zastosować tę wiedzę. Mam plik idml, który wysyłam do indesign serwera, który ostatecznie zwraca obraz. Mówisz, że powinienem wygenerować skrypt i zrobić kolejną podróż w obie strony do serwera indesign? –
Nie jestem pewien, co dokładnie próbujesz osiągnąć. Czy mówisz, że próbujesz wygenerować obraz (grafika wektorowa), przekształcając plik IDML? Czy istnieje wcześniejszy obraz, który modyfikujesz? Czy tworzysz obraz od podstaw? –
@Josh Voigts - Elementy strony przechowywane są w IDML we współrzędnych rozrzutu, więc Page GeometricBounds nie są zbyt pomocne. Niestety, sam obraz nie będzie mieć żadnych granic geometrycznych (przynajmniej nie zapisanych jako takie w IDML) - zobacz moją pełniejszą odpowiedź poniżej. – JcFx