c# - PDFsharp 1.50 beta 3: Empty owner password error when adding password to PDF -
i'm exploring pdfsharp library , having issues password protecting pdfs.
following example on website http://www.pdfsharp.com/pdfsharp/index.php?option=com_content&task=view&id=36&itemid=47,
here 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); }
whenever add code sets passwords:
securitysettings.userpassword="user"; securitysettings.ownerpassword="owner";
i system.nullreferenceexception: object reference not set instance of object.
when reach line saves pdf
document.save(filename); i'm getting error messages
---- debug assertion failed ---- ---- assert short message ---- empty owner password. ---- assert long message ---- @ pdfsharp.pdf.security.pdfstandardsecurityhandler.prepareencryption() in c:\users\ichigo\downloads\pdfsharp-migradocfoundation-1_50-beta3b\pdfsharp\src\pdfsharp\pdf.security\pdfstandardsecurityhandler.cs:line 590 @ pdfsharp.pdf.pdfdocument.dosave(pdfwriter writer) in c:\users\ichigo\downloads\pdfsharp-migradocfoundation-1_50-beta3b\pdfsharp\src\pdfsharp\pdf\pdfdocument.cs:line 392 @ 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 @ pdfsharp.pdf.pdfdocument.save(stream stream) in c:\users\ichigo\downloads\pdfsharp-migradocfoundation-1_50-beta3b\pdfsharp\src\pdfsharp\pdf\pdfdocument.cs:line 352 @ pdfsharp.pdf.pdfdocument.save(string path) in c:\users\ichigo\downloads\pdfsharp-migradocfoundation-1_50-beta3b\pdfsharp\src\pdfsharp\pdf\pdfdocument.cs:line 258
why getting these errors?
edit- here's stack trace system.nullreferenceexception.
something went wrong : `system.nullreferenceexception: object reference not set instance of object.` @ pdfsharp.pdf.security.pdfstandardsecurityhandler.sethashkey(pdfobjectid id) @ pdfsharp.pdf.io.pdfwriter.writebeginobject(pdfobject obj) @ pdfsharp.pdf.pdfdictionary.writeobject(pdfwriter writer) @ pdfsharp.pdf.pdfpage.writeobject(pdfwriter writer) @ pdfsharp.pdf.pdfdocument.dosave(pdfwriter writer) @ pdfsharp.pdf.pdfdocument.save(stream stream, boolean closestream) @ pdfsharp.pdf.pdfdocument.save(stream stream) @ pdfsharp.pdf.pdfdocument.save(string path)
turns out there problem pdfsharp 1.50 beta 3. nothing wrong code.
for quick fix, can download pdfsharp source code , make following change:
in file "pdfdocument.cs" in method "void dosave(pdfwriter writer)" "// hack: remove xreftrailer" (around line 375) , change (7 new lines replace 2 old lines):
// hack: remove xreftrailer if (_trailer pdfcrossreferencestream) { // hack^2: preserve securityhandler. pdfstandardsecurityhandler securityhandler = _securitysettings.securityhandler; _trailer = new pdftrailer((pdfcrossreferencestream) _trailer); _trailer._securityhandler = securityhandler; }
disclaimer: tested hi.pdf , helloworld.pdf only. while hope new code never behave worse old version, there no guarantee.
future versions of pdfsharp, newer pdfsharp 1.50 beta 3, should not require patch.
Comments
Post a Comment