I'm trying to convert html to pdf, so I used Scriban library to parse the html and the ItextSharp to create the pdf, every think worked fine until I added an image. The image want display dispite a true path.
Here is the code I used:
public void GeneratePdf(string htmlPdf)
{
var pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
var htmlparser = new HTMLWorker(pdfDoc);
using (var memoryStream = new MemoryStream())
{
var writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
pdfDoc.Open();
htmlparser.Parse(new StringReader(htmlPdf));
pdfDoc.Close();
byte[] bytes = memoryStream.ToArray();
File.WriteAllBytes(@"file.pdf", bytes);
memoryStream.Close();
}
}
public async void Html2Pdf()
{
var image = MakeImageSrcData("Template/img.jpg");
var Invoices = new Invoice(1,
DateTime.Now,
new List<Order> { new Order(1, "doliprane", 3.500m, 2), new Order(2, "algesic", 12.300m, 5), new Order(3, "clamoxil", 15.200m, 10) },
new Customer(1, "Amira", "Ouardanine"),
image);
var converter = new SynchronizedConverter(new PdfTools());
var templateContent = File.ReadAllText("Template/TemplateHtml.html");
var template = Scriban.Template.Parse(templateContent);
var pageContent = template.Render(new { Invoice = Invoices});
GeneratePdf(pageContent);
}
I created this method to make the image as a source data in Base64:
string MakeImageSrcData(string filename)
{
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
byte[] filebytes = new byte[fs.Length];
fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
return "data:image/png;base64," +
Convert.ToBase64String(filebytes, Base64FormattingOptions.None);
}
I got a System.NotSupportedException (URI prefix is not recognized) in
htmlparser.Parse(new StringReader(htmlPdf));