C# PDF 병합 북마크 유지

초이·2023년 10월 26일
0

C# Code in PDF

목록 보기
4/4

PDF 병합 시 북마크 추가

여러개의 파일을 병합 시에 각 파일의 파일명을 기준으로 북마크를 추가하여 병합하는 로직

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_저장경로); // 출력 문서 저장

PDF 병합 시 기존 북마크 유지

여러개의 파일을 병합 시에 기존에 갖고있던 북마크를 유지하여 병합하는 로직
*북마크 상위, 하위의 트리구조까지 유지

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_저장경로); // 출력 문서 저장
profile
MacBook이 갖고싶은 살암

0개의 댓글