Рейтинг:
0
Richard Deeming
Как сказал Джерри, используемый вами элемент управления не поддерживает загрузку файлов из потока. Сначала вы должны сохранить их на диск.
byte[] ap = (byte[])documentsDataGridView.SelectedRows[0].Cells["pdf_file"].Value;
string tempName = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".pdf");
File.WriteAllBytes(tempName, ap);
axAcroPDF1.src = tempName;
NB: Вам понадобится некоторый код для удаления временного файла, когда вы закончите с ним или когда ваше приложение закроется.
Если вам нужен элемент управления, поддерживающий загрузку непосредственно из потока, попробуйте
PdfiumViewer[
^], использующий
Библиотека Pdfium от Google[
^]. Если вы устанавливаете его через NuGet, обратите внимание на
инструкция по установке[
^] - вам понадобится один или несколько дополнительных пакетов для установки собственной библиотеки Pdfium.
Goran Bibic
У меня есть местоположение файла каждый раз, когда я загружаю pdf-файл. любить
D:\SPEDICIJA MERIDIJAN\informacija\SKM2556.pdf
Это происходит в базе данных sql, вставленной при загрузке файла.
Может быть, чтобы использовать это?
Вместо этого эта строка tempName = Path.Комбинат(Путь.GetTempPath(), Путь.GetRandomFileName() + ".формат PDF");
Имя столбца в sql-это file_location
Richard Deeming
Если это расположение файла допустимо на каждом компьютере, где запущено ваше приложение, то это будет работать.
Обычно для этого используется UNC-путь, указывающий на общую папку на сервере в локальной сети. Или путь, указывающий на подключенный сетевой диск, который отображается всеми компьютерами, на которых выполняется ваш код.
Goran Bibic
Ошибка возникает при открытии моего приложения
Файл не запускается с '%PDF-'
файл:///с|/пользователей/ПК/в AppData/местного/темп/ozcbqyu.ЗМУ.формат PDF
Richard Deeming
Эта ошибка предполагает, что данные в вашей базе данных не являются допустимым PDF-файлом.
Goran Bibic
Я использую этот код для вставки pdf-файла...
byte[] filedata = null;
MemoryStream ms = Новый Поток памяти();
filedata = ms.GetBuffer();
axAcroPDF1.src = локальное кодирование.GetString(ms.Метод toArray());
вставить в dbo.documents (pdf_file) значения (@pdf_files)
querySaveStaff.Parameters.AddWithValue ("@pdf_file",SqlDbType.Binary).Значение=данным;
Этот способ, ОК?
Richard Deeming
Нет.
Посмотрите на свой код еще раз. Как вы думаете, в какой момент Вы загружаете байты из существующего PDF-файла и отправляете их в SQL?
А ты-нет. Вы создаете пустоту MemoryStream
; получение MemoryStream
буфер, который в данный момент является пустым массивом байтов; преобразование его в строку, которая будет пустой, и указание элементу управления AcroPDF загрузить ее; и передача этого пустого массива байтов в SQL.
Если вы хотите вставить содержимое PDF-файла в SQL, то вам нужно прочитать содержимое этого PDF файла!
Goran Bibic
Может быть, какое-то решение с помощью считывателя данных?
Рейтинг:
0
Gerry Schmitz
Он (вероятно) запрашивает "путь к PDF-файлу" (а не "поток");
Скопируйте поток в файл на диске и укажите "путь к файлу" строка (где вы получили свою ошибку).
Goran Bibic
Но у меня нет местоположения пути....Я просто хочу прочитать файл из базы данных
Simon_Whale
все, что вам нужно сделать, это прочитать blob-объект из базы данных и временно сохранить его в файл на локальном компьютере, а затем загрузить pdf-файл обычным способом.
Goran Bibic
Чтобы найти из какого-то места? Папка какая-то exmpl...? Просто путь из базы данных? Я думаю, что это нормальное решение для вставки в базу данных, как varbinary(MAX).
Это плохое решение?
Goran Bibic
Может быть, какое-то решение с помощью считывателя данных?