如何添加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-[email protected][/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中顯示如下(左上角是數字簽名):

最後提醒一點,安全保護和數字簽名不能同時使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章