프로그램에서 PS, PDF, EPS 파일의 형식을 바꾸거나 제어하는 것은
일반적인 방법으로는 불가능하고 외부 라이브러리를 사용해야 합니다.
그중 가장 대중적으로 사용하는 고스트스크립트의 사용 방법에 대해 설명해드리겠습니다.
(※ 오픈소스지만 라이센스 정책이 있으니 개발 후 배포하실 생각이라면 먼저 읽어보시길 바랍니다)
1. Ghostscript 다운로드
Ghostscript : Downloads
www.ghostscript.com
사용하고 있는 운영제제, bit에 맞는 버전을 다운받아 설치합니다.
위에 있는 설치파일들은 gswin64.exe를 명령어와 함께 실행하는 방식이고,
아래 소스는 iapi.h 파일을 include시켜서 api방식으로 실행하는 방식입니다.
api방식은 직접 함수 하나하나 호출하기 때문에 에러를 제어하기 용이하고,
exe방식은 외부프로그램에 의존해야 되지만 구현이 간단하다는 장점이 있습니다.
하지만 소스만 받아도 lib와 dll을 사용하려면 위에 파일도 설치해야되기 때문에
api방식은 간단하게만 설명드리고 나머지는 exe활용하는거 위주로 설명해드리겠습니다.
2. API 방식
#include "ierrors.h"
#include "iapi.h"
void* minst = NULL;
int code, code1;
const char* gsargv[7];
int gsargc;
gsargv[0] = "";
gsargv[1] = "-dNOPAUSE";
gsargv[2] = "-dBATCH";
gsargv[3] = "-dSAFER";
gsargv[4] = "-sDEVICE=pdfwrite";
gsargv[5] = "-sOutputFile=C:\\Temp\\out.pdf";
gsargv[6] = "C:\\Temp\\input.ps";
gsargc = 7;
code = gsapi_new_instance(&minst, NULL);
if (code < 0)
return 1;
code = gsapi_set_arg_encoding(minst, GS_ARG_ENCODING_UTF8);
if (code == 0)
code = gsapi_init_with_args(minst, gsargc, (char**)gsargv);
code1 = gsapi_exit(minst);
if ((code == 0) || (code == gs_error_Quit))
code = code1;
gsapi_delete_instance(minst);
다양한 옵션을 줘서 input.ps를 pdf로 변환하는 예제입니다.
예제를 위한 input.ps는 contrib\pscolor\ 경로에 있으며
파라미터에 대한 정보는 doc\src\Use.rst 파일에 나와있습니다.
"ierrors.h", "iapi.h" 두 파일을 include하기 위해서는 포함 디렉터리에 위 경로들을 추가해줘야 됩니다.
라이브러리 디렉터리에는 고스트스크립트를 설치한 경로 안에 있는 bin폴더를 추가해줍니다.
프로젝트 설정 > 링커 > 입력 > 추가종속성 부분에 bit에 맞는 gsdll64.lib 또는 gsdll32.lib를 추가해줍니다.
빌드 후 실행파일이 있는 경로에 gsdll64.dll 또는 gsdll32.dll 을 넣고 실행해보면
input.ps가 out.pdf로 변환된 것을 확인할 수 있습니다.
3. EXE 방식
CString sExeFilePath = _T("C:\\Program Files\\gs\\gs10.00.0\\bin\\gswin64.exe");
CString sOutFileFile = _T("C:\\Temp\\out.pdf");
CString sInFileFile = _T("C:\\Temp\\input.ps");
CString sCommand;
sCommand.Format(_T(" -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile=\"%s\" \"%s\""), sOutFileFile, sInFileFile);
ShellExecute(NULL, _T("open"), sExeFilePath, sCommand, NULL, SW_HIDE);
/* 이미지가 생성될 때까지 기다려야할 경우 ShellExecuteEx 활용
SHELLEXECUTEINFO se;
::ZeroMemory(&se, sizeof(SHELLEXECUTEINFO));
se.cbSize = sizeof(SHELLEXECUTEINFO);
se.lpFile = sExeFilePath;
se.lpParameters = sCommand;
se.nShow = SW_HIDE;
se.fMask = SEE_MASK_NOCLOSEPROCESS;
se.lpVerb = _T("open");
DWORD result = ::ShellExecuteEx(&se);
if (se.hProcess != NULL)
WaitForSingleObject(se.hProcess, INFINITE);
*/
위 api 방식의 소스랑 동일한 기능을 하는 소스입니다.
따로 프로젝트 환경을 잡지 않아도 되고 간단하게 구현 가능합니다.
🔽 소개는 이정도로 하고 다음 글에서 간단한 예제들을 구현해보겠습니다.
[C++ / MFC] Ghostscript 예제 (파일포맷 변환, 이미지 자르기, 해상도 변환 등 ..)
🔽 고스트 스크립트 기본 세팅은 이전 글을 참고해주세요. [C++ / MFC] Ghostscript 다운로드 및 사용 방법 프로그램에서 PDF 파일의 형식을 바꾸거나 불러와서 이미지화 시키는것은 일반적인 방법으
dev-drive.tistory.com
'C++, MFC' 카테고리의 다른 글
[C++ / MFC] 이미지 관리 툴 ImageMagick 사용 방법 (4) | 2023.01.11 |
---|---|
[C++ / MFC] Ghostscript 예제 (파일포맷 변환, 이미지 자르기, 해상도 변환 등 ..) (0) | 2023.01.06 |
[C++, MFC] 압축, 압축 해제 라이브러리 / XZip, XUnzip 사용방법 (0) | 2022.12.29 |
[C++ / MFC] Visual Studio에서 msi 설치프로그램 만들기 (2) (0) | 2022.12.20 |
[C++ / MFC] Visual Studio에서 msi 설치프로그램 만들기 (1) (0) | 2022.12.20 |
댓글