【问题标题】:Image not found while generating PDF生成 PDF 时找不到图像
【发布时间】:2016-11-28 14:42:44
【问题描述】:

我正在尝试使用 XSLT 将图像放置在 PDF 中。我有已经显示的图像,但在这种情况下,我最初有字节码,我只是生成 base64 字符串。但是在下面的情况下,我正在从资源文件中读取图像,然后尝试将其更改为 base64,但在这种情况下,它给了我以下错误:

路径异常:this.imageFilePath(前 100 个字符):base64:iVBORw0KGgoAAAANSUhEUgAAAFoAAABNCAYAAAAme3MhAAAABGdBTUEAALGPC/xhBQAAArFJREFUeF7V3AuwrWVdx/Etq

使用的模板如下:

string brandLogoXslt = @"<Paragraph Style=""P"">Some text here:</Paragraph>";
       brandLogoXslt += @"<Image><xsl:attribute name=""Filename"">" + MigraDocFilenameFromByteArray(ExtractResource(Business.Properties.Resources.logo)) + "</xsl:attribute></Image>";
       genericPlaceholderNodes[i].ParentNode.InnerXml = genericPlaceholderNodes[i].ParentNode.InnerXml.Replace(genericPlaceholderNodes[i].OuterXml, brandLogoXslt);

用于更改图像的代码:

private static string MigraDocFilenameFromByteArray(byte[] image)
{
    return "base64:" + Convert.ToBase64String(image);
}
public static byte[] ExtractResource(System.Drawing.Image image)
{
    MemoryStream ms = new MemoryStream();

    image.Save(ms, ImageFormat.Png);
    if (ms == null)
        return null;
    byte[] imageByteArray = ms.ToArray();
    return imageByteArray;
}

我已经检查了 base64 字符串,它正在生成在线检查的正确图像。

堆栈跟踪:

bei MigraDoc.Rendering.ImageRenderer.CalculateImageDimensions()
bei MigraDoc.Rendering.ImageRenderer.Format(Area area, FormatInfo  previousFormatInfo)
bei MigraDoc.Rendering.TopDownFormatter.FormatOnAreas(XGraphics gfx, Boolean topLevel)
bei MigraDoc.Rendering.FormattedCell.Format(XGraphics gfx)
bei MigraDoc.Rendering.TableRenderer.FormatCells()
bei MigraDoc.Rendering.TableRenderer.InitFormat(Area area, FormatInfo previousFormatInfo)
bei MigraDoc.Rendering.TableRenderer.Format(Area area, FormatInfo previousFormatInfo)
bei MigraDoc.Rendering.TopDownFormatter.FormatOnAreas(XGraphics gfx, Boolean topLevel)
bei MigraDoc.Rendering.FormattedDocument.Format(XGraphics gfx)
bei MigraDoc.Rendering.DocumentRenderer.PrepareDocument()
bei MigraDoc.Rendering.PdfDocumentRenderer.PrepareDocumentRenderer(Boolean prepareCompletely)
bei MigraDoc.Rendering.PdfDocumentRenderer.PrepareRenderPages()
bei MigraDoc.Rendering.PdfDocumentRenderer.RenderDocument()
bei School.DE.WebApplications.SCHDI.Business.NewPDFGenerator.TemplateToPdfTransformerBase.Transform2Pdf(Object data, XslTransform transform, Stream outStrm) in d:\Projects\Business\NewPDFGenerator\TemplateToPdfTransformerBase.cs:Zeile 70.

【问题讨论】:

    标签: c# pdfsharp migradoc


    【解决方案1】:

    图像的 BASE64 编码是一项 MigraDoc 功能,仅适用于 MigraDoc 1.50 beta 3 及更高版本。

    以这种方式编码的文件不能与 XSLT 或 MigraDoc 1.32 或更早版本一起使用。

    【讨论】:

    • 是的,我知道,但如前所述,我已经能够使用 xslt 显示图像。 xslt 仅用于模板化 pdf 文档
    • 如果异常发生在 MigraDoc 代码中,则提供更多信息(例如异常的堆栈跟踪) - 或者更好地提供 MCVE。如果异常发生在 MigraDoc 代码之外,那么答案是它不起作用。
    • 您可以编辑您的问题,以更易读的形式包含轨迹轨迹,并在此处删除 cmets。图像的 BASE64 是 MigraDoc 1.50 的新特性。您使用的是哪个版本的 MigraDoc?
    • 是的,我知道并且我已经能够将 base64 用于图像,但是当我从资源文件中读取图像然后将其转换为 base64 时,它给出了比提到的异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2012-12-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多