PDF 페이지를 이미지로 변환하는 것은 섬네일, 미리보기 및 웹 페이지 표시를 위해 필수적입니다. PDF를 JPG로 변환합니다. 이 데모는 PDFium VCL을 사용하여 PDF 페이지를 고품질 JPEG 이미지로 렌더링하는 방법을 보여줍니다.
개요
이 데모는 PDF 페이지를 사용자 정의 가능한 DPI, 품질 설정 및 페이지 선택 기능을 갖춘 JPEG 이미지로 변환합니다. 썸네일 생성, 이미지 기반 아카이브 생성 또는 웹에 표시하기 위한 PDF 준비에 적합합니다.
주요 기능
- 사용자 정의 가능한 DPI - 출력 해상도 제어 (72-600 DPI)
- 품질 설정 – JPEG 압축 품질 조정
- Page Selection (페이지 선택) – 모든 페이지 또는 특정 페이지 범위 변환.
- 출력 디렉토리 – 변환된 이미지를 저장할 위치를 선택합니다.
- 진행 상황 추적 – 변환 과정 중 시각적 피드백을 제공합니다.
- 취소 기능 지원 – 긴 변환 작업도 언제든지 취소할 수 있습니다.
PDFium DLL 요구 사항
PDFium VCL 애플리케이션을 실행하기 전에, PDFium DLL 파일이 설치되어 있는지 확인하십시오.
pdfium32.dll/pdfium64.dll– 표준 버전 (약 5-6 MB)pdfium32v8.dll/pdfium64v8.dll– V8 JavaScript 엔진 포함 (약 23-27 MB)
설치: 실행 PDFiumVCL\DLLs\CopyDlls.bat 관리자 권한으로 실행하여 DLL 파일을 Windows 시스템 디렉터리에 자동으로 복사합니다.
기본 PDF를 이미지로 변환
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
procedure ConvertPdfToImages; var Pdf: TPdf; I: Integer; Bitmap: TBitmap; JpegImage: TJpegImage; Dpi: Integer; begin Dpi := 150; // 150 DPI is good for screen viewing Pdf := TPdf.Create(nil); try Pdf.FileName := 'document.pdf'; Pdf.Active := True; for I := 1 to Pdf.PageCount do begin Pdf.PageNumber := I; // Calculate size based on DPI // PDF default is 72 DPI, so scale accordingly Bitmap := Pdf.RenderPage( 0, 0, Round(Pdf.PageWidth * Dpi / 72), Round(Pdf.PageHeight * Dpi / 72), ro0, // No rotation [], // Default render options clWhite // Background color ); try // Convert to JPEG JpegImage := TJpegImage.Create; try JpegImage.Assign(Bitmap); JpegImage.CompressionQuality := 85; JpegImage.SaveToFile(Format('page_%03d.jpg', [I])); finally JpegImage.Free; end; finally Bitmap.Free; end; end; finally Pdf.Active := False; Pdf.Free; end; end; |
옵션을 사용한 완전한 변환
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
procedure TFormMain.ButtonConvertClick(Sender: TObject); var I: Integer; OutDir, BaseName, FileName: string; JpegImage: TJpegImage; Bitmap: TBitmap; Dpi, Quality: Integer; Pages: TIntArray; PageDigits: Integer; UseAllPages: Boolean; begin ProgressBar.Position := 0; FCancelRequested := False; Screen.Cursor := crHourGlass; try try if not FileExists(EditPdfFile.Text) then raise Exception.Create('PDF file does not exist.'); // Parse settings Dpi := StrToIntDef(Trim(EditDPI.Text), 150); if Dpi <= 0 then Dpi := 150; if Dpi > 600 then Dpi := 600; Quality := StrToIntDef(Trim(EditQuality.Text), 85); if Quality < 1 then Quality := 1; if Quality > 100 then Quality := 100; // Load PDF Pdf.FileName := EditPdfFile.Text; Pdf.Active := True; // Parse page ranges UseAllPages := Trim(EditPageRange.Text) = ''; if UseAllPages then begin SetLength(Pages, Pdf.PageCount); for I := 1 to Pdf.PageCount do Pages[I - 1] := I; end else begin if not ParsePageRanges(EditPageRange.Text, Pdf.PageCount, Pages) then raise Exception.Create('Invalid page range.'); end; ProgressBar.Max := Length(Pages); PageDigits := Length(IntToStr(Pdf.PageCount)); // Setup output OutDir := EnsureOutputDir(Pdf.FileName, EditOutputDir.Text); BaseName := ChangeFileExt(ExtractFileName(Pdf.FileName), ''); JpegImage := TJpegImage.Create; try for I := 0 to High(Pages) do begin if FCancelRequested then Break; Pdf.PageNumber := Pages[I]; // Render page to bitmap Bitmap := Pdf.RenderPage( 0, 0, Round(Pdf.PageWidth * Dpi / 72), Round(Pdf.PageHeight * Dpi / 72), ro0, [], clWhite ); try // Save as JPEG FileName := Format('%s\%s_%.*d.jpg', [OutDir, BaseName, PageDigits, Pages[I]]); JpegImage.Assign(Bitmap); JpegImage.CompressionQuality := Quality; JpegImage.SaveToFile(FileName); finally Bitmap.Free; end; ProgressBar.Position := I + 1; Application.ProcessMessages; end; finally JpegImage.Free; end; except on E: Exception do Application.MessageBox( PChar('Conversion failed: ' + E.Message), 'Error', MB_ICONERROR or MB_OK); end; finally Screen.Cursor := crDefault; Pdf.Active := False; end; end; |
RenderPage 이해하기
The RenderPage method은 PDF를 이미지로 변환하는 핵심입니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Render to a new bitmap function TPdf.RenderPage( Left, Top, Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite ): TBitmap; // Render to an existing bitmap procedure TPdf.RenderPage( Bitmap: TBitmap; Left, Top, Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = []; Color: TColor = clWhite ); // Render directly to a device context (for printing) procedure TPdf.RenderPage( DeviceContext: HDC; Left, Top, Width, Height: Integer; Rotation: TRotation = ro0; Options: TRenderOptions = [] ); |
렌더링 옵션
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
type TRenderOption = ( reAnnotations, // Include annotations in output reLcd, // Optimize for LCD displays reNoNativeText, // Don't use system text rendering reGrayscale, // Output in grayscale reLimitCache, // Limit memory cache reHalftone, // Better image downscaling rePrinting, // Optimize for printing reNoSmoothText, // Disable text anti-aliasing reNoSmoothImage, // Disable image anti-aliasing reNoSmoothPath // Disable path anti-aliasing ); // Example: High-quality output with annotations Bitmap := Pdf.RenderPage(0, 0, Width, Height, ro0, [reAnnotations, reLcd], clWhite); // Example: Fast, grayscale thumbnail Bitmap := Pdf.RenderPage(0, 0, 200, 280, ro0, [reGrayscale, reNoSmoothText, reNoSmoothImage], clWhite); |
DPI 및 품질 지침
| Use Case | Recommended DPI | JPEG Quality |
|---|---|---|
| Thumbnails | 72 | 60-70 |
| Screen viewing | 96-150 | 80-85 |
| High-quality display | 200-300 | 85-95 |
| Printing | 300-600 | 90-100 |
페이지 범위 파싱
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
function TFormMain.ParsePageRanges(const S: string; MaxPage: Integer; out Pages: TIntArray): Boolean; var List: TStringList; I, A, B, J: Integer; Part: string; DashPos: Integer; Used: array of Boolean; Count: Integer; begin Result := False; SetLength(Pages, 0); if Trim(S) = '' then begin Result := True; Exit; end; SetLength(Used, MaxPage + 1); for I := 0 to High(Used) do Used[I] := False; List := TStringList.Create; try List.Delimiter := ','; List.DelimitedText := StringReplace(Trim(S), ' ', '', [rfReplaceAll]); for I := 0 to List.Count - 1 do begin Part := Trim(List[I]); DashPos := Pos('-', Part); if DashPos > 0 then begin // Range: "1-5" A := StrToIntDef(Trim(Copy(Part, 1, DashPos - 1)), 0); B := StrToIntDef(Trim(Copy(Part, DashPos + 1, Length(Part))), 0); if (A < 1) or (B < A) or (B > MaxPage) then Exit; for J := A to B do Used[J] := True; end else begin // Single page A := StrToIntDef(Part, 0); if (A < 1) or (A > MaxPage) then Exit; Used[A] := True; end; end; finally List.Free; end; // Build result array Count := 0; for I := 1 to MaxPage do if Used[I] then Inc(Count); SetLength(Pages, Count); J := 0; for I := 1 to MaxPage do if Used[I] then begin Pages[J] := I; Inc(J); end; Result := True; end; |
썸네일 생성
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function CreateThumbnail(Pdf: TPdf; PageNumber: Integer; MaxWidth, MaxHeight: Integer): TBitmap; var PageWidth, PageHeight: Double; Scale: Double; ThumbWidth, ThumbHeight: Integer; begin Pdf.PageNumber := PageNumber; PageWidth := Pdf.PageWidth; PageHeight := Pdf.PageHeight; // Calculate scale to fit in max dimensions Scale := Min(MaxWidth / PageWidth, MaxHeight / PageHeight); ThumbWidth := Round(PageWidth * Scale); ThumbHeight := Round(PageHeight * Scale); Result := Pdf.RenderPage(0, 0, ThumbWidth, ThumbHeight, ro0, [reGrayscale], clWhite); end; |
사용 사례
- 썸네일 생성 – 문서 브라우저용 미리 보기 생성
- 웹 게시 PDF 파일을 이미지로 변환하여 웹에 표시합니다.
- 소셜 미디어 PDF 콘텐츠를 이미지로 공유합니다.
- 아카이브 변환 PDF 아카이브를 이미지 형식으로 변환합니다.
- OCR 전처리 PDF 파일을 OCR 처리에 적합하도록 준비합니다.
결론
PDF to JPG 데모는 PDFium VCL을 사용하여 PDF 페이지를 고품질 이미지로 변환하는 것이 얼마나 쉬운지 보여줍니다. RenderPage 이 방법은 해상도, 품질 및 렌더링 옵션에 대한 완벽한 제어 기능을 제공합니다.
썸네일 생성기, 웹 퍼블리셔 또는 문서 변환기를 개발하든, PDFium VCL은 필요한 렌더링 기능을 제공합니다.
PDF를 이미지로 변환을 시작하세요. Delphi PDFium VCL 컴포넌트를 사용하여. PDFium VCL 컴포넌트 오늘.