C# - 如何将图像转换为PDF(使用免费库)

时间:2016-03-17 06:13:44

标签: c# pdf

我研究了很多,但我发现大多数答案都涉及使用iText,这对开源软件的作者来说是免费的。

我的问题是如何利用免费(最好维护良好的)PDF库将图像转换为PDF。更具体地说,我使用Selenium来测试网页,部分要求是将结果页面的屏幕截图保存为PDF格式。

我现在所拥有的:

        Screenshot screenshot = ((ITakesScreenshot)WebDriver).GetScreenshot();
        fileName =  filePath + fileName;

        screenshot.SaveAsFile($"{fileName}.png", ImageFormat.Png);

        // Convert to PDF and delete image
        // ?

2 个答案:

答案 0 :(得分:10)

我想方设法使用PDFSharp来做到这一点,希望对其他人也有用。

        // Convert to PDF and delete image
        PdfHelper.Instance.SaveImageAsPdf($"{fileName}.png", $"{fileName}.pdf", 1000, true);

新班级:

using System.IO;
using PdfSharp.Drawing;
using PdfSharp.Pdf;  

public sealed class PdfHelper
{
    private PdfHelper()
    {
    }

    public static PdfHelper Instance { get; } = new PdfHelper();

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

                // Change PDF Page size to match image
                page.Width = width;
                page.Height = height;

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

    if (deleteImage)            
        File.Delete(imageFileName);
    }
}

答案 1 :(得分:1)

快速简便的方法是构建HTML文件并将图像嵌入为base64数据。它比PDF更便携,并且可以轻松打印为PDF格式。

一个例子:

MulTable()