Conversione da tiff a pdf

di il
9 risposte

Conversione da tiff a pdf

Salve a tutti.

vorrei fare un .jar eseguibile per convertire le immagini da .tiff a .pdf.

in rete ho trovato un po di materiale, ma essendo alle prime armi, non riesco a farlo funzionare.

vi allego il codice che ho trovato e che non riesco a fare funzionare:

1 - come faccio a passargli la directory dei miei file .tiff?
2 - come posso impostare la directory dei nuovi file .pdf che vengono generati?


per il resto il codice l'ho abbastanza capito, solo queste due domande

grazie in anticipo a tutti

package printme;

import java.io.FileOutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.RandomAccessFileOrArray;
import com.lowagie.text.pdf.codec.TiffImage;
import java.io.*;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;


/**
 *
 * @author cfigura
 */
public class Printme {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
              
        if(args.length<1) {
        System.out.println("Attenzione scegli file con estensione .tif");
        System.exit(1);
        }
        String tiff;
        String pdf;
        for (int i=0; i<args.length;i++){
           tiff = args[i];
           pdf = tiff.substring(0, tiff.lastIndexOf('.')+1)+"pdf";
           Document document = new Document(PageSize.LETTER, 0, 0, 0, 0);
           try{
            PdfWriter writer =PdfWriter.getInstance(document, new FileOutputStream(pdf));
            int pages = 0;
            document.open();
            PdfContentByte cb = writer.getDirectContent();
            RandomAccessFileOrArray ra = null;
            int comps = 0;
            try{
                ra = new RandomAccessFileOrArray(tiff);
                comps = TiffImage.getNumberOfPages(ra);
            }catch (Throwable e) {
             System.out.println("eccezione in "+tiff+""+e.getMessage());
             continue;
           }
           System.out.println("processazione: "+tiff);
           for(int c = 0; c < comps; ++c) {
               try{
                   Image img = TiffImage.getTiffImage(ra, c+1);
                   if (img != null){
                       System.out.println("page"+ (c+1));
                       img.scalePercent(7200f / img.getDpiX(), 7200f / img.getDpiY() );
                       document.setPageSize(new Rectangle(img.getScaledWidth(),img.getScaledHeight()));
                       img.setAbsolutePosition(0, 0);
                       cb.addImage(img);
                       document.newPage();
                       ++pages;
                   }
               }
               catch (Throwable e) {
                   System.out.println("Eccezione " + tiff + "pagina " + (c+1)+ " "+ e.getMessage());
               }
           }
           ra.close();
           document.close();
        }
        catch (Throwable e) {
            e.printStackTrace();
        }
           System.out.println("completato");
    }
  }
}

