PdfSharpCore图像渲染问题

时间:2018-06-21 05:39:03

标签: c# pdfsharp imagesharp

完全无法使用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被保存为{ {1}}正确。

但是我的PDF在视觉上是空白的。二进制内容在那里,而且似乎所有格式属性都可以,但是二进制数据与源有些不同。

这是我的ImageSharp实现保存/加载图像的方式:

logo1.jpg

最后,PDF件:

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());
        }
    }
}

请帮助,我被困了几天!这些东西是新手,可能会缺少一些东西吗?..

注意: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>> 方法可以正常工作,因此我可以使用相同的设置来呈现文本。

1 个答案:

答案 0 :(得分:0)

请使用此方法:-

    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,了解更多信息