Ich verwende iText, um PDF-Dateien zu erzeugen. Ich möchte die Bearbeitung der PDF-Datei verbieten, aber dem Leser erlauben, Seiten zu extrahieren. Hier ist mein Code zu setzen Verschlüsselung:Bearbeitung nicht zulassen, aber Seitenextraktion in Java erlauben iText/PDF
writer.setEncryption(null, null, 0xffffffff, PdfWriter.STANDARD_ENCRYPTION_128);
Der dritte Parameter gibt Berechtigungen. Ich benutze 0xffffffff anstelle der einzelnen iText Flags ALLOW_PRINTING usw. Dies wird iText fragen, um alles zu aktivieren. Aber das ist, was ich in der PDF-Datei erhalten:
Ich denke, ich sollte erlaubt sein sollte, Extraktion, aber deaktivieren Bearbeitung zu aktivieren, aber ich bin nicht sicher. Hier sind die Berechtigungen Bits pro Adobe:
(Von here, aber seien Sie gewarnt, es ist 30 meg)
So schalten Sie die Bits 6 und 11, sondern verlassen sich auf die anderen (vor allem die Bits 5 und 10) , und das würde die Bearbeitung ausschalten, aber die Extraktion erlauben. In jedem Fall würde ich durch die Angabe von 0xffffffff meinen, dass alles erlaubt wäre; aber stattdessen ist alles außer Extraktion erlaubt.
Ich habe den iText-Quellcode zum Festlegen von Berechtigungen überflogen und sehe nichts, was dies verursachen würde. Hier ist der relevante Code aus PdfEncryption.setupAllKeys:
permissions |= (revision == STANDARD_ENCRYPTION_128 || revision == AES_128 || revision == AES_256) ? 0xfffff0c0
: 0xffffffc0;
permissions &= 0xfffffffc;
Die erste Zeile ist eine ODER tun, und so würde keine Berechtigungen entfernen; In der zweiten Zeile werden die beiden rechts liegenden Bites gemäß der PDF-Spezifikation auf 0 gesetzt.
Ich frage mich, ob es eine iText-Sache ist, eine PDF-Sache oder ob ich etwas anderes falsch mache.
Dank
* Einfach auskommen Zeile 121 und 122 * - Ich nehme an, Sie meinen die Zeilen 'if (! Reader.isOpenedWithFullPermissions()) werfen ...'. Diese Änderung ist ** nicht ** notwendig, vgl. [diese Antwort] (http://stackoverflow.com/questions/17666577/opening-password-protected-pdf-file-with-itextsharp/17694943#17694943), setze einfach 'PdfReader.unethicalreading = true', nachdem du dich vergewissert hast sind in der Tat berechtigt, die mit dem Passwortschutz verbundenen Einschränkungen zu ignorieren. – mkl
Danke für den Hinweis @mkl. Leider erlaubt dies ** nicht ** "Ändern des Dokuments", "Dokument Assembly", "Content Copying" und "Page Extraction" (was ändert die Quellen). Zumindest habe ich das erlebt. – beatngu13
Das würde überraschen, da beide im Wesentlichen dasselbe tun, beide verhindern die Ausnahme. – mkl