9 Risposte

  • Re: Conversione da tiff a pdf

    Carmelo1984 ha scritto:


    1 - come faccio a passargli la directory dei miei file .tiff?
    2 - come posso impostare la directory dei nuovi file .pdf che vengono generati?
    Non sono particolarmente ferrato su iText ma dal codice che vedo, esso riceve N nomi di file da linea di comando, ogni argomento è appunto un nome di file (con possibile path relativo o assoluto). Per ciascuno, crea un nuovo nome semplicemente sostituendo l'estensione, se era .tiff diventa .pdf. Quindi il PDF generato sta sostanzialmente nella stessa directory del TIFF.

    Se vuoi passare 2 directory, una di input con i TIFF e l'altra di output per i PDF, devi chiaramente ricevere i nomi di queste due directory da linea di comando, saranno args[0] e args[1]. Poi però devi scansionare la directory di input per trovare solo i .tiff e questo lo puoi fare a livello basilare usando uno dei list/listFiles di java.io.File. E chiaramente devi filtrare solo quelli .tiff.
    Poi per ciascun file .tiff trovato applichi quella logica di conversione. Sulla qualità/correttezza di quel codice specifico per iText, non saprei rispondere ora.
  • Re: Conversione da tiff a pdf

    Grazie andbin,

    potresti farmi un esempio su come passare il file da linea di comando?....

    Prima di iniziare a pensare come mandare la directory direttamente su stringa e non da linea di comando, vorrei vedere che risultato viene fuori....


    grazie
  • Re: Conversione da tiff a pdf

    Molto abbozzato e chiaramente con la parte di scansione dei file .tiff e conversione tutta da fare:
    public class TiffToPdfConverter {
        private File tiffDir;
        private File pdfDir;
    
        public TiffToPdfConverter(File tiffDir, File pdfDir) {
            this.tiffDir = tiffDir;
            this.pdfDir = pdfDir;
        }
    
        public void convert() {
            // Prendi la lista dei .tiff in tiffDir
            // Per ciascun .tiff
            //    converti
        }
    
    
        public static void main(String[] args) {
            if (args.length == 2) {
                File tiffDir = new File(args[0]);
                File pdfDir = new File(args[1]);
    
                TiffToPdfConverter converter = new TiffToPdfConverter(tiffDir, pdfDir);
                converter.convert();
            } else {
                // mostra errore (o help) per numero parametri inappropriato
            }
        }
    }
  • Re: Conversione da tiff a pdf

    Scusa andbin,

    ma non riesco proprio a capire dove e come far funzionare il giochino... sarò duro, scusami...
    devo creare la nuova classa TifftoPdfConverter?
    all'oggetto tiffdir assegno il valore della mia directory?

    grazie ancora per le tue risposte
  • Re: Conversione da tiff a pdf

    Carmelo1984 ha scritto:


    devo creare la nuova classa TifftoPdfConverter?
    È una classe di esempio da cui si può partire e/o prendere spunto. Tutto qui.

    Carmelo1984 ha scritto:


    all'oggetto tiffdir assegno il valore della mia directory?
    Se vedi bene, i due argomenti vengono presi da args, ovvero da linea di comando, poi vengono creati i java.io.File rispettivi che sono poi passati al costruttore della classe. E poi viene invocato un metodo di istanza per eseguire la conversione, che può usare quei due tiffDir/pdfDir di "istanza".

    Tutto questo solo per fare la cosa in modo un minimo pulito, piuttosto che fare il "solito" main (che purtroppo si vede in certi altri esempi) lungo un chilometro ...
  • Re: Conversione da tiff a pdf

    Scusami ti prego...uso Netbeans come IDE, come faccio a passargli le directory da linea di comando??
  • Re: Conversione da tiff a pdf

    Carmelo1984 ha scritto:


    scusami ti prego...uso Netbeans come IDE, come faccio a passargli le directory da linea di comando??
    Non uso/conosco NetBeans ... non ti saprei dire.
    In Eclipse si usano le Run (o Debug) Configuration, nella dialog di configurazione di lancio c'è un tab "Arguments" dove si possono specificare gli argomenti. In NetBeans probabilmente c'è una qualcosa di similare/equivalente ...

    P.S. ti basta fare una ricerca in internet es. "netbeans pass command line arguments"
  • Re: Conversione da tiff a pdf

    Grazie mille andbin...inserendo l'argument la conversione avviene alla grande e velocemente. ho provato con un tiff da 54 pagine e in meno di 2 sec ha elaborato il pdf in una buonissima qualità.

    Mi potresti dare un'ulteriore dritta su come fare la stampa di n tiff in una cartella e non solo di uno?

    inoltre vorrei fare anche una piccola interfaccia per inserire ad esempio la directory di partenza e di arrivo...


    grazieee
  • Re: Conversione da tiff a pdf

    Carmelo1984 ha scritto:


    Mi potresti dare un'ulteriore dritta su come fare la stampa di n tiff in una cartella e non solo di uno?
    L'avevo detto prima ma lo ripeto, non c'è problema. Basta usare i metodi list() o listFiles() di java.io.File. Chiaramente devi trovare solo i .tif o .tiff (ci sono le due estensioni possibili, nota) e case-insensitive. Quindi devi fare un filtro: lo puoi fare tu avendo la lista di tutti i file o lo puoi far fare ai questi metodi. Vedi documentazione javadoc.
Devi accedere o registrarti per scrivere nel forum
9 risposte