낭만 프로그래머

C# 에서 PDF를 Split하기 본문

Windows/Common

C# 에서 PDF를 Split하기

조영래 2020. 11. 11. 10:50

c#에서 원본 PDF를 1장씩 잘라서 저장하는 기능을 확인 해 보자
라이브러리가 필요한데 무료이면서 한글을 잘 지원하는 것을 선택하다 보니 Pdfbox가 적합하였다.
사실 pdfbox는 java 계열의 Apache 라이브러리다. 이것을 .net으로 변경한 것으로 보인다.

 

1. PDF 라이브러리 설치

 

2. 사용법

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util;
using System;
using System.Text;

namespace PDFUtil
{
    public class PDFUtil
    {
        /// <summary>
        /// 숫자 자리수에 맞추어 0을 채우기
        /// </summary>
        /// <param name="source"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        private static String fitZero(int source, int length)
        {
            StringBuilder sb = new StringBuilder();
            int sourceLength = (int)(Math.Log10(source) + 1);
            int count = length - sourceLength;
            for (int i=0; i<count; i++)
            {
                sb.Append("0");
            }
            sb.Append(source);

            return sb.ToString();
        }

        /// <summary>
        /// Split해서 1장씩 PDF로 만들기
        /// </summary>
        /// <param name="filePath">원본 파일 경로</param>
        /// <param name="outputFolderPath">출력할 폴더 경로</param>
        public static void split(String filePath, String outputFolderPath)
        {
            PDDocument doc = null;
            try
            {
                String fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(filePath);

                doc = PDDocument.load(filePath);
                Splitter splitter = new Splitter();
                java.util.List pages = splitter.split(doc);
                
                for(int i=0; i< pages.size(); i++)
                {
                    PDDocument document = (PDDocument)pages.get(i);
                    document.save(outputFolderPath + "/" + fileNameWithoutExtension + "_" +fitZero(i+1, 4) + ".pdf");
                    document.close();
                }
            }
            finally
            {
                if (doc != null)
                {
                    doc.close();
                }
            }
        }
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDFUtil
{
    class Program
    {
        static void Main(string[] args)
        {
            String sourceFilePath = @"C:\스마트공장구축제안서.pdf";
            String outoutFolderPath = @"c:\temp2";
            PDFUtil.split(sourceFilePath, outoutFolderPath);
        }
    }
}

 

PDFUtil.cs
0.00MB