티스토리 뷰

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");

}

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

공유하기 링크
TAG
,
댓글
  • 프로필사진 나그네 Acrobat SDK 9를 인스톨 하는데... 비쥬얼스튜디오 2005가 깔려 있어야 된다는 메세지가 나오는군요...

    쥔장님 께서는 위의 소스를 2008에서 개발한건지? 아님 2005에서 개발한건지?

    2008에서 했다면 어떻게 하셨는지? 궁금합니다.
    2010.03.03 10:40
  • 프로필사진 Favicon of https://blog.ntils.com BlogIcon hwigyeom Acrobat SDK 를 이용하려고 하시는 군요..
    저같은 경우에는 컴퓨터에 Acrobat이 설치되어 있는지라, SDK의 설치는 필요가 없었습니다.
    그리고, 개발은 Visual Studio 2010에서 진행하였구요.
    SDK 설치에 대해서는 테스트후에 다시 답변을 드리도록 하겠습니다.^^;
    2010.03.04 08:47 신고
  • 프로필사진 나그네 빠른 답변 감사 드립니다.

    Acrobat Reader만 설치된 컴에서는
    Acrobat.AcroPDDoc pdfDoc = new Acrobat.AcroPDDoc();
    이부분에서 COM Exception이 발생합니다 ㅠ.ㅠ

    당췌 어떻게 해야 할지 쩝~~!

    PDF --> Image.. 검색을 해보니 상용 패키지 뿐이여서...쩝~!

    Reader만 깔린컴에서 Load가 되면.. 이를 이용해서... 이미지를 가져올수 있다 생각했는데.. 쉽지가 않군요...

    쥔장님 다른 방법은 없겠습니까?
    2010.03.04 09:29
  • 프로필사진 Favicon of https://blog.ntils.com BlogIcon hwigyeom 답변이 조금 늦었네요.
    찾아보니, Acrobat Reader는 COM 인터페이스를 노출하지 않으므로 위 코드를 사용할 수가 없겠네요.
    위 코드를 실행하기 위해서는 Adobe Acrobat이 설치되어 있어야만 합니다. 내용은 수정해 놓도록 하겠습니다.
    원하시는 답변을 못 드려 죄송합니다.
    2010.03.08 10:35 신고
  • 프로필사진 BlogIcon 초보코딩 안녕하세요.. pdf에 관해 공부 중인 학생입니다.
    다름이 아니라 님 소스 중에서 제가 돌려 보니 계속 이부분에 서 터집니다.ㅠ 왜 그런 지 모르겠습니다.ㅠ
    제가 너무 초보라서요.ㅠ
    Acrobat.AcroPDDoc pdfDoc = new Acrobat.AcroPDDoc();
    그리고 정말 죄송합니다만 pdf에 관련된 자료 같은게 있으면 저한테 메일로 좀 보내주시면 안될까요?!ㅠ
    부탁좀드리겠습니다.ㅠ
    tjdgnszz7@naver.com
    2010.08.26 17:59
  • 프로필사진 Favicon of https://blog.ntils.com BlogIcon hwigyeom 혹시 개발PC에 Acrobat이 설치가 안되어 있지 않나요?
    위 방법은 실행하는 PC에 Acrobat이 꼭 설치되어 있어야 합니다.(Adobe Reader 나 Acrobat Reader가 설치되어 있어서는 되지 않습니다.)
    2010.09.07 15:52 신고
  • 프로필사진 Favicon of http://www.cyworld.com/ladofa9 BlogIcon 라도파 음 제 경우에는 클립보드에서 이미지를 가져오는 데서 많은 어려움이 있었습니다. Bitmap이 System.Drawing.Bitmap인가요? 타입 변환이 안 되서 var로 받아온 뒤 살펴보니 BitmapSource더라구요...
    근데 3.5이후에는 BitmapSource로 가져오는게 버그가 있다고.. 하네요; 엄청 고생했습니다.
    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/10589cd6-6a48-4497-8f7d-a12490f376c6
    여기서 링크된 곳 여기 저기 들어가서 결국 해결했죠;
    2010.08.29 06:18
  • 프로필사진 Favicon of https://blog.ntils.com BlogIcon hwigyeom 그렇군요.. BitmapSource면 WPF에서 하셨나요?
    Windows Forms Project에서 테스트한거라, 그럴지도 모르겠네요.
    댓글 감사드립니다.
    2010.09.07 15:55 신고
  • 프로필사진 이동동 관리자의 승인을 기다리고 있는 댓글입니다 2012.10.24 19:37
댓글쓰기 폼