Рейтинг:
20
Richard Deeming
Поле reader14[0]
возвращает массив байтов.
Затем вы преобразуете этот массив байтов в строку, в результате чего получается строка "System.Byte[]"
.
Затем вы передаете эту строку в GetInstance
перегрузка, которая ожидает путь к файлу. Поскольку это не корневой путь, метод рассматривает его как относительный путь и пытается найти файл:
C:\Users\Bibic Goran\source\repos\BSS\BSS\bin\Debug\System.Byte[]
Этот файл не существует, поэтому вы получаете исключение.
Измените свой код, чтобы загрузить изображение из массива байтов:
byte[] Memorandum = null;
using (SqlConnection openCon14 = new SqlConnection(Con))
using (SqlCommand cmd14 = new SqlCommand())
{
cmd14.CommandText = "select memorandum from podaci_o_korisniku";
cmd14.Connection = openCon14;
openCon14.Open();
using (SqlDataReader reader14 = cmd14.ExecuteReader())
{
if (reader14.Read())
{
Memorandum = (byte[])reader14[0];
}
}
}
iTextSharp.text.Image logo = iTextSharp.text.Image.GetInstance(Memorandum);
Goran Bibic
Это прекрасно работает...просто дополнительный вопрос
Эквивалентность МКС нуль?
если (reader14[0] != нуль &амп;&амп; reader14[0] != Значение dbnull.Ценность)
{
Меморандум = (байт[])reader14[0];
}
еще
{
Меморандум = ????
}
Richard Deeming
Вы уже инициализировали переменную в null
- значит , тебе это не нужно else
блок.
Очевидно, вам нужно будет проверить, есть ли Memorandum
является null
прежде чем ты позвонишь Image.GetInstance
, и не показывать логотип в этом случае.
Goran Bibic
Без проблем. Если значение равно null, то показать документ без изображения. Теперь у errof if есть null
Somesting как
Меморандум=пусто;
Или вот так
Richard Deeming
Переменная представляет собой массив байтов. Вы можете либо установить его на null
, или установите его в пустой массив - Array.Empty<byte>()
.
if (!reader14.IsDBNull(0))
{
Memorandum = (byte[])reader14[0];
}
else
{
Memorandum = null;
}
Goran Bibic
Здесь есть ошибка если она равна нулю
если (!reader14.IsDBNull(0)) ///здесь ошибка-это система.InvalidOperationException: "недопустимая попытка чтения при отсутствии данных".
{
Меморандум = (байт[])reader14[0];
}
еще
{
Меморандум = null;
}
Richard Deeming
Это может означать, что вы пропустили предыдущую if (reader14.Read())
тест.
Если вы хотите их объединить:
if (reader14.Read() && !reader14.IsDBNull(0))
{
Memorandum = (byte[])reader14[0];
}
else
{
Memorandum = null;
}
Goran Bibic
В этом случае есть ошибка здесь
iTextSharp.text.Изображение логотипа = iTextSharp.text.Изображение.GetInstance(Меморандум);
System.NullReferenceException: 'ссылка на объект не установлена на экземпляр объекта'.
Goran Bibic
Я решаю!
if (меморандум == null)
{
Ящик для сообщений.Показать("пожалуйста, обновите фотографии ", "Informacija", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);
}
еще
{
...распечатываемый документ
Спасибо
Goran Bibic
Мы можем поставить какое-нибудь окно для сообщений ...Пожалуйста, прочтите картинку...
Goran Bibic
Или какой-нибудь ящик для сообщений ...Пожалуйста, прочтите картинку...
Рейтинг:
1
MadMyche
Возможно, вы захотите взглянуть на документацию и образцы. Похоже, что метод, который вы пытаетесь использовать, предназначен для извлечения информации из файла; и что вы передаете информацию непосредственно.
То, что вы можете попробовать, - это создать System.Drawing.Image
объект, а затем передача этого объекта в iTextSharp
Ссылка:
iTextSharp - работа с изображениями[^]
Richard Deeming
Согласно с этот поток переполнения стека[^], iTextSharp имеет перегрузки, которые принимают массив байтов или поток, а также путь к файлу. :)
MadMyche
Видел это, но ошибка, которую он получает, предполагает, что метод, который он использует, ищет местоположение (string), а не массив байтов
Richard Deeming
Только потому, что он передавал строку вместо массива байтов. :)