알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

documents4j 문서 포멧 변환기 example(excel->pdf) 본문

기타

documents4j 문서 포멧 변환기 example(excel->pdf)

백곳 2018. 10. 8. 21:03

documents4j 문서 포멧 변환기

documents4j  은 문서를 다양한 문서 포멧을 컨버팅 해주는 java 라이브러리 이다


해당 라이브러리의 강력한 기능은

1.excel 와 word 등을 VBA 스크립트를 통해서 변환 해준다는것이다.



   해당 스크립트를 직접 수정도 소스를 통해 가능하다 


   물론 VBA 스크립드 실행을 위해서 서버는 window 에서 office 2010 버전 이상이 설치 되어 있어야 한다.



2.서버와 클라이언트로 나눌수 있다는것이다.


   서버 쪽에서 변환을 하고 클라이언트에서 변환된 결과만 받아서 처리 할수가 있다.



사용법



기본 사용 방법은 http://documents4j.com/#/   을 참조 하고 중간 중간에 시행 착오가 있어서 기록을 남깁니다.


https://github.com/documents4j/documents4j/releases    여기에서 소스를 다운 받습니다.


소스를 다운 받고 압축을 풀어 줍니다.


1. 준비 사항 Maven 설치


   - https://maven.apache.org/download.cgi 에서 설치 한다.

   - 그리고 환경 PATH 를 잡아 줍니다.



2. java jdk 설치 하고 PATH 찹기


   -java jdk 설치 하고 PATH 를 꼭 잡아 줘야 합니다. 

   -java jre로 PATH 가 설정 되어 있으면 빌드시 오류가 납니다.



3. Complie 하기


pom.xml 파일을 열여 줍니다.




                    <!-- Check style on build -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <version>${version.maven.checkstyle-plugin}</version>
                        <executions>
                            <execution>
                                <id>validate</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                                <configuration>
                                    <configLocation>checkstyle.xml</configLocation>
                                    <consoleOutput>true</consoleOutput>
                                    <failsOnError>true</failsOnError>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>


해당 부분 지워 줍니다.


그 이유는 build 할때 checkstyle error 가 빈번 하게 발생하기 때문에 지워 줍니다.



라이브러리를 컴파일 해줍니다.


이러면 라이브러리는 컴파일 하게 됩니다.


이번엔 서버 single 실행 파일을 만들어 보겠습니다.



mvn package -P extras




documents4j-server-standalone-1.0.3-shaded.jar 파일이 실행 파일 입니다.



아래 명령어로 실행 하면 서버가 실행 됩니다.


  java -jar documents4j-server-standalone-shaded.jar http://localhost:9998




일단 사용 하기 위해서 java application 프로젝트 만들어서 메이븐 프로젝트로 변환 시킨 프로젝트를 Eclipse 로


pom.xml


  <dependencies>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-api</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-util-conversion</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-local</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-transformer</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-util-all</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-aggregation</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>
              documents4j-transformer-msoffice-excel
          </artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-client</artifactId>
          <version>1.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.documents4j</groupId>
          <artifactId>documents4j-client-standalone</artifactId>
          <version>1.0.3</version>
      </dependency>
  </dependencies>


위와 같이 라이브러리를 추가 해 주고


제가 사용한 java Test 코드 입니다.


package co.kr.Test;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.RemoteConverter;



public class Main {
    public static final String SAMPLE_XLSX_FILE_PATH = "./sample-xlsx-file.xlsx";

    public static void main(String[] args) throws InterruptedException, ExecutionException, IOException  {
        // TODO Auto-generated method stub
            File wordFile = new File("TESTDCO.xlsx"), target = new File("test.pdf");
            InputStream in = new BufferedInputStream(new FileInputStream("TESTDCO.xlsx"));
           
            RemoteConverter.Builder builder = RemoteConverter.builder()
                    .baseFolder(new File("test"))
                    .requestTimeout(10, TimeUnit.SECONDS)
                    .baseUri("http://localhost:9998");
            IConverter converter = builder.build();
           

            Future<Boolean> conversion = converter
                    .convert(wordFile).as(DocumentType.MS_EXCEL)
                    .to(target).as(DocumentType.PDF)
                    .schedule();
            System.out.println("test");
       
    }

}




test.pdf 가 생겼습니다.


중요한것은 리모트 이기 때문에 클라이언트 PC에서는 엑셀이 없어도 컨버팅이 가능할수 있다는 것입니다.



이제 VBA 스크립트를 수정 하는 방법을 알아 보겠습니다.


그이유는 컨버팅 할때 제대로 원하는데로 컨버팅 이 되지 않기때문에 원하는데로 컨버팅 하기 위해서 스크립트를

만질 필요가 있습니다.




여기에서 보면 excel_convert.vbs 에서 스크립트 하는 소스가 있습니다.



해당 소스에 한부분인데 PDF 로 변환 되는 작업을 실행하는 부분 입니다.


해당 부분을 수정 하고 다시 컴파일 하면 되는데 여기서 주의점이 있습니다.


컴파일 할때  .m2 에 업데이트를 해줘야 합니다. 


예를 들면 documents4j-server-standalone 을 컴파일 할때 



여기의 파일 수정 해도



.m2 에 임시파일이 있을때 해당 파일에서 가져다 라이브러리를 사용 하기 때문에 스크립트 변경이 반영이 안됩니다.


mvn install 을 하면 업데이트가 됩니다,


스크립트 수정시에 mvn install -> standalone-shard jar 파일을 만들어 줍니다,


또한 스크립트 명령어중 with 문법에 주의 해야 합니다.
또한 VBScript 와 Visual Basic Script 문법은 비슷 해 보이나 다른것입니다.
여기서는 VBScript 을 사용하고 여기스는 with 문법이 없기 때문에 그런 이유로 사용이 불가 합니다.
해당 문법 사용시 오류를 유발 하니 직접 메소드를 1개씩 실행해 줘야 합니다, 





Comments