여러개의 파일을 병합 시에 각 파일의 파일명을 기준으로 북마크를 추가하여 병합하는 로직
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_저장경로); // 출력 문서 저장