milepredy Ответов: 2

Экспорт веб-формы с imge в PDF


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

Ошибка, которую я получаю, такова:
The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

что указывает на код:
iTextSharp.text.Image picture = iTextSharp.text.Image.GetInstance(imageURL);


Пожалуйста помочь.

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

Это код для выбора изображения из базы данных

string queryimg = "Select `picture` from image where frpid=" + Session["app_id"].ToString();
            command = new MySqlCommand(queryimg, con);
            byte[] bytes = (byte[])command.ExecuteScalar();

            string strBase64 = Convert.ToBase64String(bytes);

            if (strBase64 != null)
            {
                prvimage.ImageUrl = "data:Image/png;base64," + strBase64;
            }
            else
            {
                Response.Write("Must upload an Image");
            }


Это код для экспорта веб-формы в формат PDF

using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter hw = new HtmlTextWriter(sw))
            {
                form1.RenderControl(hw);
                StringReader sr = new StringReader(sw.ToString());
                Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
                pdfDoc.Open();
                string imageURL = prvimage.ImageUrl;
                iTextSharp.text.Image picture = iTextSharp.text.Image.GetInstance(imageURL);
                picture.ScaleToFit(105F, 120F);
                pdfDoc.Add(picture);
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
                pdfDoc.Close();
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment;filename=DigiCV.pdf");
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Write(pdfDoc);
                Response.End();
            }
        }
    }

F-ES Sitecore

Ошибка не требует объяснений?

milepredy

Есть ли обходной путь для моего кода? Правильно ли я поступаю?

2 Ответов

Рейтинг:
1

MadMyche

Пожалуйста, не используйте код, который, как известно, уязвим. SQL инъекция была идентифицирована более 20 лет назад и по сей день входит в топ 10 взломов сайтов
ПЕРЕПИСЫВАТЬ: "Select `picture` from image where frpid=" + Session["app_id"]

Правильным способом сделать это было бы параметризовать ваша команда SQL

string queryimg = "SELECT `picture` FROM image WHERE frpid=@AppID";
command = new MySqlCommand(queryimg, con);
command.Parameters.AddWithValue("@AppID", Session["app_id"].ToString());
byte[] bytes = (byte[])command.ExecuteScalar();
Рекомендации:
MySqlParameterCollection.Метод AddWithValue[^]
MySqlCommand.свойства параметров[^]


Рейтинг:
0

Maciej Los

Похоже, вы на правильном пути...


//get image from BLOB
string queryimg = "Select `picture` from image where frpid=" + Session["app_id"].ToString();
command = new MySqlCommand(queryimg, con);
byte[] bytes = (byte[])command.ExecuteScalar();
//read image from stream
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image sdi = System.Drawing.Image.FromStream(ms);
Image img = Image.GetInstance(sdi, ImageFormat.Png);
//add image to pdf
pdfDoc.Add(img);
//further instruction...


milepredy

Как происходит реализация вашего кода?

Maciej Los

Как это было предусмотрено в моем ответе.