Saahi
September 18, 2007, 3:29am
1
Received : 2007/09/18 03:29:48
Message : Hi,
A folder contains some report images for different users. I am having a requirement to insert some images rom the folder to a word document dynamically based on the user.
Is there any help for this?
Sincerely,
Manikanta Jilakara
This message was posted using Aspose.Live 2 Forum
SV-555
September 18, 2007, 6:12am
2
Hi
Thanks for your request. You can use the DocumentBuilder.InsertImage method to insert images into word document. See the following link for more information.
https://docs.aspose.com/words/net/working-with-images/
Best regards.
Saahi
September 18, 2007, 7:50am
3
Thanks for quick reply! But previously i used to insert text to a microsoft word document by using an option called merge fields in the document.
The code which i am using for that purpose is
Aspose.Words.Document doc = new Aspose.Words.Document(strFilePath + @"\DossierTemplate.doc");
doc.MailMerge.ExecuteWithRegions(dtExecutiveIdleProfile);
doc.MailMerge.Execute(drNewLoc);
String[] str = doc.MailMerge.GetFieldNames();
doc.Save(@strFilePath + @"\Report\" + strFileName, Aspose.Words.SaveFormat.Doc);
But now i need to add some images in between the texts. So which option i need to take in the microsoft word document and what is the required code from aspose.
Sincerely,
Manikanta
SV-555
September 18, 2007, 8:16am
4
Hi
Thanks for your request. You should insert into your template MergeField with name <Image:myImage>
for example. Then use the following code.
public void TestImageMailMerge()
{
Document doc = new Document(@"046_ikarussoft\in.doc");
string[] keys = { "myImage" };
string[] values = { "test.jpg" };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage);
doc.MailMerge.Execute(keys, values);
doc.Save(@"046_ikarussoft\out.doc");
}
private void HandleMergeImage(object sender, MergeImageFieldEventArgs e)
{
if (e.FieldName == "myImage")
{
string shortFileName = e.FieldValue as string;
//you should get arrey of bytes from your database
e.ImageFileName = System.IO.Path.Combine(@"046_ikarussoft\images", shortFileName);
}
}
Also see the following link.
https://reference.aspose.com/words/net/aspose.words.mailmerging/ifieldmergingcallback/imagefieldmerging/
I hope that it will help you.
Best regards.
Saahi
September 19, 2007, 6:47am
5
Hi Vitaly Shtanko,
This is Excelent, and one more thing the image which i have is a lanscape one and i want to show the image as portrait in the word document.
Will you please give me some idea/code to solve this?
Sincerely,
Manikanta Jilakara
SV-555
September 19, 2007, 11:09am
6
Hi
Please do what you want using MS Word and attach the created document here. I will investigate it and try to help you.
Best regards.
Saahi
September 20, 2007, 12:34am
7
Hi,
Please find the attachmet for the word document. In page three you will find one image. I want that image to be in potrate. It is currently in landscape.
Will you please give me some idea regarding this?
Sincerely,
Manikanta Jilakara
SV-555
September 20, 2007, 8:07am
8
Hi
Thanks for additional information. Try to use the following code.
public void TestmailMarge_94341()
{
Document doc = new Document(@"185_94341_Saahi\in.doc");
string[] keys = { "myImage" };
string[] values = { "test.bmp" };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage_94341);
doc.MailMerge.Execute(keys, values);
doc.Save(@"185_94341_Saahi\out1.doc");
}
private void HandleMergeImage_94341(object sender, MergeImageFieldEventArgs e)
{
if (e.FieldName == "myImage")
{
DocumentBuilder builder = new DocumentBuilder(e.Document);
builder.MoveToField(e.Field, true);
e.Field.Remove();
string shortFileName = e.FieldValue as string;
string filename = System.IO.Path.Combine(@"185_94341_Saahi\", shortFileName);
Image image = Image.FromFile(filename);
Shape shape = new Shape(e.Document, ShapeType.Image);
shape.ImageData.SetImage(image);
shape.WrapType = WrapType.Inline;
shape.Height = builder.CurrentSection.PageSetup.PageHeight - builder.CurrentSection.PageSetup.TopMargin - builder.CurrentSection.PageSetup.BottomMargin;
shape.Width = builder.CurrentSection.PageSetup.PageWidth - builder.CurrentSection.PageSetup.LeftMargin - builder.CurrentSection.PageSetup.RightMargin;
shape.Rotation = -90;
builder.InsertNode(shape);
}
}
I hope that it will help you.
Best regards.
Saahi
September 21, 2007, 6:58am
9
Hi,
You suppoet is excellent! Now i got the report exactly. One more thing i want is, your code is working for one image but i am having 4 images one after other. Can you give me some information/code for this.
Sincerely,
Manikanta
SV-555
September 21, 2007, 7:08am
10
Hi
You can modify this code like following.
if (e.FieldName == "myImage" || e.FieldName == "myImage1" || e.FieldName == "myImage3")
Or use the following method to resize image.
///
/// Resize source image to specifed sze
///
/// Source image
/// Target width
/// Target height
/// Resized image
private Image ResizeImage(Image sourceImage, int targetWidth, int targetHeight)
{
float ratioWidth = (float)sourceImage.Width / targetWidth;
float ratioHeight = (float)sourceImage.Height / targetHeight;
if (ratioWidth > ratioHeight)
targetHeight = (int)(targetHeight * (ratioHeight / ratioWidth));
else
{
if (ratioWidth < ratioHeight)
targetWidth = (int)(targetWidth * (ratioWidth / ratioHeight));
}
Image outputImage = sourceImage.GetThumbnailImage(targetWidth, targetHeight, null, new IntPtr());
return outputImage;
}
I hope that it will help you.
Best regards.
Saahi
September 21, 2007, 7:27am
11
Hi,
Thanks for quick reply but it is not working. will you please see the following code and suggest me the changes?
public void TestImageMailMerge()
{
//for first image
string strFilePath = Server.MapPath(@".\DetailsReport");
string strFileName = "DetailReport" + Session["ExecutiveId"].ToString() + ".Doc";
Aspose.Words.Document doc = new Aspose.Words.Document(strFilePath + @"\DossierTemplate.doc");
XFilename3 = Server.MapPath(@"..\ImageMail\") + "PCGraphical" + Session["ExecutiveId"] + ".jpg";
string[] keys3 = { "Background" };
string[] values3 = { XFilename2 };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage);
doc.MailMerge.Execute(keys3, values3);
//for second image
strFilePath = Server.MapPath(@".\DetailsReport");
strFileName = "DetailReport" + Session["ExecutiveId"].ToString() + ".Doc";
XFilename = Server.MapPath(@"..\ImageMail\") + "ECGraphical" + Session["ExecutiveId"] + ".jpg";
string[] keys = { "Experience" };
string[] values = { XFilename };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage);
doc.MailMerge.Execute(keys, values);
//for third image
strFilePath = Server.MapPath(@".\DetailsReport");
strFileName = "DetailReport" + Session["ExecutiveId"].ToString() + ".Doc";
XFilename1 = Server.MapPath(@"..\ImageMail\") + "CCGraphical" + Session["ExecutiveId"] + ".jpg";
string[] keys1 = { "Competency" };
string[] values1 = { XFilename1 };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage);
doc.MailMerge.Execute(keys1, values1);
//for fourtn image
strFilePath = Server.MapPath(@".\DetailsReport");
strFileName = "DetailReport" + Session["ExecutiveId"].ToString() + ".Doc";
XFilename2 = Server.MapPath(@"..\ImageMail\") + "PCGraphical" + Session["ExecutiveId"] + ".jpg";
string[] keys2 = { "Personality" };
string[] values2 = { XFilename2 };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage);
doc.MailMerge.Execute(keys2, values2);
doc.Save(@strFilePath + @"\Report1\" + strFileName, Aspose.Words.SaveFormat.Doc);
}
private void HandleMergeImage(object sender, MergeImageFieldEventArgs e)
{
string strFilePath = Server.MapPath(@".\DetailsReport");
string strFileName = "DetailReport" + Session["ExecutiveId"].ToString() + ".Doc";
if (e.FieldName == "BackGround" || e.FieldName == "Experience" || e.FieldName == "Competency" || e.FieldName == "Personality")
{
DocumentBuilder builder = new DocumentBuilder(e.Document);
builder.MoveToField(e.Field, true);
e.Field.Remove();
string shortFileName = e.FieldValue as string;
//you should get arrey of bytes from your database
string filename = System.IO.Path.Combine(@strFilePath + @"\Report\" + strFileName, shortFileName);
System.Drawing.Image image = System.Drawing.Image.FromFile(filename);
Shape shape = new Shape(e.Document, ShapeType.Image);
shape.ImageData.SetImage(image);
shape.WrapType = WrapType.Inline;
shape.Height = builder.CurrentSection.PageSetup.PageHeight - builder.CurrentSection.PageSetup.TopMargin - builder.CurrentSection.PageSetup.BottomMargin;
shape.Width = builder.CurrentSection.PageSetup.PageWidth - builder.CurrentSection.PageSetup.LeftMargin - builder.CurrentSection.PageSetup.RightMargin;
shape.Rotation = -90;
builder.InsertNode(shape);
}
}
Sincerely,
Manikanta Jilakara
SV-555
September 21, 2007, 7:35am
12
Can you also attach your template file?
Best regards.
Saahi
September 21, 2007, 7:51am
13
Please find the attachement for the template.
SV-555
September 21, 2007, 7:51am
14
Hi
I have modified your code. Try to use it.
public void TestImageMailMerge()
{
//for first image
string strFilePath = Server.MapPath(@".\DetailsReport");
string strFileName = "DetailReport" + Session["ExecutiveId"].ToString() + ".Doc";
Aspose.Words.Document doc = new Aspose.Words.Document(strFilePath + @"\DossierTemplate.doc");
XFilename1 = Server.MapPath(@"..\ImageMail\") + "PCGraphical" + Session["ExecutiveId"] + ".jpg";
XFilename2 = Server.MapPath(@"..\ImageMail\") + "ECGraphical" + Session["ExecutiveId"] + ".jpg";
XFilename3 = Server.MapPath(@"..\ImageMail\") + "CCGraphical" + Session["ExecutiveId"] + ".jpg";
XFilename4 = Server.MapPath(@"..\ImageMail\") + "PCGraphical" + Session["ExecutiveId"] + ".jpg";
string[] keys = { "Background", "Experience", "Competency", "Personality" };
string[] values = { XFilename1, XFilename2, XFilename3, XFilename4 };
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(HandleMergeImage);
doc.MailMerge.Execute(keys3, values3);
doc.Save(@strFilePath + @"\Report1\" + strFileName, Aspose.Words.SaveFormat.Doc);
}
Best regards.
SV-555
September 21, 2007, 8:06am
15
I have also modified your template. See the attachment.
Best regards.
Saahi
September 21, 2007, 9:10am
16
Thank you very much for you good support!
Sincerely,
Manikanta Jilakara
Saahi
October 9, 2007, 8:25am
17
Hi,
We are having a requirement that we need to add some text on the top of the image which is in landscape.
Please find the sample image as attachment. We are succeded to insert image but we need to add the highlited text. Red part is static text and the yellow part is the dynamic data from the database.
Please help me regarding this as this is a very urgent for us.
Hi
Thanks for your request. You can set page orientation = landscape. Also I have modified your template file. See the attachment.
Best regards.
Saahi
October 10, 2007, 5:24am
19
Thanks for your replu. But where i can set the page orientation=lanscape. I have the image in landscape. I need that top text also should be in landscape direction. Can you be bit clear.
Please find the attachmet for the report. You can find the difference between the two image. I want the top one exactly equalent to bottom image. See the highlighted part of bottom for difference.
I think you know exactly what i want now. Will you please support me regarding this issue.
Sincerely,
Manikanta Jilakara
Hi
Sorry for my poor explanation. See the following link to learn how to set page orientation.
https://www.lifewire.com/insert-landscape-page-into-portrait-document-3540353
Also, you can insert table into your template. Table should have one row with two cells. Click on the first cell of table, select “Text Direction” in the context menu and then select direction of text that you want. Insert your image in the second cell. Also disable borders of the table. See attached file.
Best regards.