How to Insert Image Dynamically using .NET | Reporting Engine

Hello,

please help. I wrote code below, but get error “Tag ‘image’ must be located within an image container.”

string base64ImageData = "";
string json = "";

dynamic jsonObject = JsonConvert.DeserializeObject(json);
jsonObject.imageData= Convert.ToBase64String(base64ImageData);
json = JsonConvert.SerializeObject(jsonObject);

Document doc = new Document(@"C:\Temp\in.docx");
ReportingEngine engine = new ReportingEngine();
JsonDataSource dataSource = new JsonDataSource(new MemoryStream(Encoding.UTF8.GetBytes(json)));
engine.BuildReport(doc, dataSource);
doc.Save(@"C:\Temp\out.docx");

have a nice day

@littlejacky Sure, please find the attachments:
in.docx (15.4 KB)
out.docx (12.7 KB)
image linq.zip (11.4 KB)

note, due to the security reasons attachments in the forum are accessible only by topic starter and Aspose staff.

I’m still getting errors, is it an issue with my code?

@littlejacky Could you please provide you json here for testing? We will check the issue and provide you more information.

test.docx (21.0 KB)

string base64ImageData = "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";
string json = "{basic_info:{name:'abc'}}";

dynamic jsonObject = JsonConvert.DeserializeObject(json);
jsonObject.imageData= Convert.ToBase64String(base64ImageData);
json = JsonConvert.SerializeObject(jsonObject);

Document doc = new Document(@"test.docx");
ReportingEngine engine = new ReportingEngine();
JsonDataSource dataSource = new JsonDataSource(new MemoryStream(Encoding.UTF8.GetBytes(json)));
engine.BuildReport(doc, dataSource);
doc.Save(@"result.docx");

@littlejacky There is <<image>> placeholder outside the textbox in your document. It is inside field. After removing it everything works as expected. See the corrected template: test.docx (20.9 KB)

Your template is fine, thanks for your reply :grinning:

json={arr:[{name,desc}]}

<<foreach [in arr]>>
   <<if [desc]> //An error has been encountered at the end of expression 'desc]>'. Can not get the value of member 'desc' on type 'System.Data.DataRow'.
        <<desc>>
   <</if>>
<</foreach>>

@alexey.noskov Now i have another question. If there are some records in the arr collection in my json that do not have the ‘desc’ field. So how do I write a template to avoid errors?

1 Like

@littlejacky There is a mistake in your syntax, instead of <<if [desc]> there must be <<if [desc]>>. Also, you can use ReportBuildOptions.AllowMissingMembers. If this option is set, the engine does not throws an exception when encounters a missing object member. Please see our documentation for more information:
https://docs.aspose.com/words/net/accessing-missing-members-of-data-objects/

1 Like

Thanks alot :+1: :+1: :+1:

1 Like