Как сохранить FileSteam в формате PDF - PullRequest
4 голосов
/ 22 июля 2011

Я использую сторонний инструмент для получения отсканированного содержимого со сканера. При нажатии кнопки он выполняет код и передает содержимое в виде FileStream. Теперь мне нужно сохранить это содержимое FileStream в виде файла PDF в указанной папке. После сохранения мне нужно открыть файл в браузере. Так как я могу сохранить FileStream в виде файла PDF. Пожалуйста, помогите мне.

Ответы [ 5 ]

1 голос
/ 22 июля 2011

Вы можете записать поток непосредственно в выходной буфер ответа.

Так что, если вы находитесь в той точке кода, где у вас есть поток файлов со сканера. Просто прочитайте байты из файлового потока сканера и запишите их в Response.OutputStream

Установите тип содержимого application/pdf

Убедитесь, что вы больше ничего не возвращаете. Браузер пользователей будет делать все, что настроено сейчас, либо сохранять на диск, либо показывать в браузере. В этот момент вы также можете сохранить на диск на сервере, если вам нужна резервная копия.

Я предполагаю, что ваш файловый поток уже является PDF, в противном случае вам нужно будет использовать что-то вроде itextsharp для создания PDF.

Редактировать Вот примерный и готовый код для этого. Вы можете привести это в порядок, например, добавив перехват исключений, чтобы убедиться, что поток файлов очищен правильно.

    public void SaveToOutput(Stream dataStream)
    {
        dataStream.Seek(0, SeekOrigin.Begin);
        FileStream fileout = File.Create("somepath/file.pdf");

        const int chunk = 512;
        byte[] buffer = new byte[512];

        int bytesread = dataStream.Read(buffer,0,chunk);

        while (bytesread == chunk)
        {
            HttpContext.Current.Response.OutputStream.Write(buffer, 0, chunk);
            fileout.Write(buffer, 0, chunk);
            bytesread = dataStream.Read(buffer, 0, chunk);
        }

        HttpContext.Current.Response.OutputStream.Write(buffer, 0, bytesread);
        fileout.Write(buffer, 0, bytesread);
        fileout.Close();

        HttpContext.Current.Response.ContentType = "application/pdf";
    }

Simon

1 голос
/ 22 июля 2011

Если я правильно вас понимаю, сторонняя библиотека передает вам поток, содержащий данные для отсканированного документа, и вам нужно записать его в файл? Если это так, вам нужно найти файл ввода / вывода в C #. Вот ссылка и пример:

Stream sourceStream = scanner.GetOutput(); // whereever the source stream is
FileStream targetStream = File.OpenWrite(filename, FileMode.Create());
int bytesRead = 0;
byte[] buffer = new byte[2048];
while (true) {
     bytesRead = sourceStream.Read(buffer, 0, buffer.length);
     if (bytesRead == 0)
         break;
     targetStream.Write(buffer, 0, bytesRead);
}
sourceStream.Close();
targetStream.Close();
1 голос
/ 22 июля 2011

Возможно, вы захотите взглянуть на библиотеку C # PDF на SourceForge: http://sourceforge.net/projects/pdflibrary/

0 голосов
/ 22 июля 2011

Еще одна выдающаяся библиотека PDF (которую я также использовал в прошлом) - iTextSharp . Вы можете взглянуть на этот учебник о том, как преобразовать ваш поток в PDF и затем загрузить его пользователем.

0 голосов
/ 22 июля 2011
...