Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] testo capovolto su stampa formato A4

    Salve Ragazzi,
    non riesco a capovolgere il testo in una stampa A4.

    ecco il codice che uso.

    codice:
    //testo diritto in fondo alla pagina
    grap.drawString("TESTO", 55, 800);
    AffineTransform orig = grap.getTransform();
    AffineTransform at = new AffineTransform();
    at.translate(561,-817);
    at.setToRotation(Math.PI);
    grap.setTransform(at);
    
    //testo capovolto in fondo alla pagina
    grap.drawString("TESTO", 55, 800);
    grap.setTransform(orig);
    &

    non riesco a capire dove sbaglio.
    vi sarei grato di un aiuto.
    grazie

  2. #2
    scusate il titolo è cosi

    [JAVA] testo capovolto su stampa formato A4



  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    Salve Ragazzi,
    non riesco a capovolgere il testo in una stampa A4.

    non riesco a capire dove sbaglio.
    vi sarei grato di un aiuto.
    Qui ci sono diverse cose da chiarire.

    Innanzitutto la matrice di trasformazione "originale" che c'è nel Graphics ha un fattore di scala "particolare" che serve a descrivere il fatto che 1 unità corrisponde fisicamente a 1/72 di pollice (ovvero, per dirlo in altro modo, se vuoi spostare o disegnare su 1 pollice devi indicare 72).
    Se però crei un new AffineTransform() esso ha la trasformazione di "identità" la cui scala è .. 1 e quanto corrisponde a livello fisico .... boh, bisognerebbe verificarlo/calcolarlo. Quindi: NON va bene.

    Il getTransform() restituisce una COPIA della matrice, quindi la puoi tenere per il ripristino e intanto puoi benissimo modificare la matrice "corrente". Quindi non c'è bisogno di crearne un'altra.

    Altra cosa, quando fai due operazioni in sequenza del tipo:

    at.translate(561,-817);
    at.rotate(Math.PI);

    queste due operazioni si "concatenano", perché sono per così dire "additive", modificano/aggiornano la matrice.
    Se invece fai:

    at.translate(561,-817);
    at.setToRotation(Math.PI);

    il setToRotation NON concatena ma imposta tutta la matrice per essere "solo" una rotazione. Quindi il translate "si perde".


    Altra (piccola) cosa: se hai già traslato con translate(561,-817) e poi stampi a 55, 800, quest'ultime sono riferite alla nuova origine, quindi il testo è ancora più spostato.

    Infine (lo dico solo per completezza), se si vuole solo "ribaltare" in orizzontale/verticale, generalmente basta "giocare" sulla scala, ovvero concatenare una scala negativa per x e/o y.


    In sostanza, prova ad esempio questo:
    codice:
            // qui c'è la matrice nello stato "originale"
    
            AffineTransform orig = grap.getTransform();
    
            grap.translate(55, 800);
            grap.drawString("TESTO", 0, -3);
            grap.scale(1, -1);   // inverte la y
            grap.drawString("TESTO CAPOVOLTO ", 0, -3);
    
            grap.setTransform(orig);

    (nota: il -3 è solo per distanziare un pochino di circa 1mm)

    e vedi cosa esce ...

    P.S. prova anche a fare
    grap.scale(-1, -1);
    che è equivalente al rotate di Math.PI
    Ultima modifica di andbin; 17-01-2020 a 16:56
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Ciao andbin,
    come al solito sei un grande.

    l'unica cosa è che con il tuo metodo il testo capovolto lo vedo a specchio.
    Io vorrei farlo ruotato in modo che si possa leggere col foglio sotto sopra.

    grazie mille

  5. #5
    scusa non avevo letto

    P.S. prova anche a fare
    grap.scale(-1, -1);
    che è equivalente al rotate di Math.PI
    grazie mille per la spiegazione super esaustiva
    grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    scusa non avevo letto
    Sì, l'ho aggiornato infatti solo pochi minuti fa perché il mio esempio era solo uno "specchio" verticale. Ma se fai scale(-1, -1) è appunto equivalente alla rotazione di 180° (ovvio).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sì, l'ho aggiornato infatti solo pochi minuti fa perché il mio esempio era solo uno "specchio" verticale. Ma se fai scale(-1, -1) è appunto equivalente alla rotazione di 180° (ovvio).

    Grazie come sempre.
    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.