Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PDFsharp 1.50 beta 3:将密码添加到PDF时出现空所有者密码错误_C#_Pdf_Passwords_Pdf Generation_Pdfsharp - Fatal编程技术网

C# PDFsharp 1.50 beta 3:将密码添加到PDF时出现空所有者密码错误

C# PDFsharp 1.50 beta 3:将密码添加到PDF时出现空所有者密码错误,c#,pdf,passwords,pdf-generation,pdfsharp,C#,Pdf,Passwords,Pdf Generation,Pdfsharp,我正在探索PDFsharp库,并且在密码保护PDF时遇到问题 按照他们网站上的这个例子 这是我的密码 try { string filename = "hi.pdf"; File.Copy(Path.Combine("C:/User/Ichigo/Desktop", filename), Path.Combine(Directory.GetCurrentDirectory(), filename), true); PdfDocument document = Pdf

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

按照他们网站上的这个例子

这是我的密码

 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";
我得到
System.NullReferenceException:对象引用未设置为对象的实例。
当我到达保存PDF的行时

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)

结果发现PDFsharp 1.50 beta 3存在问题。你的代码没有问题

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

在方法“void DoSave(PdfWriter writer writer)”中的文件“PdfDocument.cs”中查找“//HACK:Remove xreftrail”(第375行附近),并将其更改为这样(7行新行替换2行旧行):

免责声明:我仅使用Hi.pdf和HelloWorld.pdf对其进行了测试。虽然我真的希望新代码永远不会比旧版本表现得更糟,但这并不能保证


PDFsharp的未来版本(比PDFsharp 1.50 beta 3更新)不需要此修补程序。

您只会收到一条错误消息:“System.NullReferenceException”。您不会显示该错误的堆栈跟踪。是否所有PDF文件都会出现此错误,例如示例代码附带的HelloWorld.PDF?如果没有,请提供您的Hi.pdf以使错误重现。您是否在错误消息之后收到断言消息?必须首先调查显示first的消息。我不认为要检查pdf,正如您所怀疑的,HelloWorld.pdf中不会出现错误。这里是Hi.pdf。我在错误消息之前得到断言消息。
// HACK: Remove XRefTrailer
if (_trailer is PdfCrossReferenceStream)
{
    // HACK^2: Preserve the SecurityHandler.
    PdfStandardSecurityHandler securityHandler = _securitySettings.SecurityHandler;
    _trailer = new PdfTrailer((PdfCrossReferenceStream) _trailer);
    _trailer._securityHandler = securityHandler;
}