如何添加ActiveReports 6导出PDF时的安全设置和数字签名

PDF格式已经成为广为应用的电子文档交换格式标准。为了便于用户在组织内和组织之间共享报表数据,ActiveReports 6可以将生成的报表导出为PDF格式。下面的代码是ActiveReports 6导出PDF的简单示例。

Private void btnExport_Click(Object sender, System.EventArgs e){    rptDataDynamics rpt =new rptDataDynamics();    DataDynamics.ActiveReports.Export.Pdf.PdfExport p =new DataDynamics.ActiveReports.Export.Pdf.PdfExport();    rpt.Run();this.arv.Document = rpt.Document;    p.Export(rpt.Document, Application.StartupPath +"\\p.pdf");}

 

有些情况下,你可能需要对报表的内容进行一定程度的安全保护,比如增加一个密码,或者希望报表读者只能在线浏览而不是打印出来。ActiveReports 6在导出PDF时提供了丰富安全权限设置。不仅如此,在ActiveReports 6 专业版中,你甚至可以通过数字签名来表明文档的来源和创建时间,已经文档是否被修改等。

 

一.导出带安全保护的PDF
类DataDynamics.ActiveReports.Export.Pdf.PdfExport的Security成员用来指定导出PDF的安全保护设置,主要包括:

1. Encrypt: 设置或获取一个值,该值决定是否对导出的PDF加密

2. OwnerPassword:  PDF拥有者密码。在打开PDF时如果输入这个密码,则操作权限不受下面的Permissions设置限制。

3. Permissions: 指定用户对PDF的操作权限,包括是否可以拷贝、是否可以打印、是否可以批注、是否可以修改内容等。

4. UserPassword: 获取或设置用户密码。用户在打开PDF时需要输入这个密码,并且操作权限受Permissions的限制。

例如,下面的示例代码设置了用户密码,并且允许用户打印文档:

p.Security.Encrypt =true;p.Security.Use128Bit =true;p.Security.UserPassword ="monkey";p.Security.Permissions = DataDynamics.ActiveReports.Export.Pdf.PdfPermissions.AllowPrint;p.Export(rpt.Document, Application.StartupPath +"\\p.pdf");

  

二.导出带数字签名的PDF
数字签名的作用与传统的手写签名类似,用来表明谁对文档进行了签署。另外,签名者还可以指定文档被签署后的修改权限。用户可以查看到文档被签名的时间,已经签署后是否被修改过等信息。

在专业版的ActiveReports里,对PDF格式的数据输出又有了增强功能。现在用户可以将不可见的数字签名或者可见的文字图案加入到报表里。通过16种属性对数字签名进行个性化设置, 用数字签名验证报表作者,还可通过Certification Level 来设定用户访问权限。用时间印章功能建立第三方授权版本。这些新功能完全和Adobe的新安全机制兼容。

为了创建数字签名,你必须首先拥有一个有效的PKCS#12 证书文件(*.pfx)。通常情况下,证书需要从专业数字签名厂商获得。如果是为了学习和了解ActiveReports的数字签名功能,你可以使用如下步骤自己创建一个证书文件:

1.用如下命令行操作创建一个证书
makecert -r -pe -n "CN=Your Name" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.3 -ss My

2.在IE浏览器中选择“工具---选项”菜单,在弹出的对话框中选择“内容” 页,然后点击“证书”按钮,弹出证书对话框。

3.在证书对话框中按“导出”按钮,导出包含私钥的证书文件,并记下你设置的密码。

下面的代码示例创建了一个包含文字和图片的数字签名。使用前需要把证书文件名替换为你创建的PFX文件,并更改密码为你创建PFX文件时输入的密码。

// ImageText signature.p.Signature.VisibilityType = DataDynamics.ActiveReports.Export.Pdf.Signing.VisibilityType.ImageText;

// Bounds (Container of Text & Image).p.Signature.Stamp.Bounds =new RectangleF(0, 0, 4, 1);

// Text area.p.Signature.Stamp.TextAlignment = DataDynamics.ActiveReports.Export.Pdf.Signing.Alignment.Left;p.Signature.Stamp.Font =new Font("Comic Sans MS", 8, FontStyle.Regular);// Note: Specify (x, y) in relative coordinate from Bounds top-left.p.Signature.Stamp.TextRectangle =new RectangleF(1, 0, 3, 1);

// Image area.p.Signature.Stamp.Image = Image.FromFile("D:\\Temp\\PowerToolsLogo.jpg");p.Signature.Stamp.ImageAlignment = DataDynamics.ActiveReports.Export.Pdf.Signing.Alignment.Center;// Note: Specify (x, y) in relative coordinate from Bounds top-left.p.Signature.Stamp.ImageRectangle =new RectangleF(0, 0, 1, 1);

// Set certificate & password.p.Signature.Certificate =new System.Security.Cryptography.X509Certificates.X509Certificate2("D:\\Temp\\AllanCert.pfx", "123");

