【问题标题】:PDFsharp 1.50 beta 3: Empty owner password error when adding password to PDFPDFsharp 1.50 beta 3:将密码添加到 PDF 时出现空所有者密码错误
【发布时间】:2016-07-25 18:53:31
【问题描述】:

我正在探索 PDFsharp 库,但在密码保护 PDF 时遇到问题。

按照他们网站上的这个例子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); }

每当我添加设置密码的代码时:

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

当我到达保存 PDF 的行时,我收到 System.NullReferenceException: Object reference not set to an instance of an object.

document.Save(文件名); 我也收到错误消息

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

为什么会出现这些错误?

编辑-这是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)

【问题讨论】:

  • 您只会收到一条错误消息:“System.NullReferenceException”。您不会显示该错误的堆栈跟踪。是否所有 PDF 文件都会出现错误,例如示例代码附带的 HelloWorld.pdf?如果没有,请提供您的 Hi.pdf 以使错误可重现。您是否在错误消息之后收到断言消息?必须首先调查首先显示的消息。
  • 我没想过要检查 PDF,正如您所怀疑的那样,HelloWorld.pdf 不会发生错误。这是 Hi.pdf dropbox.com/s/tby9bvw2h60xyj1/hi.pdf?dl=0。我在错误消息之前收到断言消息。

标签: c# pdf passwords pdf-generation pdfsharp


【解决方案1】:

原来 PDFsharp 1.50 beta 3 存在问题。您的代码没有问题。

为了快速修复,您可以下载 PDFsharp 源代码并进行以下更改:

在方法“void DoSave(PdfWriter writer)”中的文件“PdfDocument.cs”中查找“// HACK: Remove XRefTrailer”(在第 375 行附近)并像这样更改它(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 的未来版本,比 PDFsharp 1.50 beta 3 更新,应该不需要这个补丁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2015-01-11
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多