Как преобразовать несколько HTML файлов в один PDF файл на C# и .NET


Полный код

using System;
using System.IO;
using System.Collections.Generic;
using SautinSoft.PdfVision;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            ConvertMultipleHtmlToPdfFile();
        }
        public static void ConvertMultipleHtmlToPdfFile()
        {
            string[] inpFiles = new string[]
            {
                Path.GetFullPath(@"..\..\..\1.html"),
                Path.GetFullPath(@"..\..\..\2.html")
            };
            string outFile = new FileInfo("Result.pdf").FullName;

            // Before starting, we recommend to get a free 100-day key:
            // https://sautinsoft.com/start-for-free/
            
            // Apply the key here:
			// SautinSoft.PdfVision.SetLicense("...");
            
            PdfVision v = new PdfVision();
            
            HtmlToPdfOptions options = new HtmlToPdfOptions()
            {
                PageSetup = new PageSetup()
                {
                    PaperType = PaperType.Letter,
                    Orientation = Orientation.Portrait,
                    PageMargins = new PageMargins()
                    {
                        Left = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
                        Top = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
                        Right = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
                        Bottom = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter)
                    }
                },
                PrintBackground = true,
               	Scale = 1,
				//Set a custom directory where will be placed portable Chromium browser. 
				//Default value depends of platform (win-x64, win-86, linux-x64 or osx-x64). 
				ChromiumBaseDirectory = Path.GetFullPath(@"..\..\..\..\..\..\Chromium\")
            };

            try
            {
                List<byte[]> pdfCollection = new List<byte[]>();
                foreach (string inpFile in inpFiles)
                {
                    Console.WriteLine($"Converting {Path.GetFileName(inpFile)} ...");
                    byte[] pdfData = v.ConvertHtmlToPdf(inpFile, options);
                    pdfCollection.Add(pdfData);
                }

                // Merge PDFs into single PDF document.
                byte[] singlePdfData = v.MergePdf(pdfCollection);
                File.WriteAllBytes(outFile, singlePdfData);

                // Open the result for demonstration purposes.
                System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outFile) { UseShellExecute = true });
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                Console.ReadLine();
            }
        }
    }
}

Download

Imports System
Imports System.IO
Imports System.Collections.Generic
Imports SautinSoft.PdfVision

Namespace Sample
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			ConvertMultipleHtmlToPdfFile()
		End Sub
		Public Shared Sub ConvertMultipleHtmlToPdfFile()
			Dim inpFiles() As String = {Path.GetFullPath("..\..\..\1.html"), Path.GetFullPath("..\..\..\2.html")}
			Dim outFile As String = (New FileInfo("Result.pdf")).FullName
			' Before starting, we recommend to get a free 100-day key:
            ' https://sautinsoft.com/start-for-free/
            
            ' Apply the key here:
			' SautinSoft.PdfVision.SetLicense("...");

			Dim v As New PdfVision()
			
			Dim options As New HtmlToPdfOptions() With {
				.PageSetup = New PageSetup() With {
					.PaperType = PaperType.Letter,
					.Orientation = Orientation.Portrait,
					.PageMargins = New PageMargins() With {
						.Left = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
						.Top = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
						.Right = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
						.Bottom = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter)
					}
				},
				.PrintBackground = True,
				.Scale = 1,
				.ChromiumBaseDirectory = Path.GetFullPath("..\..\..\..\..\..\Chromium\")
			}

			Try
				Dim pdfCollection As New List(Of Byte())()
				For Each inpFile As String In inpFiles
					Console.WriteLine($"Converting {Path.GetFileName(inpFile)} ...")
					Dim pdfData() As Byte = v.ConvertHtmlToPdf(inpFile, options)
					pdfCollection.Add(pdfData)
				Next inpFile

				' Merge PDFs into single PDF document.
				Dim singlePdfData() As Byte = v.MergePdf(pdfCollection)
				File.WriteAllBytes(outFile, singlePdfData)

				' Open the result for demonstration purposes.
				System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(outFile) With {.UseShellExecute = True})
			Catch ex As Exception
				Console.WriteLine($"Error: {ex.Message}")
				Console.ReadLine()
			End Try
		End Sub
	End Class
End Namespace

Download


Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.ru или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже:



Вопросы и предложения всегда приветствуются!

Мы разрабатываем компоненты .Net с 2002 года. Мы знаем форматы PDF, DOCX, RTF, HTML, XLSX и Images. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.