using System;
using System.Collections.Generic;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;public class PdfMergeUtility
{public static void MergeWithBookmarks(List<string> inputFiles, string outputFile){Document document = new Document();PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFile, FileMode.Create));document.Open();PdfContentByte cb = writer.DirectContent;List<Dictionary<string, object>> allBookmarks = new List<Dictionary<string, object>>();int currentPage = 1;foreach (string file in inputFiles){PdfReader reader = new PdfReader(file);IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(reader);if (bookmarks != null){foreach (Dictionary<string, object> bookmark in bookmarks){if (bookmark.ContainsKey("Page")){string[] parts = bookmark["Page"].ToString().Split(' ');int origPage = int.Parse(parts[1].Substring(1)); bookmark["Page"] = $"{parts[0]} {currentPage + origPage - 1}{parts[2]}";}allBookmarks.Add(bookmark);}}for (int i = 1; i <= reader.NumberOfPages; i++){document.NewPage(); PdfImportedPage page = writer.GetImportedPage(reader, i);cb.AddTemplate(page, 0, 0);currentPage++; }reader.Close(); }if (allBookmarks.Count > 0){writer.Outlines = allBookmarks; }document.Close();}
}