iTextSharp Html到Pdf图像src

Ovi*_*Ovi 6 c# itextsharp

使用iTextSharp将html转换为pdf

public static MemoryStream CreatePdfFromHtml(
        string html, List<Attachment> attachments)
    {
        MemoryStream msOutput = new MemoryStream();

        using (TextReader reader = new StringReader(html))
        using (Document document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, msOutput);
            document.Open();

            foreach (var a in attachments)
            {
                var image = iTextSharp.text.Image.GetInstance(a.File);
                document.Add(image);
            }

            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);

            writer.CloseStream = false;
            document.Close();
            msOutput.Position = 0;
            return msOutput;
        }
    }
Run Code Online (Sandbox Code Playgroud)

html以这种方式包含几个嵌入的图像.这种方法是首选,因为相同的HTML是通过电子邮件发送LinkedResourcesAlternateView.

foreach (var a in attachments)
{
    //not production code
    html += string.Format("<img src=\"cid:{0}\"></img>", a.Id.ToString());
}
Run Code Online (Sandbox Code Playgroud)

但是,当生成pdf时,无法将图像ID与html标记的src部分链接起来img.最终,pdf包含顶部的所有图像,然后是<img src...忽略的HTML .

我已经阅读了使用Paragraphs或ImageAbsolutePosition的几种可能的解决方案,但它们似乎不适合.

COL*_*OLD 1

我之前发现,当您在 Itextsharp html pdf 生成中使用相对路径时存在问题,正如您提到的,您可以使用 ImageAbsolutePosition ,这将要求您使用段落来正确定位图像,或者如果您仍然想使用 html,则必须给出直接路径,例如

 html += string.Format("<img src=https://www.mysite.com/"+a.Id.ToString()+".imageext"></img>");
Run Code Online (Sandbox Code Playgroud)