<< Acrobat Pro 8 에서 생성된 JPG >>
따라서, 1부에 만든 코드중 jpg 추출 부분은 다음과 같이 변경되었다.
조만간 Adobe 에 연락해서 방법이 없는지 문의할 예정이다. 긍정적인 답이 오면 바로 포스팅 하도록 하겠다. 이 글을 읽으시는 분들중 Acrobat Pro 로 해결하는 방법이 있으면 꼭 답변 주길 부탁 드린다.
시작전에 비슷한 상황에 계신 분들에게 도움이 되고자 이 과정을 거친 이유에 대한 설명을 한다.
0. 본 프로그램은 서버용 프로그램이 아니다 사용자는 모두 mac os X 을 사용한다. 편집디자이너가 mac 과 pc 를 왔다 갔다 하는 불필요한 과정등을 없애기 위해 전임자가 개발한 win 용 프로그램을 걷어 내야 한다.
1. 내가 속한 조직은 MS SQL Server 만 사용한다. 문제는, MS에서 mac os x 용 ODBC 드라이버를 만들어주지 않고 apple 또한 개발을 안하고 있다. (두 회사가 앙숙 임을 상기시켜 준다) 따라서 mac os x 에서 MS SQL Server 에 직접 붙을수는 없다. 물론 몇몇 공개 및 상용 드라이버가 있지만 두개 모두 100% 신뢰하냐는 질문에는 Never 다.
이에 관해 인터넷상에서 몇몇 분들이 MS 에서 제공하는것이 있다는 엉뚱한 답변으로 사람들을 혼란스럽게 하는것 같아서 추가로짚고 넘어간다. MS 에서는 win 용 ODBC 이외에 java native 4 드라이버만을 배포하고 있다. mac os X 이 java 를 지원하고 있으므로 사용 가능하다. 하지만, 이것은 java 프로그램을 할때만 사용할 수 있다.
win 용 Acrobat Pro 8 경우 javascript 에서 ADO 를 사용할수 있다. 그렇지만, 제공되는 기능이나 속도가 기대 이하였다. 게다가 이 기능은 CS3 제품중 Acobat Pro 만 유일하다.
IIS 올리는데 비용 부담이 없고 개발툴 역시 무료로 배포되는 Visual Studio Express 로 웹서비스 대부분의 기능은 개발이 가능하다. (게다가 한글화 까지..) JAVASCRIP 로 SOAP 을 이용하는 부분은 CS3 의 다른 제품(인디자인, 포토샵 등) 에서도 지원하며 사용법도 비슷하다. 나중을 위해서라도 도전해 보시길 바란다
2. 전임자가 윈도우 애플리케이션상에서 PDF 병합/분할 처리를 위해 pdftk 1.12 을 이용했다. 이 라이브러리의 큰 문제는 pdf 1.3 으로 변환된다는 것이다. PDF 풀컬러 인쇄를 하는 업체에선 문제가 된다. 자세한 내용은 다른 포스트에 성토 하겠다. 하여튼 안전하게 PDF 1.6 을 다루기 위해서는 Acobat Pro 나 할러퀸 같은 알만한 S/W 가 필요 하며, 회사에서 정품 CS3 를 가지고 있어서 Acobat Pro 8 을 사용한다.
3. Acobat Pro 8 의 javascript 엔진에서 SOAP 접근 및 PDF 결합/분리/Text 추출 등의 모든 작업과 간단한 화면 생성이 가능하다. 또한 메뉴에 넣을 수 있으므로 사용자가 편리하게 사용할 수 있다.
블로그가 업무 보고를 하는 곳은 아니니 이정도로만 하고 본론에 들어가겠다.
환경은 다음과 같다.
아래는 IIS 에 올린 웹서비스 예제 코드다. Acobat Pro 8 의 JavaScript 엔진에서 이 메소드를 접근할 것이다.
아래 코드는 Acobat pro 8 에서 웹서버에 접속해서 HelloWorld2() 를 호출하는 예제 이다.
Acobat pro 8 에서 ASP.NET 으로 생성된 웹서비스를 사용하는 경우, Net.SOAP.request 개체에서 반드시 설정할 두가지 속성이 있다. 두 속성을 지정하지 않으면 오류는 발생하지 않지만 파라메터가 전달되지 않는다.
(Acrobat 8 이후로는 SOAP 대신 Net.SOAP 으로 사용할것.)
전임자가 만든 프로그램중 pdf 를 이미지(JPG)로 변환하는 프로그램이 있는데, 여러 가지 이유들로 걷어내고 새롭게 만들게 되었다. 나와 같은 상황에 처한 개발자들이 삽질하는 것을 막기 위해 글을 올린다.
블로그 제목이 Publishing Programming for Mac OS X 이지만, 몇가지 사정으로 이 프로그램은 Win 용 Acobat Pro 8 의 COM 인터페이스를 이용한 DLL 형태로 만들게 되었다. 이유부터 설명한다.
MS SQL Server 상에 트렌젝션(데이터량) 이 크다. 트랜젝션이 크지 않았으면 DB 쪽 처리만 Mac OS X Server 에서 ASP.NET 기반의 SOAP 을 통해 처리했었을 것이다.
윈도우 기반 영업시스템에서 호출하거나 재사용이 가능해야 한다.
개발 환경은 다음과 같다.
win 용 Acrobat pro 8
Win 2003 Server
Win XP
Visual Basic 6
ImageMagick -6.4.8-10-Q8
각 작업별로 사용되는 라이브러리는 다음과 같다. DB 나 XML 을 사용하는 것은 MSDN 을 찾기 바란다.
Adobe CS3 는 windows Server 2003 이상에서만 설치된다. 2000 Server 에서 설치되는 편법이 있다고 들었지만 분명 이유가 있어서 OS 를 제한했다고 여겨진다. 설치를 진행하면서 알게된 사실인데, 서버에 설치되는 제품은 인디자인과 Acrobat Pro 8 정도 밖엔 안된다. 포토샵과 일러스트레터는 안깔린다.
▶ImageMagick
ImageMagick 은 이미지 변환툴중 역사도 오래되었고 꾸준한 업데이트가 이루어지고 있는 라이브러리다. 또한 mac OS X 및 파이썬, 루비 등의 최신 언어에서도 접근이 가능한 인터페이스를 제공하고 있다. http://www.imagemagick.org 에서 최신 버전을 받기 바란다. 나는 ImageMagick-6.4.8-10-Q8-windows-dll.exe 를 사용했다.
파일명을 주목하자. Q 은 Color Depth 를 말하며 Q8은 8bit , Q16은 16bit 를 말한다. 디카 RAW 포멧도 아니니 처리 속도나 메모리를 고려해서 Q8 을 사용하기로 결정했다.
아래는 설치화면이다. COM 인터페이스에서 이용하기 위해선 설치중 하단의 체크박스를 선택해야 한다.
Option Explicit
Dim gApp, gAVDoc, gPDFDoc
Dim gPDFSel, gPDFRect, gPDFPV
Dim gPDFPage, gPDFHL
Set gApp = CreateObject("AcroExch.App")
gApp.Hide '화면이 뜨는 경우를 막기 위해서 명시적으로 처리함.
Set gPDFRect = CreateObject("AcroExch.Rect")
Set gPDFHL = CreateObject("AcroExch.HiliteList")
Set gAVDoc = CreateObject("AcroExch.AVDoc")
gAVDoc.Open "C:\Documents and Settings\cynosure\바탕 화면\[007디자인1면]2009010185-16.pdf", ""
Set gPDFDoc = gAVDoc.GetPDDoc
Set gPDFPV = gAVDoc.GetAVPageView
Set gPDFPage = gPDFPV.GetPage
'내용 추출
gPDFHL.Add 0, 32767
Set gPDFSel = gPDFPage.CreatePageHilite(gPDFHL)
Dim lngint
Dim strValue
For lngint = 0 To gPDFSel.GetNumText - 1
strValue = strValue & gPDFSel.GetText(lngint)
Next
'jpg 파일 저장
Dim aa
Set aa = gPDFDoc.GetJSObject()
Call aa.SaveAs("/d/kk.jpg", "com.adobe.acrobat.jpeg") 'Acrobat 6.0 부터 safe path 가 적용됨. 자세한 내용은 js_api_reference.pdf 의 "safe path" 를 참조하세요.
Set aa = Nothing
'썸네일 생성
Dim objIO
Set objIO = CreateObject("ImageMagickObject.MagickImage.1")
Call objIO.Convert("d:\kk.jpg", "-resize", "50x36^!", "d:\t_kk.jpg") 'command line 명령어중 스페이스를 기준으로 나눔
Set objIO = Nothing
'마무리
gAVDoc.Close False
gApp.Exit
'개체 삭제
Set gPDFHL = Nothing
Set gPDFRect = Nothing
Set gPDFDoc = Nothing
Set gAVDoc = Nothing
Set gApp = Nothing
'MsgBox "완료"