gpt4 book ai didi

c# - PdfSharpCore 图像渲染问题

转载 作者:太空狗 更新时间:2023-10-29 23:49:17 27 4
gpt4 key购买 nike

完全无法使用 PdfSharpCore 将 JPEG 图像渲染为 PDF。

代码就这么简单

public byte[] GetPdfContent()
{
ImageSource.ImageSourceImpl = new ImageSharpImageSource();

var document = new PdfDocument();
var logo = XImage.FromFile("logo.jpg");

// this is test line, I'm saving XImage result and it is identical to the source file!
File.WriteAllBytes("logo1.jpg", logo.AsJpeg().ToArray());

var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
gfx.DrawImage(logo, 0, 0);

using (var stream = new MemoryStream())
{
document.Save(stream, false);
return stream.ToArray();
}
}

我知道必须设置 ImageSource.ImageSourceImpl,我已将其设置为最简单的基于 ImageSharp 的实现:ImageSource.ImageSourceImpl = new ImageSharpImageSource() 这确实有效,因为 XImage 被正确保存为 logo1.jpg

但我的 PDF 看起来是空白的。二进制内容是有的,看起来所有的格式属性都OK,但是二进制数据和源码有些不一样。

这是我的 ImageSharp 实现如何保存/加载图像:

public class ImageSharpImageSource : ImageSource
{
protected override IImageSource FromFileImpl(string path, int? quality = 75)
{
return new ImageSharpImageSourceImpl(path, () =>
{
return Image.Load<Rgb24>(path, new JpegDecoder());
}, (int)quality);
}

private class ImageSharpImageSourceImpl : IImageSource
{
public void SaveAsJpeg(MemoryStream ms)
{
Image.SaveAsJpeg(ms, new JpegEncoder());
}
}
}

最后,PDF 片:

7 0 obj   % PdfSharpCore.Pdf.Advanced.PdfImage
<<
/BitsPerComponent 8
/ColorSpace /DeviceRGB
/Filter /DCTDecode
/Height 340
/Interpolate true
/Length 16443
/Subtype /Image
/Type /XObject
/Width 340
>>
stream <<BINARY DATA>>

请帮助,我被困了几天!对这些东西很陌生,所以可能遗漏了什么?..

注意:gfx.DrawString() 方法可以正常工作,因此我能够使用相同的设置呈现文本。

最佳答案

请使用这个方法:-

    internal void SaveImageAsPdf(string imageFileName, string pdfFileName, int width = 600)
{
using (var document = new PdfDocument())
{
PdfPage page = document.AddPage();
using (XImage image = XImage.FromFile(imageFileName))
{
var height = (int)(((double)width / (double)image.PixelWidth) * image.PixelHeight);

page.Width = width;
page.Height = height;

XGraphics graphics = XGraphics.FromPdfPage(page);
graphics.DrawImage(image, 0, 0, width, height);
}
document.Save(pdfFileName);
}
}

如果您需要更多引用,例如我们将图像转换为 pdf 然后删除该图像,请引用:- Link更多

关于c# - PdfSharpCore 图像渲染问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50961076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com