【问题标题】:C# - How to convert an image to a PDF (using a free library) [closed]C# - 如何将图像转换为 PDF(使用免费库)[关闭]
【发布时间】:2016-07-03 08:24:50
【问题描述】:

我已经研究了很多,但我发现的大多数答案都涉及使用 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
        // ?

【问题讨论】:

    标签: c# pdf


    【解决方案1】:

    我想出了一个使用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);
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      一个例子:

      var driver = new FirefoxDriver();
      
      // create new file
      var file = File.CreateText(@"C:\temp\captures.html");
      file.Write("<!DOCTYPE html><html><head></head><body width=\"600px\">");
      
      // write image
      file.Write("<img src=\"data:image/png;base64,");
      file.Write(driver.GetScreenshot().AsBase64EncodedString);
      file.Write("\">");
      
      // close file
      file.Write("</body></html>");
      file.Close();
      
      driver.Quit();
      

      【讨论】:

      • 非常有趣的方法,谢谢。不过,打印到 PDF 似乎不是那么容易?见stackoverflow.com/questions/564650/convert-html-to-pdf-in-net
      • 我的意思是实际删除 HTML 格式的 PDF。我曾经创建截图的 PDF(使用 PDFSharp,然后是我自己的实现),但切换到 html,因为它在创建文件时更加灵活和快捷。
      • 是的,我同意,但是在这种情况下,客户的要求是保存为 PDF :-)
      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多