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#' 카테고리의 다른 글
| C#으로 Acrobat(PDF) 문서를 이미지로 변환하기 (8) | 2010/02/20 |
|---|---|
| 메서드를 호출한 어셈블리 정보 가져오기 (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 |
댓글을 달아 주세요
Acrobat SDK 9를 인스톨 하는데... 비쥬얼스튜디오 2005가 깔려 있어야 된다는 메세지가 나오는군요...
쥔장님 께서는 위의 소스를 2008에서 개발한건지? 아님 2005에서 개발한건지?
2008에서 했다면 어떻게 하셨는지? 궁금합니다.
Acrobat SDK 를 이용하려고 하시는 군요..
저같은 경우에는 컴퓨터에 Acrobat이 설치되어 있는지라, SDK의 설치는 필요가 없었습니다.
그리고, 개발은 Visual Studio 2010에서 진행하였구요.
SDK 설치에 대해서는 테스트후에 다시 답변을 드리도록 하겠습니다.^^;
빠른 답변 감사 드립니다.
Acrobat Reader만 설치된 컴에서는
Acrobat.AcroPDDoc pdfDoc = new Acrobat.AcroPDDoc();
이부분에서 COM Exception이 발생합니다 ㅠ.ㅠ
당췌 어떻게 해야 할지 쩝~~!
PDF --> Image.. 검색을 해보니 상용 패키지 뿐이여서...쩝~!
Reader만 깔린컴에서 Load가 되면.. 이를 이용해서... 이미지를 가져올수 있다 생각했는데.. 쉽지가 않군요...
쥔장님 다른 방법은 없겠습니까?
답변이 조금 늦었네요.
찾아보니, Acrobat Reader는 COM 인터페이스를 노출하지 않으므로 위 코드를 사용할 수가 없겠네요.
위 코드를 실행하기 위해서는 Adobe Acrobat이 설치되어 있어야만 합니다. 내용은 수정해 놓도록 하겠습니다.
원하시는 답변을 못 드려 죄송합니다.
안녕하세요.. pdf에 관해 공부 중인 학생입니다.
다름이 아니라 님 소스 중에서 제가 돌려 보니 계속 이부분에 서 터집니다.ㅠ 왜 그런 지 모르겠습니다.ㅠ
제가 너무 초보라서요.ㅠ
Acrobat.AcroPDDoc pdfDoc = new Acrobat.AcroPDDoc();
그리고 정말 죄송합니다만 pdf에 관련된 자료 같은게 있으면 저한테 메일로 좀 보내주시면 안될까요?!ㅠ
부탁좀드리겠습니다.ㅠ
tjdgnszz7@naver.com
혹시 개발PC에 Acrobat이 설치가 안되어 있지 않나요?
위 방법은 실행하는 PC에 Acrobat이 꼭 설치되어 있어야 합니다.(Adobe Reader 나 Acrobat Reader가 설치되어 있어서는 되지 않습니다.)
음 제 경우에는 클립보드에서 이미지를 가져오는 데서 많은 어려움이 있었습니다. Bitmap이 System.Drawing.Bitmap인가요? 타입 변환이 안 되서 var로 받아온 뒤 살펴보니 BitmapSource더라구요...
근데 3.5이후에는 BitmapSource로 가져오는게 버그가 있다고.. 하네요; 엄청 고생했습니다.
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/10589cd6-6a48-4497-8f7d-a12490f376c6
여기서 링크된 곳 여기 저기 들어가서 결국 해결했죠;
그렇군요.. BitmapSource면 WPF에서 하셨나요?
Windows Forms Project에서 테스트한거라, 그럴지도 모르겠네요.
댓글 감사드립니다.