2016-07-25 4 views
2

PDFsharpライブラリを調べていて、PDFを保護する際に問題が発生しています。私が到達したとき、私はSystem.NullReferenceException: Object reference not set to an instance of an object.を得るPDFsharp 1.50 beta 3:PDFにパスワードを追加するときにオーナーのパスワードが間違っているエラー

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

:私はパスワードを設定するコードを追加するたびに自分のウェブサイトhttp://www.pdfsharp.com/PDFsharp/index.php?option=com_content&task=view&id=36&Itemid=47に、この例に続いて

ここでは、私のコードは

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); } 

ですPDFを保存する行

document.Save(filename); エラーメッセージも表示されます

---- 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 

なぜこれらのエラーが発生しますか?

編集 - はここPDFsharp 1.50あなたのコードと間違っベータ3.何も問題がある判明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

「System.NullReferenceException」というエラーメッセージが1つだけ表示されます。そのエラーのスタックトレースは表示されません。エラーはすべてのPDFファイルで発生しますか?サンプルコードと共に出荷されるHelloWorld.pdf?そうでない場合は、エラーを再現できるようにHi.pdfを提出してください。エラーメッセージの後にアサーションメッセージが表示されますか?最初に表示されるメッセージは、まず調査する必要があります。 –

+0

私は、あなたが疑うように、HelloWorld.pdfでエラーが発生しないと、PDFをチェックするとは思わなかった。こんにちは.pdf https://www.dropbox.com/s/tby9bvw2h60xyj1/hi.pdf?dl=0です。エラーメッセージの前にアサーションメッセージが表示されます。 – Ichigo

答えて

4

のスタックトレースです。クイックフィックスのために、あなたはPDFsharpのソースコードをダウンロードして、以下の変更を行うことができます

ファイルで「PdfDocument.cs」方法「のボイドにdoSave(PDFWriterのライター)」では「// HACKを探します。 (ライン375を中心に)「XRefTrailerを削除し、このようにそれを変更する(7つの新しい行が2つの古い行を置き換える):

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

免責事項:私はHi.pdfとHelloWorld.pdfでこれをテストしました。新しいコードが古いバージョンより悪くならないことを願っていますが、保証はありません。

PDFsharp 1.50ベータ3より新しいバージョンのPDFsharpは、このパッチを必要としません。

+0

ありがとう!コードは完全に機能するようになりました。 – Ichigo

関連する問題