2008-12-16 5 views
14

Tôi đang tạo tài liệu pdf bằng mã C# trong quy trình của mình. Tôi cần phải bảo vệ tài liệu bằng một số mật khẩu chuẩn như "123456" hoặc một số tài khoản. Tôi cần phải thực hiện điều này mà không cần bất kỳ tệp tham chiếu nào như trình ghi pdf.PDF được bảo vệ bằng mật khẩu bằng C#

Tôi đang tạo tệp PDF bằng cách sử dụng báo cáo dịch vụ báo cáo SQL.

Có cách dễ nhất.

Trả lời

21

tôi đang tạo ra một tài liệu pdf sử dụng C# mã trong quá trình tôi

Bạn đang sử dụng một số thư viện để tạo ra tài liệu này? Các pdf specification (8.6MB) là khá lớn và tất cả các nhiệm vụ liên quan đến thao tác pdf có thể khó khăn mà không cần sử dụng một thư viện của bên thứ ba. Mật khẩu bảo vệ và mã hóa file pdf của bạn với miễn phí và mã nguồn mở thư viện itextsharp là khá dễ dàng:

using (Stream input = new FileStream("test.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) 
using (Stream output = new FileStream("test_encrypted.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) 
{ 
    PdfReader reader = new PdfReader(input); 
    PdfEncryptor.Encrypt(reader, output, true, "secret", "secret", PdfWriter.ALLOW_PRINTING); 
} 
+4

Lưu ý rằng itextsharp yêu cầu giấy phép sử dụng cho mục đích thương mại, trừ khi mã của bạn cũng được phát hành theo cùng giấy phép sử dụng. Giá chỉ có sẵn khi áp dụng. – Spongeboy

+2

Lưu ý thêm rằng câu trả lời này được viết vào năm 2008, lúc đó iTextSharp được phát hành theo LGPL. Khi phát hành phiên bản 5.0.0 (tháng 12 năm 2009, bản sửa đổi SVN 108; thay đổi giấy phép được sửa đổi 99), giấy phép đã được đổi thành AGPL, yêu cầu Nhà cung cấp dịch vụ ứng dụng phải phát hành mã nguồn hoặc mua giấy phép thương mại. Phiên bản trước (4.1.6; LGPL) được chia nhỏ [ở đây] (https://github.com/itextsharper/iTextSharp-4.1.6) và vẫn có chức năng trên. –

+0

Thật đáng tiếc là việc mã hóa này quá dễ bị phá vỡ. http://www.codeproject.com/Articles/31493/PDF-Security-Remover – Diego

1

Nó sẽ là rất khó khăn để làm điều này mà không sử dụng một thư viện PDF. Về cơ bản, bạn sẽ cần phải phát triển thư viện như vậy mình.

Với sự trợ giúp của thư viện PDF, mọi thứ đơn giản hơn nhiều. Dưới đây là mẫu thể hiện cách một tài liệu có thể dễ dàng được bảo vệ bằng cách sử dụng Docotic.Pdf library:

public static void protectWithPassword(string input, string output) 
{ 
    using (PdfDocument doc = new PdfDocument(input)) 
    { 
     // set owner password (a password required to change permissions) 
     doc.OwnerPassword = "pass"; 

     // set empty user password (this will allow anyone to 
     // view document without need to enter password) 
     doc.UserPassword = ""; 

     // setup encryption algorithm 
     doc.Encryption = PdfEncryptionAlgorithm.Aes128Bit; 

     // [optionally] setup permissions 
     doc.Permissions.CopyContents = false; 
     doc.Permissions.ExtractContents = false; 

     doc.Save(output); 
    } 
} 

Tuyên bố từ chối trách nhiệm: Tôi làm việc cho nhà cung cấp thư viện.