Защищенный паролем PDF с использованием С#
Я создаю pdf-документ, используя код С# в своем процессе. Мне нужно защитить документ
с некоторым стандартным паролем, например "123456" или некоторым номером учетной записи. Мне нужно сделать это без
любые ссылочные dll, такие как pdf writer.
Я создаю файл PDF, используя отчеты служб SQL Reporting.
Есть ли простой способ.
Ответы
Ответ 1
Я создаю pdf-документ, используя С# код в моем процессе
Используете ли вы библиотеку для создания этого документа? спецификация pdf (8.6MB) довольно велика, и все задачи, связанные с обработкой PDF, могут быть трудными без использования сторонней библиотеки. Защита паролем и шифрование ваших файлов PDF с помощью бесплатной библиотеки с открытым исходным кодом itextsharp довольно просто:
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);
}
Ответ 2
Было бы очень сложно сделать это без использования библиотеки PDF. В принципе, вам нужно будет создать такую библиотеку самостоятельно.
С помощью библиотеки PDF все намного проще. Вот пример, который показывает, как документ может быть легко защищен с помощью 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);
}
}
Отказ от ответственности: я работаю для поставщика библиотеки.
Ответ 3
Если кто-то ищет ссылку IText7.
private string password = "@d45235fewf";
private const string pdfFile = @"C:\Temp\Old.pdf";
private const string pdfFileOut = @"C:\Temp\New.pdf";
public void DecryptPdf()
{
//Set reader properties and password
ReaderProperties rp = new ReaderProperties();
rp.SetPassword(new System.Text.UTF8Encoding().GetBytes(password));
//Read the PDF and write to new pdf
using (PdfReader reader = new PdfReader(pdfFile, rp))
{
reader.SetUnethicalReading(true);
PdfDocument pdf = new PdfDocument(reader, new PdfWriter(pdfFileOut));
pdf.GetFirstPage(); // Get at the very least the first page
}
}
Ответ 4
Требуется больше усилий для реализации стандартов шифрования для защиты вашего документа PDF. Syncfusion PDF - это библиотека .NET PDF, предлагающая расширенный стандарт шифрования AES 256 Revision 6 для защиты PDF-документов с использованием С# и защиты существующих PDF-документов с использованием С# с помощью всего лишь нескольких строк кода.
Примечание: я работаю на Syncfusion.