2016-03-23 2 views
1

ich die folgenden Ausnahme erhalten, wenn Sie diesen Code excecuting:iText - lesen Sie PDF-Dateien mit einem unbekannten Zufall Besitzer Passwort erstellt

public byte[] watermarking(byte[] orig) throws IOException { 
     PdfReader pdfReader = new PdfReader(orig); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     PdfStamper pdfStamper = null; 

     try { 
      pdfStamper = new PdfStamper(pdfReader, baos); //exc here 
      ... 
      } 
      ... 
     } catch (DocumentException var8) { 
      ... 
     } 
    } 

Ausnahme:

11:43:11,094 ERROR [de.mlp.xbg.pa.rest.SessionRR] (http-/127.0.0.1:8081-6) PdfReader not opened with owner password: java.lang.IllegalArgumentException: PdfReader not opened with owner password 

ich andere Threads zu diesem Thema geprüft und es scheint, dass die einfachste Lösung ist, PdfReader.unethicalreading = true;

hinzuzufügen, aber ich bin gezwungen, iText 2.1.7 oder älter zu verwenden (com.lowagie iText) und nicht iText 5.0.0 oder neuer (com.itextpdf iText). PdfReader.unethicalreading ist in der alten Version der Bibliothek nicht vorhanden.

+1

Warum sind Sie eine alte und unmaintained Version von iText zu verwenden gezwungen, die nicht die Funktion enthält, die Sie brauchen? –

+3

Wenn Sie sich den Quellcode anschauen (https://github.com/itext/itextpdf/blob/develop/itext/src/main/java/com/itextpdf/text/pdf/PdfReader.java), werden Sie das sehen 'unethicalreading' wurde in iText 5.0.2 (' com.itextpdf' iText) _ hinzugefügt. Genauer gesagt, in diesem Commit: https://github.com/itext/itextpdf/commit/c27c608dee1495b91dc290653b1f387d7c09adde am 31. März 2010. Was bedeutet, dass Sie eine Version von iText verwenden, die mindestens 6 Jahre alt ist. –

Antwort

3

Here scheint es eine Krücke, um iText zu machen Passwort zu ignorieren mit Haftungsausschluss:

ich rechtliche Fragen bis zu Ihnen durch Ausführen des Codes unten verlassen.

public static PdfReader unlockPdf(PdfReader reader) { 
    if (reader == null) { 
     return reader; 
    } 
    try { 
     Field f = reader.getClass().getDeclaredField(“encrypted”); 
     f.setAccessible(true); 
     f.set(reader, false); 
    } catch (Exception e) { // ignore } 

    return reader; 
} 
Verwandte Themen