본문 바로가기

C#

C#으로 Acrobat(PDF) 문서를 이미지로 변환하기

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

}

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