Schutz von PDF mit PDFBox
Im wirklich kämpfen, mit der Dokumentation von PDFBox. Für solch eine populäre Bibliothek info scheint zu sein, ein wenig Dünn auf dem Boden (für mich!).
Sowieso das problem, das ich habe bezieht sich auf den Schutz der PDF-Datei. Im moment alles was ich will ist die Kontrolle der Zugriffsrechte der Benutzer. speziell möchte ich verhindern, dass der Benutzer in der Lage, um die PDF-Datei ändern.
Wenn ich übergehe die Zugriffsberechtigung code funktioniert alles perfekt. Ich lese in einer PDF-Datei aus einer externen Ressource. Ich bin dann zu Lesen und füllen Sie die Felder, indem einige Bilder vor dem speichern der neuen PDF-Datei. Das alles funktioniert perfekt.
Das problem kommt, wenn ich, fügen Sie den folgenden code zum verwalten des Zugriffs:
/* Secure the PDF so that it cannot be edited */
try {
String ownerPassword = "DSTE$gewRges43";
String userPassword = "";
AccessPermission ap = new AccessPermission();
ap.setCanModify(false);
StandardProtectionPolicy spp = new StandardProtectionPolicy(ownerPassword, userPassword, ap);
pdf.protect(spp);
} catch (BadSecurityHandlerException ex) {
Logger.getLogger(PDFManager.class.getName()).log(Level.SEVERE, null, ex);
}
Wenn ich fügen Sie diesen code, alle Texte und Bilder sind gestreift aus dem ausgehenden pdf-Datei. Die Felder sind immer noch im Dokument vorhanden, aber Sie sind alle leer und alle Texte und Bilder, wo ein Teil der ursprünglichen PDF-Datei und Hinzugefügt wurden dynamisch in den code gegangen sind.
UPDATE:
Ok, so gut wie ich kann sagen, das problem kommt von einem bug in Bezug auf die Formularfelder. Ich werde versuchen, einen anderen Ansatz, ohne die form-Felder und sehen, was es gibt.
- Ich habe das gleiche problem mit random PDFs Rückkehr Rohlinge. Irgendwelche Ideen?
- Ich habe nie auf den Grund dieses Problems. Am Ende hatte ich die Verwendung einer anderen Bibliothek!
- Danke. Ich fand eine Lösung für Sie.
- Der link zu docs für den Verweis: pdfbox.apache.org/2.0/cookbook/encryption.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Lösung für dieses problem. Es scheint, dass, wenn die PDF-Datei aus einer externen Quelle, manchmal die PDF-Datei ist geschützt oder verschlüsselt werden.
Wenn Sie erhalten eine leere Ausgabe beim laden ein PDF-Dokument aus einer externen Quelle, und fügen Sie Schutz, Sie sind wahrscheinlich arbeiten mit einem verschlüsselten Dokument. Ich habe ein stream processing system arbeitet auf PDF-Dokumente. Also der folgende code funktioniert für mich. Wenn Sie nur die Arbeit mit PDF-Eingänge, dann könnte man integrieren Sie den untenstehenden code mit Ihrem flow.
Nehmen Sie jetzt, dass wieder InputStream und verwenden Sie es für Ihre Sicherheits-Anwendung;
Nun diese zurückgeben sollte, ein richtiges Dokument mit keine leere Ausgabe!
Trick ist, die Verschlüsselung zu entfernen zuerst!
PipedOutputStream
undPipedInputStream
im single-threaded-code ist ein wenig schrullig.