이번에 문서를 가지고 작업해야 할 일이 생겼습니다.
우선, 엑셀 파일(정보 파일)과 한글 파일(서식 파일)로 한글의 '메일 머지' 기능을 사용하여 약 100여 장(엑셀 파일에 입력한 데이터만큼)에 달하는 한글 파일이 만들어지면 이걸 PDF로 다시 변환하고 그 PDF 내에서 원하는 내용을 찾고 내용이 있으면 그 해당 페이지를 따로 저장하여 특정한 파일명까지 지정해줘야 했습니다..
* 메일머지
http://help.hancom.com/hoffice/multi/ko_kr/hwp/tools/mail_merge/mail_merge.htm
물론 시간 들여서 하면 하겠지만 이 고된 작업을 매번 할려니 정말 힘들어서 조금씩 개발해보기로 했습니다.
개발할 프로그램의 최종 목표는 데이터 파일인 엑셀 파일과 비교 대상 PDF 파일을 각각 불러오고 엑셀 파일의 데이터 중 특정 값으로 PDF 파일의 데이터와 비교하여 해당 특정값이 있을 경우 그 페이지(1~2장, 경우에 따라 장수가 다를 수 있음)를 원하는 파일명으로 저장하는 것입니다.
* 2021.05.21 - [컴퓨터/c#] - C#으로 PDF 제어하기 2 (PDF Merge, PDF 병합, PDF 합치기)
* 2021.05.21 - [컴퓨터/c#] - C#으로 PDF 제어하기 3 (PDF에서 내용 찾기)
우선 PDF 제어를 위해 관련된 라이브러리나 내용들을 찾아봤더니 종류가 상당히 많습니다. 그리고 전 오픈 소스이면서 누구나 사용할 수 있는 라이브러리를 원했습니다.
처음 접했던 SPIRE PDF 무료 버전은 예제도 잘 나와 있고 사용하기 쉽고 강력한 기능이 있지만 제한이 많았고 그 외 제가 찾아보고 적용 가능했던 라이브러리들은 대부분 안되거나 오류가 났습니다. (제가 적용 못해서 그럴 수 도 있습니다.)
수많은 라이브러리를 사용할 수 있겠지만 전 성공했던 PDFBOX 사용하기로 했습니다.
기능도 매우 많아 응용하여 사용 가능할 듯합니다.
* PDFBOX 홈페이지
* PDFBOX .NET (.NET 버전 정말 감사합니다.)
http://www.squarepdf.net/pdfbox-in-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개 페이지 병합하기, 파일명 지정 시 사용할 수 없는 특수문자 제거하기(정규식 사용) 등을 작성해보겠습니다.
위의 기능은 사용 방법은 크게 어렵지 않으나 해당 내용을 찾느라 시간이 좀 많이 걸렸던 거 같습니다.
이상입니다.
'컴퓨터 > c#' 카테고리의 다른 글
C#으로 PDF 제어하기 3 (PDF에서 내용 찾기) (0) | 2021.05.21 |
---|---|
C#으로 PDF 제어하기 2 (PDF Merge, PDF 병합, PDF 합치기) (0) | 2021.05.21 |
C# 한자, 일본어 확인 및 변환 등 (비정규식) (0) | 2021.05.20 |
c# 단일 실행 파일로 컴파일하기 (ILMerge, Fody) (4) | 2021.01.22 |
C# XML POST 전송과 응답, 파싱 예제 등 (0) | 2020.12.03 |