【问题标题】:PdfSharp degrading the quality of my jpg input imagePdfSharp 降低了我的 jpg 输入图像的质量
【发布时间】:2021-02-13 09:57:48
【问题描述】:

我想将 jpg 转换为 pdf。经过一番研究,我发现您可以使用 PdfSharp 执行此操作,并且由于我使用的是 C# .Net 5.0,因此我获得了 PdfSharpCore 1.2.11。

经过一番研究,我想出了以下代码:

public void Convert(string inputFilePath, string targetFilePathTemplate, string title)
{
    using var document = new PdfDocument();
    document.Info.Author = "Me";
    document.Info.Title = title;
    document.Info.CreationDate = DateTime.Now;
    document.Info.ModificationDate = DateTime.Now;
    document.Info.Subject = title;
    
    var page = document.AddPage();
    using (var image = XImage.FromFile(inputFilePath))
    {
        page.Width = image.PixelWidth;
        page.Height = image.PixelHeight;
        using var gfx = XGraphics.FromPdfPage(page);
        gfx.DrawImage(image, 0, 0, image.PixelWidth, image.PixelHeight);
    }
    document.Save($"{targetFilePathTemplate}.pdf");
}

但是,PdfSharp 似乎决定在不询问的情况下降低我的 jpg 的质量... 您还可以看到 jpg 的文件大小约为 1MB,而 pdf 的文件大小约为 400kB。

为什么会这样,我该如何解决?

【问题讨论】:

  • 在进行DrawImage之前尝试设置图像dpi分辨率
  • @TaW 据我了解,手动设置 page WidthHeight 时不需要。

标签: c# .net-core pdfsharp


【解决方案1】:

XImage.FromFile(inputFilePath) 指定默认质量级别 75。

如果改为调用ImageSource.FromFile(传递质量级别),那么 XImage.FromImageSource那么你可以提高质量水平。

图像看起来不太可能完全相同 - 但将其提高到 85 或 90 可能会改善其渲染效果。

【讨论】:

  • 太棒了!但是,var imageSource = ImageSource.FromFile(inputFilePath, 95); 为我抛出了 NullReferenceException……所以我必须确认这一点……
  • 找到了。我不得不在某处添加ImageSource.ImageSourceImpl = new ImageSharpImageSource<Rgba32>();。现在我的 pdf 看起来不错
猜你喜欢
  • 2019-08-23
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2010-11-12
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多