1

I have written a code which creates a pdf file exporting from Crystal Reports in VB.NET 2005. All the code is working fine and also PDF files are created ok, but I want to set a password to that PDF file programatically. Is there any solution?

Below is my code to create PDF files while exporting from Crystal Reports

Dim CrExportOptions As ExportOptions
Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions()
Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()

CrDiskFileDestinationOptions.DiskFileName = "D:\PDFFiles\" & fileName

CrFormatTypeOptions.FirstPageNumber = 1 ' Start Page in the Report

CrFormatTypeOptions.LastPageNumber = 10 ' End Page in the Report

CrFormatTypeOptions.UsePageRange = True


CrExportOptions = CrReport.ExportOptions

With CrExportOptions

    .ExportDestinationType = ExportDestinationType.DiskFile
    .ExportFormatType = ExportFormatType.PortableDocFormat

    .DestinationOptions = CrDiskFileDestinationOptions

    .FormatOptions = CrFormatTypeOptions

End With
CrReport.Export()
4

2 回答 2

2

据我所知,Crystal Reports 可以导出为 PDF 格式,但不能对生成的文件进行任何密码保护(请参阅此处的许多类似帖子之一)。您可以使用第三方工具来保护生成的 PDF,但您不能在导出期间执行此操作。我发现有一篇文章提到了使用密码保护成功导出,但在尝试导航提到的站点失败后我放弃了。在这里亲自检查一下,也许你有更多的运气。

克里斯

于 2013-10-11T00:01:05.410 回答
2

对于仍在寻找解决方案的人,我已经找到了一种在PdfSharp. 您可以使用Nuget Package Manager将 pdfsharp 添加到您的项目中。然后只需添加以下代码 -

System.IO.Stream st = CrReport.ExportToStream(ExportFormatType.PortableDocFormat);
PdfDocument document = PdfReader.Open(st);

PdfSecuritySettings securitySettings = document.SecuritySettings;

// Setting one of the passwords automatically sets the security level to 
// PdfDocumentSecurityLevel.Encrypted128Bit.
securitySettings.UserPassword = "user";
securitySettings.OwnerPassword = "owner";

// Don´t use 40 bit encryption unless needed for compatibility reasons
//securitySettings.DocumentSecurityLevel = PdfDocumentSecurityLevel.Encrypted40Bit;

// Restrict some rights.            
securitySettings.PermitAccessibilityExtractContent = false;
securitySettings.PermitAnnotations = false;
securitySettings.PermitAssembleDocument = false;
securitySettings.PermitExtractContent = false;
securitySettings.PermitFormsFill = true;
securitySettings.PermitFullQualityPrint = false;
securitySettings.PermitModifyDocument = true;
securitySettings.PermitPrint = false;

// Save the document...
document.Save(filename);
于 2013-11-04T11:59:29.323 回答