2016-11-28 18 views
4

XSLTを使用してPDFで画像を配置しようとしています。私はすでに表示されている画像を持っていますが、その場合は最初にバイトコードがあり、単純にbase64文字列を生成します。しかし、以下のケースでは、リソースファイルからイメージを読み込んでbase64に変更しようとしていますが、この場合、次のエラーが表示されます。PDFを生成中に画像が見つかりません

パス例外:this.imageFilePath(最初の100文字):base64: iVBORw0KGgoAAAANSUhEUgAAAFoAAABNCAYAAAAme3MhAAAABGdBTUEAALGPC/xhBQAAHrFJREFUeF7V3AuwrWVdx/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. 

答えて

0

画像のBASE64エンコーディングがMigraDoc機能であり、それは後にのみMigraDoc 1.50ベータ3とで動作します。

このようにエンコードされたファイルは、XSLTまたはMigraDoc 1.32以前では使用できません。

+0

はい私は知っているが、私はすでにxsltを使って画像を表示することができます。 xsltはPDF文書をテンプレート化する場合のみです – Maqsood

+0

MigraDocコード内で例外が発生した場合、詳細情報(例外のスタックトレースなど)を提供するか、MCVEを提供してください。 MigraDocコードの外で例外が発生した場合、それは動作しません。 –

+0

あなたの質問を編集して、より読みやすい形で胸部トレースを含め、ここでコメントを削除することができます。画像のBASE64はMigraDoc 1.50の新機能です。どのMigraDocのバージョンを使用していますか? –

関連する問題