Goran Bibic Ответов: 2

Чтение PDF doc в axacropdf из MS sqlc#


I need to read from ms sql file to adobe PDF reader
Error is line 8
 
Error CS0029 Cannot implicitly convert type 'System.IO.MemoryStream' to 'string'
 
Some help?


Что я уже пробовал:

try  
                {  
                    if (documentsDataGridView.SelectedRows[0].Cells["pdf_file"].Value != null)  
                    {  
                        byte[] ap = (byte[])documentsDataGridView.SelectedRows[0].Cells["pdf_file"].Value;  
                        MemoryStream ms = new MemoryStream(ap);  
                       
                        axAcroPDF1.src = ms;  //here is error
  
  
                          
                    }  
                    else {  
                        axAcroPDF1.src = null;  
                    }  
                }  
                catch  
                {  
                    axAcroPDF1.src = null;  
                }  

Patrice T

Что ты пытаешься сделать?
Что вы не понимаете в сообщении об ошибке ?

Goran Bibic

Я хочу прочитать файл из базы данных

выбор datagrid изменен

пробовать
{
if (documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Значение != null)
{
byte[] ap = (byte[])documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Ценность;
MemoryStream ms = новый MemoryStream(ap);
//dataPictureBox.система визуализации.Рисование.Изображение.FromStream(МС);

axAcroPDF1.src = локальное кодирование.GetString(ms.Метод toArray());
}
еще {
axAcroPDF1.в src = нуль;
}
}
ловить
{
axAcroPDF1.в src = нуль;
}

2 Ответов

Рейтинг:
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

Может быть, какое-то решение с помощью считывателя данных?