0

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));

0 Answers0