Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    [JAVA] copiare pagine da PDF a nuovo PDF eliminando le immagini

    Oggi (per una volta tanto eh) pongo io una domanda. Ho dei normali file PDF (assolutamente "aperti", nessuna cifratura o password) di cui vorrei fare la seguente cosa: di tutto il documento vorrei prendere solo certe pagine, che so io a priori e inserirle pari pari in un nuovo documento PDF ma con una piccola particolarità, vorrei non copiare le immagini, insomma eliminarle.

    Dato che non ho trovato un tool già fatto, possibilmente free, che faccia questo (ho già fatto ricerche in rete), allora ho pensato di farlo io, naturalmente in Java e ovviamente con l'uso di una libreria specifica per i PDF come ad esempio iText.
    La questione è che di iText non sono molto ferrato ... a parte qualche prova banale di generazione di PDF da zero che ho fatto in passato.

    Quindi volevo chiedere se qualcuno, più ferrato di me su iText, potesse spiegarmi a) se è fattibile una cosa del genere e b) a grandi linee quale è la procedura e le classi da usare.
    Non chiedo certo codice già fatto ... ehm, non ho problemi a scriverlo. È proprio solo che non sono praticissimo di iText. Se con un'altra libreria free per PDF potesse essere ancora più semplice, meglio ancora.

    Ringrazio per qualunque suggerimento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    80
    Ciao!
    Con gli aiuti che mi hai dato in passato ci mancherebbe che non ti posto il codice..!
    Questo metodo (utilizzo PDFBOX e non iText perchè con quest'ultimo non ci sono riuscito) rimuove TUTTE le immagini dal pdf.
    La mia necessità sarebbe quella di rimuoverne solo alcune ma per ora non ci sono riuscito.
    Per quanto riguarda la rimozione di alcune pagine credo che la cosa possa esser più semplice. Penserei a creare un nuovo PDDocument a cui aggiungo solo le pagine che mi interessano.

    codice:
        public static void strip(String pdfFile, String pdfFileOut) throws Exception {
            PDDocument doc = PDDocument.load(pdfFile);
            List pages = doc.getDocumentCatalog().getAllPages();
            for( int i=0; i<pages.size(); i++ ) {
                PDPage page = (PDPage)pages.get( i );
    
                PDFStreamParser parser = new PDFStreamParser(page.getContents());
                parser.parse();
                List tokens = parser.getTokens();
                List newTokens = new ArrayList();
                for(int j=0; j<tokens.size(); j++) {
                    Object token = tokens.get( j );
                    if( token instanceof PDFOperator ) {
                        PDFOperator op = (PDFOperator)token;
                        if( op.getOperation().equals( "Do") ) {
                            newTokens.remove( newTokens.size() -1 );
                            continue;
                        }
                    }
                    newTokens.add( token );
                }
                PDStream newContents = new PDStream( doc );
                ContentStreamWriter writer = new ContentStreamWriter( newContents.createOutputStream() );
                writer.writeTokens( newTokens );
                newContents.addCompression();
                page.setContents( newContents );
            }
    
            doc.save(pdfFileOut);
            doc.close();
        }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.