시작전에 비슷한 상황에 계신 분들에게 도움이 되고자 이 과정을 거친 이유에 대한 설명을 한다.

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 추출 등의 모든 작업과 간단한 화면 생성이 가능하다. 또한 메뉴에 넣을 수 있으므로 사용자가 편리하게 사용할 수 있다. 

블로그가 업무 보고를 하는 곳은 아니니 이정도로만 하고 본론에 들어가겠다.

환경은 다음과 같다.

클라이언트 : mac OS X Tiger. Acobat Pro 8 의 javascript 엔진 이용함.
서버 : win 2003 Server. Visual Studio 2008 에서 .Net 3.5 로 웹서비스 생성. (C# 사용)


아래는 IIS 에 올린 웹서비스 예제 코드다. Acobat Pro 8 의 JavaScript 엔진에서 이 메소드를 접근할 것이다.

// ASP.net 에서 생성한 테스트 코드
public string HelloWorld2(string d)
{
    return "Hello World" + d;
}


아래 코드는 Acobat pro 8 에서 웹서버에 접속해서 HelloWorld2() 를 호출하는 예제 이다.
Acobat pro 8 에서 ASP.NET 으로 생성된 웹서비스를 사용하는 경우, Net.SOAP.request  개체에서 반드시 설정할 두가지 속성이 있다. 두 속성을 지정하지 않으면 오류는 발생하지 않지만 파라메터가 전달되지 않는다.
(Acrobat 8 이후로는 SOAP 대신 Net.SOAP  으로 사용할것.)

// Acrobat javascript 코드
var cNameSpace = "http://10.10.1.1/";

var cTestString = { soapType : "xsd:string" , soapValue : "22" };
var req = {};
req["HelloWorld2"] = {d : cTestString};

var response = Net.SOAP.request({
        cURL: cNameSpace + "Service.asmx?WSDL"
        , oRequest : req
        , cAction : cNameSpace + "HelloWorld2"
        , bEncoded : false
        , cNamespace : cNameSpace
        , cResponseStyle: SOAPMessageStyle.Message
        , cVersion : SOAPVersion.version_1_2  
});

var value = response[0].soapValue[0].soapValue
console.println("result = " + value);

bEncoded :
ASP.NET 에서 생성되는 WSDL 은 Document/literal wrapped 을 사용하는데, Acrobat 의 SOAP 관련 javascript 개체들은 encoding 이 기본값이다. false 로 지정해야 한다.

cVersion :
asp.net 2.0 이상은 SOAP 1.1 요청이 있으면 1.1 형식으로 반환된다. 1.2 와 1.1 차이는 구글에서 검색하면 많은 정보를 얻을 수 있으므로 포스팅 하진 않는다.
Acrobat 8.0 이상을 사용한다면 반드시 SOAPVersion.version_1_2 로 설정하시기 바랍니다.


이정도면  Acrobat Pro 8 JavaScript 에서 ASP.NET WebService 를 이용하는데 큰 무리가 없을듯 하다.  자세한용은  "Developing Acrobat® Applications Using JavaScript" 이나 "JavaScript™ for Acrobat® API Reference" 를 보면서 참조하길 바란다.

+ Recent posts