foxygit / digitalskrivare_merge Log in
commits tags

/src/Remiss.Core/Pdf/PdfMerger.cs · 1.27 KB

raw
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;

namespace Remiss.Core.Pdf;

/// <summary>
/// Sammanfogar PDF:er sida för sida i angiven ordning. Används för
/// försättsblad (sida 1) + remiss (sida 2 och framåt).
/// </summary>
public static class PdfMerger
{
    public static void Merge(string outputPath, params string[] inputPaths)
    {
        if (inputPaths.Length == 0)
            throw new ArgumentException("Inga indata-PDF:er angivna.", nameof(inputPaths));

        using var output = new PdfDocument();

        foreach (var path in inputPaths)
        {
            if (!File.Exists(path))
                throw new FileNotFoundException($"PDF att sammanfoga saknas: {path}", path);

            PdfDocument input;
            try
            {
                input = PdfReader.Open(path, PdfDocumentOpenMode.Import);
            }
            catch (PdfReaderException ex)
            {
                throw new InvalidOperationException(
                    $"Kunde inte läsa PDF:en (skadad eller lösenordsskyddad): {Path.GetFileName(path)}", ex);
            }

            using (input)
            {
                for (var i = 0; i < input.PageCount; i++)
                    output.AddPage(input.Pages[i]);
            }
        }

        output.Save(outputPath);
    }
}