Post

Creare PDF da un XML con Apache FOP 1.1

DOMANDA: Come si crea un PDF da un file XML? RISPOSTA: E' possibile creare un PDF a partire da un XML con Apache FOP 1.1 , ultima versione attualmente disponibile. E' indispensabile sapere che per la trasformazione è necessario un file "intermedio" .xsl utilizzato come template (modello) in cui vengono conservate le informazioni di impaginazione. Come al solito, guardiamo con degli esempi ad hoc  ogni singolo step anche se, in questo post, si da per scontata una conoscenza basilare di xml ed xsl . La seguente classe Xml2Pdf trasforma l' XML in PDF grazie alle informazioni contenute nel .xsl : package fop; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResu

Differenza tra JRE e JDK

DOMANDA: Che differenza c'è tra Java Runtime Environment (JRE) e Java Development Kit (JDK)? RISPOSTA: Se la vostra esigenza è quella di eseguire delle applicazioni Java , è sufficiente la JRE . Infatti Java Runtime Enviroment è un'implementazione della Java Virtual Machine (JVM) necessaria per far girare i programmi Java sul vostro calcolatore. E' quindi necessaria la JRE per eseguire ad esempio Eclipse , le applet , Tomcat , ecc... La JDK invece è indispensabile nel caso voi abbiate la necessità di sviluppare software Java. Infatti la JDK contiene al suo interno una o più JRE e  tutti gli applicativi utili per la programmazione in Java: debuggers, compilatori come javac, librerie per lo sviluppo, ecc... Sono entrambe gratuite e scaricabili dal sito ufficiale  Oracle Java . NOTA : per Eclipse è sufficiente la JRE perché al suo interno contiene già il compilatore, le librerie e i tools necessari al programmatore.

Codifica e decodifica di un'immagine in Base64

DOMANDA: Come si effettua la codifica in Base64 di un'immagine in Java? RISPOSTA: Differentemente da quanto visto per la codifica Base64 delle stringhe , per le immagini abbiamo alcune varianti dovute soprattutto alla conversione della stessa in un array di byte . Scarichiamo la classe Base64 di Apache Commons contenuta nel pacchetto  commons-codec-1.2.jar . Il codice nell'esempio mostra come convertire in Base64  un'immagine JPG, ma è adattabile anche ad altri formati: package base64; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.commons.codec.binary.Base64; public class Base64ImgConversion { public static void main(String[] args) throws IOException { BufferedImage immagine = ImageIO.read(new File("C:\\immagine.jpg")); ByteArrayOutputStream byteArrOS = new ByteArrayOutputStream(); ImageIO.write(imm

Codifica e decodifica di una stringa in Base64

DOMANDA: Come si converte una stringa in Base64 con Java? RISPOSTA: In Java esiste una classe chiamata Base64 della libreria Apache Commons che permette in pochi passi di convertire una stringa in Base64 . Scarichiamo quindi il pacchetto   commons-codec-1.2.jar   ed importiamolo nel nostro progetto. Una volta effettuate correttamente queste operazioni, guardiamo l'esempio che effettua codifica e decodifica : package base64; import org.apache.commons.codec.binary.Base64; public class Base64Conversion { public static void main(String[] args) { String daConvertire = "Stringa originale"; // CODIFICA BASE64 byte[] encoded = Base64.encodeBase64(daConvertire.getBytes()); System.out.println("Stringa da convertire: " + daConvertire ); System.out.println("Base64: " + new String(encoded)); // DECODIFICA BASE64 byte[] decoded = Base64.decodeBase64(encoded); System.out.println("Stringa decodificata : " + new St

Comprimere e convertire immagini in JPG

DOMANDA: Come convertire un'immagine in JPG in Java? RISPOSTA: Java  mette a disposizione diversi oggetti che permettono la conversione di un'immagine in JPG/JPEG e anche la regolazione della compressione (e quindi della qualità). Guardiamo l'esempio TestCompressione , opportunamente commentato per capire tutti i passaggi da intraprendere: package immagini; import java.awt.image.*; import java.io.*; import java.util.Iterator; import javax.imageio.*; import javax.imageio.stream.FileImageOutputStream; import javax.swing.JFileChooser; public class TestCompressione { public static void main(String args[]) throws Exception { BufferedImage immagine = null; // Seleziono il file con finestra di dialogo JFileChooser fileScelto = new JFileChooser("C:\\"); int selezione = fileScelto.showDialog(null, "Seleziona il file da aprire"); if(selezione == JFileChooser.APPROVE_OPTION) immagine = ImageIO.read(fileScelto.getSelectedFile(

Differenza tra equals() ed ==

Immagine
DOMANDA: Che differenza c'è tra il metodo equals() e ==? RISPOSTA: Utilizzare il metodo equals(Object o) ereditato da Object() o utilizzare l' operatore di confronto == è estremamente differente.  METODO equals() Utilizzando questo metodo stiamo confrontando due oggetti secondo dei criteri di uguaglianza di contenuto , cioè potremmo confrontare una persona con un'altra persona, un animale con un altro animale e così via. Il metodo equals() permette infatti, con opportune personalizzazioni, di selezionare quali sono i criteri di confronto. Così potremo decidere se una persona è uguale ad un'altra se hanno nome e cognome uguali, oppure nome, cognome e data di nascita, ecc... ecc... OPERATORE == Questo operatore di confronto valuta l'uguaglianza sostanziale, ovvero se l'oggetto, il riferimento o il tipo di dato primitivo a sinistra è effettivamente lo stesso di quello a destra. Quindi risulterà vero soltanto quando i riferimenti di memori

Rappresentare numeri grandissimi

DOMANDA: E' possibile rappresentare in Java dei numeri grandissimi che hanno un valore oltre quello consentito dai tipi di dati primitivi long e int? RISPOSTA: Come abbiamo visto nel post sul range di valori rappresentabili con i diversi tipi di dati primitivi, effettuare un'operazione il cui risultato vada oltre tale limite comporta un errore di calcolo con conseguenze potenzialmente disastrose. La soluzione a tali limitazioni esiste: la prima, più complessa, rientra nell'analisi numerica e in algoritmi di troncamento, arrotondamento e bit shifting, ma non è scopo di questo post. La seconda invece è messa a disposizione da Java con le classi java.math.BigInteger e java.math.BigDecimal (rispettivamente per i numeri interi e decimali). Guardiamo con un esempio come funzionano: package bignumbers; import java.math.BigInteger; public class BigNumbers { public static void main(String[] args) { // rappresentazione errata oltre i limiti