2016-07-25 30 views
2

Ich erkunde die PDFsharp-Bibliothek und habe Probleme mit dem Kennwortschutz PDFs.PDFsharp 1.50 beta 3: Leere Besitzer Passwort-Fehler beim Hinzufügen eines Passwortes zu PDF

Nach diesem Beispiel auf ihrer Website http://www.pdfsharp.com/PDFsharp/index.php?option=com_content&task=view&id=36&Itemid=47,

Hier ist mein Code

try 
{ 
    string filename = "hi.pdf"; 
    File.Copy(Path.Combine("C:/User/Ichigo/Desktop", filename), 
    Path.Combine(Directory.GetCurrentDirectory(), filename), true); 

    PdfDocument document = PdfReader.Open(filename, "some text"); 

    PdfSecuritySettings securitySettings = document.SecuritySettings; 

    securitySettings.UserPassword="user"; 
    securitySettings.OwnerPassword="owner"; 

    securitySettings.PermitAccessibilityExtractContent = false; 
    securitySettings.PermitAnnotations = false; 
    securitySettings.PermitAssembleDocument = false; 
    securitySettings.PermitExtractContent = false; 
    securitySettings.PermitFormsFill = true; 
    securitySettings.PermitFullQualityPrint = false; 
    securitySettings.PermitModifyDocument = true; 
    securitySettings.PermitPrint = false; 

    document.Save(filename); 
} 
catch (Exception e) 
{ throw new Exception("Something went wrong : " + e); } 

Jedes Mal, wenn ich den Code hinzufügen, die die Passwörter setzt:

securitySettings.UserPassword="user"; 
securitySettings.OwnerPassword="owner"; 

ich System.NullReferenceException: Object reference not set to an instance of an object. wenn ich erreichen die Zeile, die das PDF speichert

Dokument.Speichern (Dateiname); Ich erhalte auch Fehlermeldungen

---- DEBUG ASSERTION FAILED ---- 
---- Assert Short Message ---- 
Empty owner password. 
---- Assert Long Message ---- 

    at PdfSharp.Pdf.Security.PdfStandardSecurityHandler.PrepareEncryption() in c:\Users\Ichigo\Downloads\PDFsharp-MigraDocFoundation-1_50-beta3b\PDFsharp\src\PdfSharp\Pdf.Security\PdfStandardSecurityHandler.cs:line 590 
    at PdfSharp.Pdf.PdfDocument.DoSave(PdfWriter writer) in c:\Users\Ichigo\Downloads\PDFsharp-MigraDocFoundation-1_50-beta3b\PDFsharp\src\PdfSharp\Pdf\PdfDocument.cs:line 392 
    at PdfSharp.Pdf.PdfDocument.Save(Stream stream, Boolean closeStream) in c:\Users\Ichigo\Downloads\PDFsharp-MigraDocFoundation-1_50-beta3b\PDFsharp\src\PdfSharp\Pdf\PdfDocument.cs:line 325 
    at PdfSharp.Pdf.PdfDocument.Save(Stream stream) in c:\Users\Ichigo\Downloads\PDFsharp-MigraDocFoundation-1_50-beta3b\PDFsharp\src\PdfSharp\Pdf\PdfDocument.cs:line 352 
    at PdfSharp.Pdf.PdfDocument.Save(String path) in c:\Users\Ichigo\Downloads\PDFsharp-MigraDocFoundation-1_50-beta3b\PDFsharp\src\PdfSharp\Pdf\PdfDocument.cs:line 258 

Warum erhalte ich diese Fehler zu bekommen?

Bearbeiten- hier ist der Stack-Trace für die System.NullReferenceException.

Something went wrong : `System.NullReferenceException: Object reference not set to an instance of an object.`  
at PdfSharp.Pdf.Security.PdfStandardSecurityHandler.SetHashKey(PdfObjectID id) 
    at PdfSharp.Pdf.IO.PdfWriter.WriteBeginObject(PdfObject obj) 
    at PdfSharp.Pdf.PdfDictionary.WriteObject(PdfWriter writer) 
    at PdfSharp.Pdf.PdfPage.WriteObject(PdfWriter writer) 
    at PdfSharp.Pdf.PdfDocument.DoSave(PdfWriter writer) 
    at PdfSharp.Pdf.PdfDocument.Save(Stream stream, Boolean closeStream) 
    at PdfSharp.Pdf.PdfDocument.Save(Stream stream) 
    at PdfSharp.Pdf.PdfDocument.Save(String path) 
+0

Sie erhalten nur eine Fehlermeldung: "System.NullReferenceException". Sie zeigen eine Stapelüberwachung für diesen Fehler nicht an. Tritt der Fehler bei allen PDF-Dateien auf, z. die HelloWorld.pdf, die mit dem Beispielcode ausgeliefert wird? Wenn nicht, geben Sie bitte Ihre Hi.pdf an, um den Fehler reproduzierbar zu machen. Erhalten Sie die Bestätigungsnachricht nach der Fehlermeldung? Die Nachricht, die zuerst angezeigt wird, muss zuerst untersucht werden. –

+0

Ich habe nicht daran gedacht, die PDFs zu überprüfen, da der Fehler bei HelloWorld.pdf nicht auftritt. Hier ist Hi.pdf https://www.dropbox.com/s/tby9bvw2h60xyj1/hi.pdf?dl=0. Ich bekomme die Assertion-Nachricht vor der Fehlermeldung. – Ichigo

Antwort

4

stellte sich heraus, gibt es ein Problem mit PDFsharp 1.50 Beta 3. Nichts falsch mit Ihrem Code.

Für eine schnelle Lösung, können Sie die PDFsharp Quellcode herunterladen und die folgende Änderung vornehmen:

In der Datei „PdfDocument.cs“ in der Methode „Leeres DoSave (PDFWriter Drehbuch)“ sucht „// HACK: entfernen XRefTrailer“(um Zeile 375) und ändern sie es wie folgt aus (7 neue Linien ersetzen 2 alte Linien):

// HACK: Remove XRefTrailer 
if (_trailer is PdfCrossReferenceStream) 
{ 
    // HACK^2: Preserve the SecurityHandler. 
    PdfStandardSecurityHandler securityHandler = _securitySettings.SecurityHandler; 
    _trailer = new PdfTrailer((PdfCrossReferenceStream) _trailer); 
    _trailer._securityHandler = securityHandler; 
} 

Haftungsausschluss: getestet habe ich diese mit Hi.pdf und HelloWorld.pdf nur. Während ich hoffe, dass sich der neue Code niemals schlechter als die alte Version verhalten wird, gibt es keine Garantie.

Zukünftige Versionen von PDFsharp, neuer als PDFsharp 1.50 beta 3, sollten diesen Patch nicht benötigen.

+0

Vielen Dank! Der Code funktioniert jetzt einwandfrei. – Ichigo