如何添加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 level
p.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中显示如下(左上角是数字签名):

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



本文转自 powertoolsteam 51CTO博客,原文链接:http://blog.51cto.com/powertoolsteam/666590,如需转载请自行联系原作者

相关文章
|
6月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
3月前
|
缓存 测试技术 网络安全
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
67 0
05百融云策略引擎项目交付-laravel实战完整交付定义常量分文件配置-独立建立lib类处理-成功导出pdf-优雅草卓伊凡
|
8月前
|
文字识别
【PDF提取全自动改名】如何批量提取PDF指定区域的文字内容,用内容批量给PDF命名或者导出表格,学会全自动解放双手
在生活和工作中,我们常需处理大量PDF文件,如银行单据、税收单据等。手动处理效率低下,而使用“咕嘎批量PDF多区域内容提取重命名导表格系统”可快速完成数千份文档的处理,大幅提高效率。该工具通过获取PDF各区域内容坐标,导入并处理文件,最终将信息提取至表格,并根据关键信息对PDF进行重命名,方便管理和查找。
1014 2
|
8月前
|
人工智能 JSON 搜索推荐
猫步简历 - 开源免费AI简历生成器 | 一键导出PDF/JSON
猫步简历是一款免费开源的AI简历生成器,帮助用户轻松创建独特、专业的简历。支持导出超高清PDF、图片、JSON等多种格式,并提供AI智能创作、润色和多语种切换等功能。拥有海量模板、高度定制化模块及完善的后台管理系统,助力求职者脱颖而出。官网:https://maobucv.com,GitHub开源地址:https://github.com/Hacker233/resume-design。
1680 10
|
8月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
818 8
|
3月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
446 40
|
3月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
5月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
167 10
|
4月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
8月前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
886 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具

热门文章

最新文章