2016-11-28 85 views
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. 

回答

0

圖像的BASE64編碼是MigraDoc特徵,並將其與1.50 MigraDoc的β3和以後纔有效。

以這種方式編碼的文件不能與XSLT或MigraDoc 1.32或更舊版本一起使用。

+0

是的我知道,但如前所述,我已經能夠使用xslt顯示圖像。 xslt僅用於模板化pdf文檔 – Maqsood

+0

如果在MigraDoc代碼中發生異常,則提供更多信息(例如異常的堆棧跟蹤) - 或者更好地提供MCVE。如果異常發生在MigraDoc代碼之外,那麼答案是行不通的。 –

+0

您可以編輯您的問題,以更具可讀性的形式包含痕跡,並在此處刪除註釋。 BASE64圖像是MigraDoc 1.50的新功能。你正在使用哪個版本的MigraDoc? –