ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C#으로 Acrobat(PDF) 문서를 이미지로 변환하기
    C# 2010. 2. 20. 22:20

    PDF 문서는 상당히 강력한 기능을 제공하지만, 많은 내용이 담긴 문서의 경우에는 그 용량 또한 무지하지 못할 정도로 커지게 되므로, 웹 상에서 배포할 할 때는 파일이 클라이언트로 모두 다운로드될 때 까지 대기 해야만 합니다.

    구글도서나 YES24와 같은 사이트에는 즉시 응답성을 위해서 이미지 포맷을 이용하여 미리보기를 제공하여 즉시 응답성을 높이고 있는데요. 그래서 PDF 문서를 이미지로 변환하여 웹 상에서 제공할 수 있지 않을까 하고 생각해 보았습니다.

    이미지로 변환하는 기능은 Acrobat에서 제공하고 있으므로, C#에서도 Acrobat의 기능을 이용하여 PDF를 이미지로 변경하는 것이 가능합니다.
    이미지로 변환하기 위해서는 우선 Adobe Acrobat이 설치되어 있어야 합니다.
    애석하게도 Acrobat Reader는 Acrobat관련 인터페이스를 인스턴스화 할 수 있는 COM 인터페이스를 노출하지 않으므로, 사용할 수 가 없습니다.

    이미지 변환을 위해서 우선 프로젝트에 Acrobat Type Library를 COM 항목에서 참조로 추가합니다.
    아래와 같이 Acrobat 또는 Adobe Acrobat Type Library를 참조로 추가하여 주세요.


    그리고, 변환을 하는 코드는 아래와 같습니다.

    // 아크로벳 문서­ 객체를 생성하고, 지정한 파일명의 PDF 문서­를 읽어들입니다.

    Acrobat.AcroPDDoc pdfDoc = new Acrobat.AcroPDDoc();

    bool ret = pdfDoc.Open(fileName);

    if (ret == false)

    {

        throw new FileNotFoundException();

    }

     

    // 아크로벳 문서­의 전체 페이지 수를 가져옵니다.

    int totalPage = pdfDoc.GetNumPages();

    int currentPage = 0;

     

    // 문서­에서­ 지정한 번호의 페이지를 아크로벳 페이지 객체로 받아옵니다.

    Acrobat.AcroPDPage pdfPage = (Acrobat.AcroPDPage)pdfDoc.AcquirePage(currentPage);

     

    // 이미지로 만들기 위한 영역을 지정합니다.

    Acrobat.AcroPoint pdfSize = (Acrobat.AcroPoint)pdfPage.GetSize();

    Acrobat.AcroRect pdfRect = new Acrobat.AcroRect();

    pdfRect.Left = 0;

    pdfRect.right = pdfSize.x;

    pdfRect.Top = 0;

    pdfRect.bottom = pdfSize.y;

     

    // 페이지의 지정된 영역을 100% 크기로 클립보드에 이미지 형태로 복사합니다.

    pdfPage.CopyToClipboard(pdfRect, 0, 0, 100);

     

    // 클립보드에 저장된 이미지를 파일로 저장합니다.

    IDataObject clipboardData = Clipboard.GetDataObject();

    if (clipboardData.GetDataPresent(DataFormats.Bitmap))

    {

        Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap);

        pdfBitmap.Save("1.jpg");

    }

    문제가 발생 시에는 댓글을 남겨주세요.

Designed by Tistory.