У меня есть таблица со всеми фотографиями сотрудников в таблице SQL Server.Столбец имеет тип Image
У меня есть требование загрузить профиль emplyee в текстовом формате с изображением в нем.Мне удалось экспортировать все их данные в формате HTML, а затем я использовал следующий код C #, чтобы преобразовать этот HTML в слово и выдать его для загрузки.
public static void HtmlToWordDownload(string HTML, string FileName)
{
lock (LockMulti)
{
string strBody = string.Empty;
strBody = @"<html xmlns:o='urn:schemas-microsoft-com:office:office' " +
"xmlns:w='urn:schemas-microsoft-com:office:word'" +
"xmlns='http://www.w3.org/TR/REC-html40'>" +
"<head><title>Document Title</title>" +
"<!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:Zoom>100</w:Zoom>" +
"<w:DoNotOptimizeForBrowser/></w:WordDocument></xml><![endif]-->" +
"<style> @page Section1 {size:8.27in 11.69in; mso-first-footer:ff1; mso-footer: f1; mso-header: h1; " +
//"border:solid navy 2.25pt; padding:24.0pt 24.0pt 24.0pt 24.0pt; " +
"margin:0.6in 0.6in 0.6in 0.6in ; mso-header-margin:.1in; " +
"mso-footer-margin:.1in; mso-paper-source:0;} " +
"div.Section1 {page:Section1;} p.MsoFooter, li.MsoFooter, " +
"div.MsoFooter{margin:0in; margin-bottom:.0001pt; " +
"mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; " +
"font-size:12.0pt; font-family:'Arial';} " +
"p.MsoHeader, li.MsoHeader, div.MsoHeader {margin:0in; " +
"margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:center " +
"3.0in right 6.0in; font-size:12.0pt; font-family:'Arial';}--></style></head> ";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.ContentType = "application/vnd.ms-word";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=" + FileName + ".doc");
StringBuilder htmlCode = new StringBuilder();
htmlCode.Append(strBody);
htmlCode.Append("<body><div class=Section1>");
htmlCode.Append(HTML);
htmlCode.Append("</div></body></html>");
HttpContext.Current.Response.Write(htmlCode.ToString());
HttpContext.Current.ApplicationInstance.CompleteRequest();
HttpContext.Current.Response.Flush();
}
}
Он работает абсолютно нормально.Теперь, как я могу вставить фотографию сотрудника в это.В какой формат я должен конвертировать это изображение для встраивания в HTML.Я попробовал следующий запрос, но он дает одинаковый вывод для всех картинок.Пожалуйста, помогите.
select
top 30 convert(varchar, convert(binary, i.Photo))
from hrm.hrm_rp_Employee_Image i
Вывод выглядит следующим образом
(No column name)
ÿØÿà
ÿØÿà
ÿØÿà
ÿØÿà
ÿØÿà
ÿØÿà
Мой подход правильный или что-то еще нужно сделать?
Обновление
Я обнаружил следующий запрос, чтобы преобразовать его в base64.
declare @pic varchar(max)
SELECT @pic = '<img src="data:image/jpg;base64,' + CAST(N'' AS XML).value(
'xs:base64Binary(xs:hexBinary(sql:column("Pic")))'
, 'VARCHAR(MAX)'
)
FROM (
SELECT CAST(Photo AS VARBINARY(MAX)) AS Pic from hrm.hrm_rp_Employee_Image
) AS h;
set @pic = @pic + '" style="height: 100px; width: 100px;" />'
print @pic
Он успешно конвертирует и выдает мне строку, и он отлично работает, когда я тестирую ее в любом онлайн-редакторе html.
Но он не отображается в моем файле слова после загрузки,появляется изображение красного цвета с символом «X», может кто-нибудь сказать мне, в чем может быть проблема.