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

    [JAVA] modifica testo di un PDF

    Ciao a tutti,
    sto scrivendo una classe che sia in grado di leggere un pdf esistente, modificare il testo (all'interno del PDF sono presenti alcuni marcatori da sostituire tipo @nome@) e salvare il tutto in un nuovo PDF, però nello sviluppo ho incontrato numerosi problemi. Volevo sapere se qualcuno di voi ha gia sviluppato del codice simile e se si che librerie ha utilizzato.

    Innanzitutto per leggere il PDF iniziale ho utilizzato le librerie di PDFBox, anche perchè sono le uniche librerie che mi hanno permesso di leggere il contenuto del PDF (con iText non ho trovao nulla che mi permettesse di estrarre il contenuto). Purtroppo però il contenuto viene salvato all'interno di una stringa, quindi viene persa la formattazione (maiuscole, sottolineate, margini e anche le immagini). Alla stringa poi ho applicato un replaceAll e modificato i campi che mi interessavano.
    Poi per ricostrire il PDF ho utilizzato le librerie di iText e ho salvato il nuovo file.

    Il contenuto del file salvato è corretto, con tutte le stringhe modificate, però le immagini e la formattazione del testo sono andate perse. Volevo sapere se qualcuno di voi sa come effettuare un find e replace mantenendo la formattazione originale.


    vi allego in seguito il codice:


    //Apro il PDF e estraggo il testo con PDFbox
    String text= "";
    InputStream in = new FileInputStream("input.PDF");
    StringWriter out = new StringWriter();
    PDFTextStripper stripper = new PDFTextStripper();
    PDFParser parser = new PDFParser( in );
    parser.parse();
    PDDocument document = parser.getPDDocument();
    stripper.writeText(document,out);
    text= out.toString();

    // rimpiazzo la stringa desiderata
    text= text.replaceAll("@nome@","pippo");

    document.close();

    // copio il contenuto del PDF in un paragrafo e lo salvo con iTEXT

    Document document2 = new Document();
    PdfWriter.getInstance(document2, new FileOutputStream("OUT.pdf"));
    document2.open();
    document2.add(new Paragraph(text));
    document2.close();


    Spero che possiate essermi di aiuto...
    Grazie

  2. #2
    Utente di HTML.it L'avatar di dexxa
    Registrato dal
    Oct 2007
    Messaggi
    24
    ciao nonsonoinmatrix ma credo ke sono io ad avere bisogno di te.

    Il mio scopo è quello di accedere ad un file pdf, e prenderne il contenuto per poi lavorarci sopra. Ho usato una parte del tuo codice e purtroppo mi da un errore sulla libreria AFMParser. Questo è quello che ho fatto:

    import org.pdfbox.pdmodel.PDDocument;
    import org.pdfbox.pdfparser.PDFParser;
    import java.io.*;
    import org.pdfbox.util.PDFTextStripper;
    import java.util.Date;

    public class Main {

    /** Creates a new instance of Main */
    public Main() {
    }

    public static void main(String[] args) {
    PdfExtracter p=new PdfExtracter();
    String t;
    try {
    t=p.GetTextFromPdf("C:\\Users\\Peppe\\Desktop\\pro va.pdf");
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    }


    class PdfExtracter {

    public PdfExtracter() {
    }

    public String GetTextFromPdf(String filename) throws Exception
    {
    String text = "";
    InputStream in=new FileInputStream(filename);
    StringWriter out=new StringWriter();
    PDFTextStripper stripper = new PDFTextStripper();
    PDFParser parser = new PDFParser(in);
    parser.parse();
    PDDocument document = parser.getPDDocument();
    stripper.writeText(document,out);
    text=out.toString();
    System.out.println(text);
    return text;
    /*PDDocument pdfdocument = null;
    FileInputStream is = new FileInputStream(filename);
    PDFParser parser = new PDFParser( is );
    parser.parse();
    pdfdocument = parser.getPDDocument();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    OutputStreamWriter writer = new OutputStreamWriter( out );
    PDFTextStripper stripper = new PDFTextStripper();
    stripper.writeText(pdfdocument.getDocument(), writer);
    writer.close();
    byte[] contents = out.toByteArray();

    String ts = new String(contents);
    System.out.println("the string length is"+contents.length+"\n");
    return ts;*/
    }
    }


    errore:
    Exception in thread "main" java.lang.NoClassDefFoundError: org/fontbox/afm/AFMParser
    at org.pdfbox.pdmodel.font.PDFont.getAFM(PDFont.java: 350)
    at org.pdfbox.pdmodel.font.PDFont.getAverageFontWidth FromAFMFile(PDFont.java:313)
    at org.pdfbox.pdmodel.font.PDSimpleFont.getAverageFon tWidth(PDSimpleFont.java:231)
    at org.pdfbox.util.PDFStreamEngine.showString(PDFStre amEngine.java:276)
    at org.pdfbox.util.operator.ShowTextGlyph.process(Sho wTextGlyph.java:80)
    at org.pdfbox.util.PDFStreamEngine.processOperator(PD FStreamEngine.java:452)
    at org.pdfbox.util.PDFStreamEngine.processSubStream(P DFStreamEngine.java:215)
    at org.pdfbox.util.PDFStreamEngine.processStream(PDFS treamEngine.java:174)
    at org.pdfbox.util.PDFTextStripper.processPage(PDFTex tStripper.java:336)
    at org.pdfbox.util.PDFTextStripper.processPages(PDFTe xtStripper.java:259)
    at org.pdfbox.util.PDFTextStripper.writeText(PDFTextS tripper.java:216)
    at PdfExtracter.GetTextFromPdf(Main.java:40)
    at Main.main(Main.java:18)
    Java Result: 1


    Mi puoi essere di aiuto visto che già conosci questa libreriA? GRAZIEEEE

  3. #3

    HELP

    CIAO ANCHE IO HO IL MEDESIMO ERRORE QUALCUNO MI AIUTA PLEASE!!!!!

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.