// set the certifiation levelp.Signature.CertificationLevel = DataDynamics.ActiveReports.Export.Pdf.Signing.CertificationLevel.NoChangesAllowed; 

//Signature items.p.Signature.Contact =new DataDynamics.ActiveReports.Export.Pdf.Signing.SignatureField<string>(“[email]tool-sales.cn@grapecity.com[/email]”, true);p.Signature.SignDate =new DataDynamics.ActiveReports.Export.Pdf.Signing.SignatureField<System.DateTime>(System.DateTime.Now, true);

p.Export(rpt.Document, Application.StartupPath + \\p.pdf);

  

 

上述生成的报表文件在Acrobat Reader中显示如下(左上角是数字签名):

最后提醒一点,安全保护和数字签名不能同时使用。

 

更多有关 ActiveReports 使用方法和技巧的文章,请参阅:葡萄城产品技术社区 ActiveReports 知识库与精华区

时间: 2024-10-22 08:39:48

如何添加ActiveReports 6导出PDF时的安全设置和数字签名的相关文章

repot datagridview-用vs2010 导出repot时,如何设置 datagridview 大小,求解

问题描述 用vs2010 导出repot时,如何设置 datagridview 大小,求解 用vs2010 导出repot时,datagridview 的大小 不能随数据的增加 而变大

水晶报表分页导出PDF时动态加载的图片、控件未更新

问题描述 我用VS2005+水晶报表Web版做了一个每页显示一项详细植物信息.图片的报表.例如:Plant表中保存了PlantName,LeafColor,PlantImageUrl三个字段.在报表中使用子报表动态加载PlantImageUrl字段中记录的图片然后根据LeafColor字段中保存的颜色数据(如"|#CCCCCC||#DDDDDD|"),经过字符串处理后,更改两个BoxObject的FillColor,来表示不同阶段的颜色.在浏览器中直接浏览都显示正确,每次翻页,图片和B

水晶报表-怎么设置CrystalReportViewer导出报表时只能选择导出PDF?

问题描述 怎么设置CrystalReportViewer导出报表时只能选择导出PDF? 客户现在不想要导出word和Exel等功能,只想保留导出PDF功能,怎么样设置才能在选择导出时只能导出PDF吗?

网站导出pdf 报错Cound not find file 服务端生成的pdf

问题描述 在网站上导出pdf时,时而成功,时而就报错Couldnotfindfile,实在查不出问题,而且在服务端PDF路径下都生成了,就是下载下来时报错stringfileName=HttpContext.Current.Server.MapPath(@"~/PDF/"+DateTime.Now.ToString("yyyyMMddHHmmss")+".pdf");stringwkhtmltopdfPath=HttpContext.Curren

ActiveReports WinFroms 平台 PDF 导出代码

问题描述 已经将页面打印出来了,我在打印页面添加一个转换成PDF按钮,请问点击事件方法应该怎么写呢?ActiveReportsWinFroms平台PDF导出代码共享一下呗. 解决方案 解决方案二:ActiveReports上代码:[code=csharp][privatevoidForm1_Load(objectsender,EventArgse){SectionReportsr=newSectionReport();sr.LoadLayout("..\..\SectionReport1.rpx

c#-itextsharp添加pdf水印时,怎么设置图片水印、表格水印的透明度?

问题描述 itextsharp添加pdf水印时,怎么设置图片水印.表格水印的透明度? 哪位itextsharp高手可以指点一下,通过itextsharp添加pdf水印时,怎么设置图片水印.表格水印的透明度? 小弟通过设置PdfContentByte的waterMarkContent.SetGState(gs);,以及gs的gs.FillOpacity = 0.2f; 只对文字的透明度有效.

解决MindManager导出PDF异常问题

  在Mindmanager中,用户可以根据自己的需求选择将导图导出为PDF格式,但也会偶尔出现异常,本文就介绍了MindManager导出PDF异常问题中的一种情况. 问题描述: 在载入开启一个MindManager Player PDF文件时,Adobe Acrobat 7 不停报告"Buffering正在缓冲" ,而且该文件无法正常显示. 问题分析:MindManager Player 不支持Adobe Acrobat 7 (Reader 或者 Professional版本).

JS导出PDF插件的方法(支持中文、图片使用路径)_javascript技巧

在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfmake,很好地解决了此问题.它的效果可以先到http://pdfmake.org/playground.html查看.在使用过程中,还发现图片的插入是相对繁琐的一件事. 针对这些问题,本文的主要内容可分为三部分: •pdfmake的基本使用方法: •如何解决中文问题; •如何通过指定图片地址插入图片. pdfmake的基本使用方法 1.包含以下两个文件 <script src="build/

pdf-iTextSharp 生成PDF时,出现异常:outofmemoryexception

问题描述 iTextSharp 生成PDF时,出现异常:outofmemoryexception 如题,我在用iTextSharp 生成PDF时,Doument对象的Add方法出现异常:outofmemoryexception,内存溢出. 前面我定义了一个document和table: iTextSharp.text.Document document = iTextSharp.text.Document(); iTextSharp.text.Table table = new iTextSha