Base64 string encoded Images not loading on the output PDF (TuesPechkin / Wkhtmltopdf)

2.5k Views Asked by At

Fair warning: This post is a bit of an essay-sized question... So let me say my thanks beforehand to whoever goes through it and tries to answer it.

Context:
I have been trying the only 2 free-commercial-use open-source html to pdf converting libraries I could find.

PDFSharp unfortunately outputs a pdf with a completely messy style layout that doesn't respect the formatting of the input HTML and sometimes doesn't output images properly. (How it should've look vs how it looks with PDF#)
TuesPechkin (wkhtmltopdf c# wrapper library) on the other hand does it all right except for only outputting these odd "image containers" (a hollow outline of where the image supposedly should be).

I declare the IConverter object upon calling my class' constructor like so:
converter = new ThreadSafeConverter( new RemotingToolset<PdfToolset>( new Win64EmbeddedDeployment( new TempFolderDeployment())));

Then I have the following method where you can find the GlobalSettings and ObjectSettings I'm currently using for the conversion.

/// <summary>
/// Method for converting an .EML's HTML Body to a PDF
/// </summary>
/// <param name="html">The HTML to be converted</param>
/// <param name="usern">Optional: Username for file naming</param>
/// <param name="idx">Optional: Index for file naming</param>
public void Convert2PDF(string html, string usern = null, int? idx = null)
{

    string userName = usern ?? "test";
            
    var document = new HtmlToPdfDocument
    {
        GlobalSettings =
            {
                ProduceOutline = true,
                DocumentTitle = userName.Split('@')[0] + "__" + idx.Value.ToString(),
                PaperSize = PaperKind.A4,
                Margins =
                {
                    Left = 6,
                    Top = 4,
                    Right = 6,
                    Bottom = 8,
                    Unit = Unit.Millimeters
                },
                UseCompression = false
            },
            Objects =
            {
                new ObjectSettings { HtmlText = html,
                    WebSettings = new WebSettings
                    {
                        EnableIntelligentShrinking = false,
                        DefaultEncoding = "UTF-8",
                        LoadImages = true,
                        PrintBackground = true,
                    },
                    FooterSettings = new FooterSettings{CenterText = "[page]"},
                }
            }
        };
        byte[] bolb = converter.Convert(document);
        File.WriteAllBytes(Path.Combine(mailBoxDirPath, ".PDFs", userName.Split('@')[0] + "__" + idx.Value.ToString() + "__with_TuesPechkin__" + ".pdf"), bolb);

        /*  ↑ TuesPechkin   */
        /*  ↓ PdfSharp      */

        byte[] blob = null;
        using(MemoryStream ms = new MemoryStream())
        {
            PdfDocument pdf = PdfGenerator.GeneratePdf(html,PageSize.A4,/*margin from border to content ==*/ 0);
            pdf.Save(ms);
            blob = ms.ToArray();
        }
        userName = usern ?? "test";
        File.WriteAllBytes(Path.Combine(mailBoxDirPath, ".PDFs", userName.Split('@')[0] + "__" + idx.Value.ToString() + "__with_PDF#__" + ".pdf"), blob);
    }

This "HTML" string is obtained from the output of another library I'm using called "MailKit/MimeKit" made by "Jstedfast".
I take this output and insert my own kind of "formatted header with some of the email's info" while also switching the image's CID every time there's one, with the following code that uses MailKit/MimeKit's tools:

...
foreach (MimePart part in temp.BodyParts)
{
    if (!part.IsAttachment && part.ContentId != null)
    {
        using (Stream stream = new MemoryStream())
        {
            part.Content.WriteTo(stream);
            stream.Flush();
            stream.Seek(0, SeekOrigin.Begin);
            using (StreamReader sr = new StreamReader(stream))
            {
                
                string cid  = string.Format("src=\"cid:{0}", part.ContentId);
                string data = string.Format("src=\"data:{0}/{1};{2},\n{3}", part.ContentType.MediaType, part.ContentType.MediaSubtype, part.ContentTransferEncoding, sr.ReadToEnd());
                rValue.Replace(cid, data);
            }
        }
    }
}
...

Side note: "temp" would be my MimeMessage.

And here would be the whole string-building process for reference. I usually test these outputs on HTML previewers, and they come out without any issues in formatting or image display, so I know the issue isn't my HTML input when trying to convert to PDF:

...
MimeMessage temp = emp.Pop3.GetMessage(idx);
StringBuilder rValue = new StringBuilder(null);
Regex bodyTag = new Regex(@"^<body.*>$");
Regex charset = new Regex("charset=(.*)\"");

string body = string.Empty, condHelper = string.Empty;
List<string> tempBody = temp.HtmlBody.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList<string>();
int tempidx = 0;
foreach (string line in tempBody) // Looks-up this HTML's charset and sets it to utf-8
{
    if(charset.IsMatch(line))
    {
        condHelper = charset.Match(line).Value;
        tempidx = tempBody.IndexOf(line);
        tempBody[tempidx] = line.Replace(condHelper, "charset=utf-8\"");
        break;
    }
}
foreach(string line in tempBody) //Looks up the index of the body tag so I append that "custom header" with basic info from the email
{
    if (bodyTag.IsMatch(line))
    {
        tempidx = tempBody.IndexOf(line);
        break;
    }
}
string line4change = tempBody[tempidx];
line4change += emp.HeaderBuilder(temp.Subject, temp.From.Mailboxes.First(), temp.To.Mailboxes.ToList<MailboxAddress>(), temp.Date.DateTime, temp.Cc.Mailboxes.ToList<MailboxAddress>());
tempBody[tempidx] = line4change;

for (int i = 0; i < tempBody.Count; i++) // starts building the final version of the whole html string
    body += tempBody[i] + Environment.NewLine;


rValue.Append(body);
foreach (MimePart part in temp.BodyParts)
{
    if (!part.IsAttachment && part.ContentId != null)
    {
        using (Stream stream = new MemoryStream())
        {
            part.Content.WriteTo(stream);
            stream.Flush();
            stream.Seek(0, SeekOrigin.Begin);
            using (StreamReader sr = new StreamReader(stream))
            {
                
                string cid  = string.Format("src=\"cid:{0}", part.ContentId);
                string data = string.Format("src=\"data:{0}/{1};{2},\n{3}", part.ContentType.MediaType, part.ContentType.MediaSubtype, part.ContentTransferEncoding, sr.ReadToEnd());
                rValue.Replace(cid, data);
            }
        }
    }
}

try
{
    emp.Convert2PDF(rValue.ToString(), emp.User, idx);
}
catch { }
...

So, my objective is to fix the odd output of these hollow image containers on the outputted PDF file.

Edit: Here's an example of an HTML string taken directly from the debugger right before it gets sent to the "Convert2PDF" method:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="margin-top:24px;"></div>
<span style="font-family: Segoe UI; font-size: 16; font-weight: bold; ">&ensp;t est</span><br>
<span><hr style="height: 4px; border: none; margin-top: 2px; margin-bottom: 12px; color:#000; background-color:#000;" /></span>
<table style="margin-bottom:32px; " cellspacing="0" cellpadding="4">
    <tr>
        <td style="margin-left: auto; padding-right: 128px; white-space: nowrap;"><span style="font-family: Segoe UI; font-size: 14; font-weight: bold; ">&nbsp;From:</span></td>
        <td style="white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14;">tester[REDACTED]@outlook.com</span></td>
        <td style="width:99%; "></td>
    </tr>
    <tr style="background-color:#f2f2f2;">
      <td style="margin-left: auto; padding-right: 128px; white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14; font-weight: bold;">&nbsp;Sent:</span></td>
        <td style="white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14; ">Monday, 11th of October 2021, 08:52:49</span></td>
        <td style="width:99%; "></td>
    </tr>
    <tr>
        <td style="margin-left: auto; padding-right: 128px; white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14; font-weight: bold;">&nbsp;To:</span></td>
        <td style="white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14;">[REDACTED]</span></td>
        <td style="width:99%; "></td>
    </tr>
    <tr style="background-color:#f2f2f2;">
        <td style="margin-left: auto; padding-right: 128px; white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14; font-weight: bold;">&nbsp;Subject:</span></td>
        <td style="white-space: nowrap;"><span style="font-family:Segoe UI; font-size: 14;">Testing TuesPechkin Library w/Images</span></td>
        <td style="width:99%; "></td>
    </tr>
</table>

<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
1st Inline image:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<img style="width: 187px; height: 221px; max-width: 100%;" size="7198" contenttype="image/png" width="187" height="221" alt="key points of an email" data-outlook-trace="F:1|T:1" src="data:image/png;Base64,
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
+HbHjAAAAABJRU5ErkJggg==
"><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
2nd Inline image:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<img style="width: 100px; height: 100px; max-width: 100%;" size="967" contenttype="image/png" width="100" height="100" alt="2 dradients" data-outlook-trace="F:1|T:1" src="data:image/png;Base64,
iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANcSURBVHhe7dzJS5RxHMfxb3u2u83q7pj7vhta
Zlbj7FMEBQURFBTUwUNBHTx48OLBg4eCOhQUFEREUBARERFERFppZWWWmeW+tjc95++pub0PA68/
4Mfn8vBsbxlLcET8p8hYYYiMFYbIWGGIjBUGGbOnAw0nZgHJuD0NaDApD0gm7KlA/clFQDJpTwHq
SykDkilbMlBvajWQTNuSgLrTaoFkxpYE9CS9HsgYKxHokaMRSGZtCUAPMpxAMme1A93L9ALJvNUG
dCcrCCTfrFagW9m7gOS71Qp0I2cPkPywWICu5e4Dkp8WM9CVvANAxlgmoEv5h4DklyUe6ELBESD5
bYkDOld4DEj+mOOAzhQ1A8lfcyxQZ8kJIAmZY4A6Sk8BGWNFA7WXtQBJyLQOqK28FcgYay1Qa0Ub
UGSsMEDHaqlsBzLGWgN0sqoDyBhrNdDx6k4gCcWvAmquOQ1kjLUS6OiGs0DGWCuADteeBzLGigI6
WHcRSEJxUUD7N14GMsZaDrR301UgY6xlQLvrrwMZYy0F2rn5JpAx1hIgf8NtIAnFLgZyb7kLBB1r
W+N9IGOsRUANWx8CGWMtBKrb/hhIQjELgGqcT4GMsYgqmp4D6VNCFLteAulTQuS73wDpU0JkewaA
JBRN5PB+AtKnhEjxfQHSp4RI8I8B6VNCmANTQPqUELE75oH0ZQgiLjgHBL03jA/OAkGflJqCM0DQ
94am4DQQ9CsadRmCgH6AawlMAkF/R7EGJoGgP2faAhNA0FSBPTAOJKMJDiB1UwYhqk0DkegfBRLV
poFI9I8AiWrTQCT5R4BEtWkgkn1fgUS1aSDUI0oIUW0aiFTfMJCoNg1Emu8zkKg2DUS6bwhIVJsG
wuEdAhLVpoFQL+wgRLVpIDK8g0Ci2jQQ670fgUS1aSAyPR+ARLVpILI8A0Ci2jQQ6vMVCFFtGogc
z3sgUW0aiBxPP5CoNg1ErvsdkKg2DUSe+y2QqDYNhPqYE0JUmwaiwN0HJKpNA1Ho6gMS1aaBKHK9
BhKVW4Eodr0CEpVbgVC/NkCIyq1AlLh6gUTlViBKm3qAROVWIMqaeoBE5VYgypteAInKrUCoH/0g
ROVWICqdz4BE5VYgqpzdQKJyKxBVzi4gUbkViGpnF46z6x+zRQbPWHJSYgAAAABJRU5ErkJggg==
"><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
Stylized text:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<span style="font-family: Georgia, serif; color: rgb(179, 106, 226);">​<b><i><u><strike>S o m e&nbsp; &nbsp;T e x t</strike></u></i></b></span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<span style="font-family: Georgia, serif; color: rgb(179, 106, 226);"><b><i><u><strike><br>
</strike></u></i></b></span></div>
</body>
</html>

I have been using the following site to test these HTML strings making sure their formatting and images are displaying correctly: https://www.onlinehtmleditor.net/

1

There are 1 best solutions below

0
On BEST ANSWER

I tested your HTML using NuGet package itext7.pdfhtml and the images didn't show either. However after some investigation, I discovered an issue with the value in the src property.

In the src property value you have data:image/png;Base64. It should be data:image/png;base64 - notice the lower-case b for base64.

After changing Base64 to base64 it seems to work.

<img style="width: 187px; height: 221px; max-width: 100%;" size="7198" contenttype="image/png" width="187" height="221" alt="key points of an email" data-outlook-trace="F:1|T:1" src="data:image/png;base64,
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
+HbHjAAAAABJRU5ErkJggg==
">