여러개의 파일을 병합 시에 각 파일의 파일명을 기준으로 북마크를 추가하여 병합하는 로직
PdfDocument outputDocument = new PdfDocument(); // 출력 문서 초기화
PdfDocument inputDocument = null; // 입력 문서 초기화
PdfPage page = null; // page 변수 초기화
PdfOutline outline = null; // outline 변수 초기화
int pageCount = 0; // pageCount 변수 초기화
int fileCount = 0; // fileCount 변수 초기화
string[] files = in_arr_병합파일; // 병합파일 배열 선언
      
foreach (string file in files)	 // 파일 리스트 담은 배열 반복
{
	inputDocument = PdfReader.Open(file, PdfDocumentOpenMode.Import); // 파일 열기
 	int count = inputDocument.PageCount; // 연 파일 페이지 수 추출
    
	for (int idx = 0; idx < count; idx++) // idx=0 부터 count 까지 반복 (count = 추출한 페이지 수)
    {
    	page = inputDocument.Pages[idx]; // page는 연 파일의 idx 페이지
    	outputDocument.AddPage(page); // 출력 파일에 해당 page 추가
    	page = outputDocument.Pages[pageCount]; // page는 출력 파일의 pageCount 페이지
 	
		if(idx == 0) { // 현재 파일의 첫번째일 경우
			outline = outputDocument.Outlines.Add(Path.GetFileNameWithoutExtension(file), page); // 북마크 추가
 		}
	
		pageCount = pageCount + 1; // pageCount 증가
    }
	
  fileCount = fileCount + 1; // fileCount 증가
 }
outputDocument.Save(in_str_저장경로); // 출력 문서 저장
여러개의 파일을 병합 시에 기존에 갖고있던 북마크를 유지하여 병합하는 로직
*북마크 상위, 하위의 트리구조까지 유지
PdfDocument outputDocument = new PdfDocument(); // 출력 문서 초기화
PdfDocument inputDocument = null; // 입력 문서 초기화
PdfPage page = null; // page 변수 초기화
PdfOutline outline = null; // outline 변수 초기화
PdfOutlineCollection outlines = null; // outlines 변수 초기화
int pageCount = 0; // pageCount 변수 초기화
int fileCount = 0; // fileCount 변수 초기화
string[] files = in_arr_병합파일; // 병합파일 배열 선언
foreach(string file in files) // 파일 리스트 담은 배열 반복
{
    inputDocument = PdfReader.Open(file, PdfDocumentOpenMode.Import); // 파일 열기
    int count = inputDocument.PageCount; // 연 파일 페이지 수 추출
    outlines = inputDocument.Outlines; // 연 파일의 북마크 리스트 담기 (상위)
    for (int idx = 0; idx < count; idx++) // idx=0 부터 count 까지 반복 (count = 추출한 페이지 수)
    {
        page = inputDocument.Pages[idx]; // page는 연 파일의 idx 페이지
        outputDocument.AddPage(page); // 출력 파일에 해당 page 추가
        page = outputDocument.Pages[pageCount]; // page는 출력 파일의 pageCount 페이지
        foreach(PdfOutline parentOutline in outlines) // 연 파일의 상위 북마크 리스트 반복
        {
            page = inputDocument.Pages[idx]; // page는 연 파일의 idx 페이지
            if (parentOutline.DestinationPage == page) // 현재 북마크와 연 파일의 북마크가 일치할 경우
            {
                page = outputDocument.Pages[pageCount]; // page는 출력 파일의 pageCount 페이지
                outline = outputDocument.Outlines.Add(parentOutline.Title, page, true); // 상위 북마크 추가
            }
            foreach(PdfOutline childOutline in parentOutline.Outlines) { // 현재의 상위 북마크의 하위 북마크 리스트 반복
                page = inputDocument.Pages[idx]; // page는 연 파일의 idx 페이지
                if (childOutline.DestinationPage == page) // 현재 북마크와 연 파일의 북마크가 일치할 경우
                {
                    page = outputDocument.Pages[pageCount]; // page는 출력 파일의 pageCount 페이지
                    outline.Outlines.Add(childOutline.Title, page, true); // 하위 북마크 추가
                }
            }
        }
        pageCount = pageCount + 1; // pageCount 증가
    }
    fileCount = fileCount + 1; // fileCount 증가
}
outputDocument.Save(in_str_저장경로); // 출력 문서 저장