4
我试图使用XSLT将图像置于PDF中。我有已经显示的图像,但在那种情况下,我最初有字节码,我只是生成base64字符串。然而,在下面的情况下,我正在从资源文件中读取图像,然后尝试将其更改为base64,但是在这种情况下,它给了我以下错误:生成PDF时未找到图像
路径异常:this.imageFilePath(前100个字符):base64: iVBORw0KGgoAAAANSUhEUgAAAFoAAABNCAYAAAAme3MhAAAABGdBTUEAALGPC/xhBQAAHrFJREFUeF7V3AuwrWVdx/ETQ
使用的模板如下:
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;
}
:用于改变图像
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);
代码
我已经检查了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.
是的我知道,但如前所述,我已经能够使用xslt显示图像。 xslt仅用于模板化pdf文档 – Maqsood
如果在MigraDoc代码中发生异常,则提供更多信息(例如异常的堆栈跟踪) - 或者更好地提供MCVE。如果异常发生在MigraDoc代码之外,那么答案是行不通的。 –
您可以编辑您的问题,以更具可读性的形式包含痕迹,并在此处删除注释。 BASE64图像是MigraDoc 1.50的新功能。你正在使用哪个版本的MigraDoc? –