Как я могу создать только один PDF - PullRequest
2 голосов
/ 30 марта 2012

Ниже мой код, я генерирую защищенный паролем PDF из ItextSharp.

На самом деле два файла PDF создаются и сохраняются.

Но я хочу сохранить только файл.

Если я использую то же самое для ввода и вывода, я получаю ошибку.

По-настоящему ценю вашу помощь.

Letter1 mydoc = new Letter1();
mydoc.GenerateLetter();  
string WorkingFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string InputFile = Path.Combine(WorkingFolder, "Testing1.pdf");
FileStream f = new FileStream(InputFile, FileMode.Create);
f.Write(mydoc.DocumentBytes, 0, mydoc.DocumentBytes.Length);
f.Close();
string OutputFile = Path.Combine(WorkingFolder, "TestingOut1.pdf");
using (Stream input = new FileStream(InputFile, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read))
{
    using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        PdfReader reader = new PdfReader(input);
        PdfEncryptor.Encrypt(reader, output, true, "abc123", "secret", PdfWriter.ALLOW_SCREENREADERS);
    }
}  

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Рассмотрите возможность использования MemoryStream

Непроверенный код (записывается в браузере:)

using (MemoryStream m = new MemoryStream())
{
    m.Write(mydoc.DocumentBytes, 0, mydoc.DocumentBytes.Length);
    m.Seek(0, SeekOrigin.Origin);

    string OutputFile = Path.Combine(WorkingFolder, "TestingOut1.pdf");
    using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        PdfReader reader = new PdfReader(m);
        PdfEncryptor.Encrypt(reader, output, true, "abc123", "secret", PdfWriter.ALLOW_SCREENREADERS);
    }
}  
0 голосов
/ 30 марта 2012

Нет необходимости создавать отдельный поток для чтения PDF-файла, который вы хотите зашифровать.Используйте перегруженный конструктор PdfReader, который принимает путь к файлу .Как то так:

PdfReader reader = new PdfReader(InputFile);
using (Stream output = new FileStream(
    OutputFile, FileMode.Create, FileAccess.Write, FileShare.None
))
{
  PdfEncryptor.Encrypt(
    reader, output, true, "abc123", "secret", PdfWriter.ALLOW_SCREENREADERS
  );    
}
...