如何在Aspose Word文档中显示SQL服务器数据库图片base64
How to display SQL Server database image base64 in Aspose Word Document
我是 Aspose 新手,遇到以下问题:
我在 SQL Server 2008 数据库中有图像,存储为 Base64 字符串。我想使用 Aspose 在 Word 文档中显示它们。
我已成功导出其他数据,但无法显示图像。谁能帮帮我?
在此先感谢您的支持。
这是我的代码:
private Document createDocs(Guid ? ID)
{
Document doc = new Document(HostingEnvironment.MapPath("~/Content/Template.doc"));
DataTable Order = ExecuteDataTable(inspID);
if (!(Order == null))
{
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();
doc.MailMerge.ExecuteWithRegions(Order);
}
return doc;
}
public DataTable ExecuteDataTable(Guid? ID)
{
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyStringConnection"];
SqlConnection Conn = new SqlConnection(connectionString.ConnectionString);
try
{
Conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM blahblah, Conn);
cmd.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = ID;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.SelectCommand = cmd;
DataTable table = new DataTable();
da.Fill(table);
return table;
}
finally
{
if (!(Conn == null))
{
Conn.Close();
}
}
}
private void SendToBrowser (Document doc, string outputFormat, Page page)
{
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Doc);
page.Response.Clear();
page.Response.ClearHeaders();
page.Response.ClearContent();
page.Response.ContentType = "application/doc";
page.Response.AddHeader("content-disposition", "attachment; filename=base_file.doc");
byte[] bytes = stream.GetBuffer();
page.Response.BinaryWrite(bytes);
page.Response.End();
}
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
// Do nothing.
}
/// <summary>
/// This is called when mail merge engine encounters Image:XXX merge field in the document.
/// You have a chance to return an Image object, file name or a stream that contains the image.
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
// The field value is a byte array, just cast it and create a stream on it.
var imageStream = new MemoryStream((byte[])e.FieldValue);
// Now the mail merge engine will retrieve the image from the stream.
e.ImageStream = imageStream;
}
}
要在 Word 文档中插入图像邮件合并域,select Insert/Field 命令,然后 select MergeField 并键入 Image:MyFieldName.以下代码示例显示了如何使用 Base64 图像执行邮件合并操作。请检查IFieldMergingCallback.ImageFieldMerging.
的修改代码
public void mailmerge()
{
string base64String;
using (Image image = Image.FromFile(MyDir + @"image.png"))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
// Convert byte[] to Base64 String
base64String = Convert.ToBase64String(imageBytes);
}
}
DataTable dt = new DataTable();
dt.Columns.Add("ImageData", typeof(string));
DataRow row1 = dt.NewRow();
row1["ImageData"] = base64String;
dt.Rows.Add(row1);
Document doc = new Document(MyDir + "in.docx");
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();
doc.MailMerge.Execute(dt);
doc.Save(MyDir + "Out.docx");
}
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
// Do nothing.
}
/// <summary>
/// This is called when mail merge engine encounters Image:XXX merge field in the document.
/// You have a chance to return an Image object, file name or a stream that contains the image.
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
var imageStream = new MemoryStream((byte[])Convert.FromBase64String(e.FieldValue.ToString()));
// Now the mail merge engine will retrieve the image from the stream.
e.ImageStream = imageStream;
}
}
我在 Aspose 工作,担任开发人员布道师。
我是 Aspose 新手,遇到以下问题:
我在 SQL Server 2008 数据库中有图像,存储为 Base64 字符串。我想使用 Aspose 在 Word 文档中显示它们。
我已成功导出其他数据,但无法显示图像。谁能帮帮我?
在此先感谢您的支持。
这是我的代码:
private Document createDocs(Guid ? ID)
{
Document doc = new Document(HostingEnvironment.MapPath("~/Content/Template.doc"));
DataTable Order = ExecuteDataTable(inspID);
if (!(Order == null))
{
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();
doc.MailMerge.ExecuteWithRegions(Order);
}
return doc;
}
public DataTable ExecuteDataTable(Guid? ID)
{
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyStringConnection"];
SqlConnection Conn = new SqlConnection(connectionString.ConnectionString);
try
{
Conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM blahblah, Conn);
cmd.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = ID;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.SelectCommand = cmd;
DataTable table = new DataTable();
da.Fill(table);
return table;
}
finally
{
if (!(Conn == null))
{
Conn.Close();
}
}
}
private void SendToBrowser (Document doc, string outputFormat, Page page)
{
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Doc);
page.Response.Clear();
page.Response.ClearHeaders();
page.Response.ClearContent();
page.Response.ContentType = "application/doc";
page.Response.AddHeader("content-disposition", "attachment; filename=base_file.doc");
byte[] bytes = stream.GetBuffer();
page.Response.BinaryWrite(bytes);
page.Response.End();
}
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
// Do nothing.
}
/// <summary>
/// This is called when mail merge engine encounters Image:XXX merge field in the document.
/// You have a chance to return an Image object, file name or a stream that contains the image.
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
// The field value is a byte array, just cast it and create a stream on it.
var imageStream = new MemoryStream((byte[])e.FieldValue);
// Now the mail merge engine will retrieve the image from the stream.
e.ImageStream = imageStream;
}
}
要在 Word 文档中插入图像邮件合并域,select Insert/Field 命令,然后 select MergeField 并键入 Image:MyFieldName.以下代码示例显示了如何使用 Base64 图像执行邮件合并操作。请检查IFieldMergingCallback.ImageFieldMerging.
的修改代码public void mailmerge()
{
string base64String;
using (Image image = Image.FromFile(MyDir + @"image.png"))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
// Convert byte[] to Base64 String
base64String = Convert.ToBase64String(imageBytes);
}
}
DataTable dt = new DataTable();
dt.Columns.Add("ImageData", typeof(string));
DataRow row1 = dt.NewRow();
row1["ImageData"] = base64String;
dt.Rows.Add(row1);
Document doc = new Document(MyDir + "in.docx");
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();
doc.MailMerge.Execute(dt);
doc.Save(MyDir + "Out.docx");
}
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
// Do nothing.
}
/// <summary>
/// This is called when mail merge engine encounters Image:XXX merge field in the document.
/// You have a chance to return an Image object, file name or a stream that contains the image.
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
var imageStream = new MemoryStream((byte[])Convert.FromBase64String(e.FieldValue.ToString()));
// Now the mail merge engine will retrieve the image from the stream.
e.ImageStream = imageStream;
}
}
我在 Aspose 工作,担任开发人员布道师。