Я пытаюсь разместить изображение в PDF с помощью XSLT. У меня есть изображения, которые уже отображаются, но в этом случае у меня есть байт-код изначально, и я просто генерирую строку 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.
Да, я знаю, но, как уже упоминалось, я уже смогу отображать изображения с помощью xslt. xslt предназначен только для шаблонирования pdf-документа. – Maqsood
Если в коде MigraDoc возникает исключение, укажите дополнительную информацию (например, трассировку стека для исключения) или лучше предоставите MCVE. Если исключение происходит вне кода MigraDoc, тогда ответ будет неработоспособным. –
Вы можете отредактировать свой вопрос, чтобы включить трассировку strack в более удобочитаемую форму и удалить комментарии здесь. BASE64 для изображений - это новая функция MigraDoc 1.50. Какую версию MigraDoc вы используете? –