2016-03-17 2 views
-1

Я изучил довольно много, но большинство ответов, которые я нашел, связаны с использованием iText, который доступен только для авторов программного обеспечения с открытым исходным кодом.C# - Как преобразовать изображение в PDF (с использованием бесплатной библиотеки)

Мой вопрос заключается в том, как использовать бесплатную (желательно хорошо) библиотеку PDF для преобразования изображения в PDF. Более конкретно, я использую Selenium для тестирования веб-страницы, а часть требований - для скриншота страницы результатов, которая будет сохранена в формате PDF.

То, что я в данный момент:

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

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

     // Convert to PDF and delete image 
     // ? 

ответ

3

Я придумал способ сделать это с помощью 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); 
    } 
} 
0

быстрый и простой способ для создания файла 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(); 
+0

Очень интересный подход, спасибо. Не кажется ли, что печать в формате PDF настолько проста? См. Https://stackoverflow.com/questions/564650/convert-html-to-pdf-in-net –

+0

Я хотел бы фактически удалить PDF-формат для HTML-формата. Я использовал для создания PDF скриншотов (с помощью PDFSharp, а затем и собственной реализации), но переключился на html, поскольку он стал более гибким и быстрым при создании файла. –

+0

Да, я согласен, однако в этом случае требование клиента заключается в том, что оно сохраняется как PDF :-) –

Смежные вопросы