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");
}
문제가 발생 시에는 댓글을 남겨주세요.
'C#' 카테고리의 다른 글
메서드를 호출한 어셈블리 정보 가져오기 (0) | 2009.10.22 |
---|---|
운영체제에 등록되지 않은 폰트 사용하기 (0) | 2008.08.25 |
C# 3.0의 발전 (2) - Object and Collection Initializer (0) | 2007.10.18 |
C# 3.0의 발전 (1) - Auto-Implemented Properties (0) | 2007.10.18 |