2016-01-07 33 views
5

Senza entrare troppo nei dettagli - Ricevo parametri (x1, x2, y1, y2, a, b, α) da uno strumento Web e ho bisogno di generare un documento PDF, utilizzando la libreria Zend_PDF che contiene l'immagine verde ruotata e posizionata correttamente sulle coordinate esatte.Zend PDF: calcolo delle coordinate dopo la rotazione

enter image description here

Ora, quello che mi confonde è che Zend non consente elementi da ruotare, ma invece ruota carta. Quindi, presumo la rotazione deve essere fatto in questo modo

$page->rotate($x1 + ($x2 - $x1)/2, $y1 + ($y2 - $y1)/2, - deg2rad($rotation));

perché vogliamo che il centro dell'immagine per essere il punto di rotazione, e noi ruotarla nell'orientamento inverso in modo l'immagine risultante sarà ottenere una corretta rotazione.

La parte difficile con cui ho problemi è disegnarla. Con la semplice chiamata

$page->drawImage($image, $x1, $y1, $x2, $y2);

sto ottenendo il risultato come indicato nello schema - l'immagine risultante deve essere tradotto così, dal momento che (x1, y1) e (x2, y2) non vengono esatta le coordinate più, ma non sono sicuro di come calcolarle? Qualche idea?

+0

sono la (** ** x1, y1 ** **) e (** ** x2, y2 ** **) coordinate lo stesso nelle chiamate 'ruota' e' drawImage'? O è la tua immagine solo il rettangolo verde, nel qual caso i valori per il 'drawImage' dovrebbero essere del tutto diversi ... – mkl

+0

Sì, sono gli stessi. L'immagine $ è un rettangolo verde, è anche vero. Mi rendo conto che la chiamata drawImage ottiene le coordinate sbagliate, ma non sono sicuro di come calcolare quelle giuste. – Relja

risposta

2

L'OP confermato in un commento che ha usato gli stessi valori (x1 , y1) e (X2 , y2) nel suo rotate ei suoi drawImage chiamate. È piuttosto ovvio dai suoi schizzi, però, che le coordinate per quest'ultima chiamata devono differire.

Fortunatamente sappiamo dal modo in cui il rettangolo verde è inscritta nel rettangolo da (x1, y1) a (X2, y2), che ha lo stesso punto centrale di quel rettangolo. Inoltre, abbiamo le dimensioni a e b del rettangolo verde.

Pertanto, i parametri drawImage deve essere modificato:

$page->drawImage($image, $x1 + ($x2 - $x1)/2 - $a/2 
         , $y1 + ($y2 - $y1)/2 - $b/2 
         , $x1 + ($x2 - $x1)/2 + $a/2 
         , $y1 + ($y2 - $y1)/2 + $b/2); 
+0

Compagno, grazie per la risposta! La soluzione è quasi perfetta - la coordinata X è perfetta, ma la Y deve ancora essere tradotta un po 'verso il basso (nel normale sistema di coordinate non ruotato). Forse sapete perché e come tradurlo? Semplicemente alterando y1 e y2 nel drawImage si alterna l'immagine risultante, poiché l'asse Y nel sistema ruotato è la traduzione sia in X che in Y nel sistema originale. – Relja

+0

Puoi condividere i valori di input e il PDF risultante per un caso in cui * Y deve ancora essere tradotto un bit * per l'analisi? – mkl

+0

Detto questo ... @Relja * Semplicemente alterando y1 e y2 nel disegnoImmagine distorce l'immagine risultante * - altera i valori y sia per la rotazione che per la drawImage. – mkl

Problemi correlati