컴퓨터/c#

C#으로 PDF 제어하기 (PDF 불러와서 원하는 페이지 저장)

k1asd1 2021. 4. 23. 17:53
728x90
반응형

이번에 문서를 가지고 작업해야 할 일이 생겼습니다.

 

우선, 엑셀 파일(정보 파일)과 한글 파일(서식 파일)로 한글의 '메일 머지' 기능을 사용하여 약 100여 장(엑셀 파일에 입력한 데이터만큼)에 달하는 한글 파일이 만들어지면 이걸 PDF로 다시 변환하고 그 PDF 내에서 원하는 내용을 찾고 내용이 있으면 그 해당 페이지를 따로 저장하여 특정한 파일명까지 지정해줘야 했습니다..

 

* 메일머지

http://help.hancom.com/hoffice/multi/ko_kr/hwp/tools/mail_merge/mail_merge.htm

 

메일 머지

메일 머지   도구-메일 머지 메일 머지는 여러 사람의 이름, 주소 등이 들어 있는 '데이터 파일(data file)'과 '서식 파일(form letter file)'을 결합함(merging)으로써, 이름이나 직책, 주소 부분 등만 다르

help.hancom.com

 

물론 시간 들여서 하면 하겠지만 이 고된 작업을 매번 할려니 정말 힘들어서 조금씩 개발해보기로 했습니다.

개발할 프로그램의 최종 목표는 데이터 파일인 엑셀 파일과 비교 대상 PDF 파일을 각각 불러오고 엑셀 파일의 데이터 중 특정 값으로 PDF 파일의 데이터와 비교하여 해당 특정값이 있을 경우 그 페이지(1~2장, 경우에 따라 장수가 다를 수 있음)를 원하는 파일명으로 저장하는 것입니다.


2021.05.21 - [컴퓨터/c#] - C#으로 PDF 제어하기 2 (PDF Merge, PDF 병합, PDF 합치기)

 

C#으로 PDF 제어하기 2 (PDF Merge, PDF 병합, PDF 합치기)

PDF 불러와서 원하는 페이지 저장에 이어 여러 PDF 파일을 하나의 PDF로 합쳐보도록 하겠습니다. PDF가 몇 장이든 상관없이 저장 경로와 합칠 PDF만 지정해주면 간단하게 가능합니다. * C#으로 PDF 제

k1asd1.tistory.com

 

2021.05.21 - [컴퓨터/c#] - C#으로 PDF 제어하기 3 (PDF에서 내용 찾기)

 

C#으로 PDF 제어하기 3 (PDF에서 내용 찾기)

PDF를 불러온 상태에서 원하는 글자를 찾는 방법입니다. * 2021.04.23 - [컴퓨터/c#] - C#으로 PDF 제어하기 (PDF 불러와서 원하는 페이지 저장) C#으로 PDF 제어하기 (PDF 불러와서 원하는 페이지 저장) 이번

k1asd1.tistory.com


우선 PDF 제어를 위해 관련된 라이브러리나 내용들을 찾아봤더니 종류가 상당히 많습니다. 그리고 전 오픈 소스이면서 누구나 사용할 수 있는 라이브러리를 원했습니다.

 

처음 접했던 SPIRE PDF 무료 버전은 예제도 잘 나와 있고 사용하기 쉽고 강력한 기능이 있지만 제한이 많았고 그 외 제가 찾아보고 적용 가능했던 라이브러리들은 대부분 안되거나 오류가 났습니다. (제가 적용 못해서 그럴 수 도 있습니다.)

 

수많은 라이브러리를 사용할 수 있겠지만 전 성공했던 PDFBOX 사용하기로 했습니다.

 

기능도 매우 많아 응용하여 사용 가능할 듯합니다.

 

* PDFBOX 홈페이지

https://pdfbox.apache.org/

 

Apache PDFBox | A Java PDF Library

Apache PDFBox® - A Java PDF Library The Apache PDFBox® library is an open source Java tool for working with PDF documents. This project allows creation of new PDF documents, manipulation of existing documents and the ability to extract content from docum

pdfbox.apache.org

 

* PDFBOX .NET (.NET 버전 정말 감사합니다.)

http://www.squarepdf.net/pdfbox-in-net

 

PDFBox in .NET | Square PDF .NET

PDFBox.NET is a .NET port of PDFBBox created using IKVM.NET. The latest version (1.8.9) is available for download. Downloads

www.squarepdf.net

 

* 작성일 기준 PDFBOX .NET 최신 버전은 1.8.9


* PDF 파일 불러와서 저장하기

- 위의 .NET 용 라이브러리를 다운로드하고 압축 풀고 모든 파일을 자신이 사용하고자 하는 프로젝트에 참조에 추가합니다.

 

- 코드

//객체 생성
PDDocument doc = PDDocument.load("PDF 파일 경로");
    
//저장할 폴더 여부 확인
DirectoryInfo di = new DirectoryInfo("저장 폴더 경로");

if (di.Exists == false) di.Create();

//import org.apache.pdfbox.util
Splitter splitter = new Splitter();

//PDF문서에서 페이지 정보를 가져오기 위해 객체 생성
java.util.List pages = splitter.split(doc);

//원하는 페이지를 지정하고 저장
PDDocument docu = (PDDocument)pages.get(1);
docu.save("저장 폴더 경로" + "/" + "test.pdf");

docu.close();

 

- 불러온 PDF에서 원하는 페이지를 지정하고 저장하고자 하는 폴더에 원하는 파일명으로 저장하는 방법입니다.

불러오고 저장하는 건 의외로 간단하게 구현 가능합니다.


이제 저장까지 가능해졌으니 PDF 내에서 특정 값 찾기, 2개 페이지 병합하기, 파일명 지정 시 사용할 수 없는 특수문자 제거하기(정규식 사용) 등을 작성해보겠습니다.

 

위의 기능은 사용 방법은 크게 어렵지 않으나 해당 내용을 찾느라 시간이 좀 많이 걸렸던 거 같습니다.

 

이상입니다.

728x90
반응형