Convertire le pagine PDF in immagini è essenziale per le miniature, le anteprime e la visualizzazione sul web. PDF to JPG La demo mostra come renderizzare pagine PDF come immagini JPEG di alta qualità utilizzando PDFium VCL.
Panoramica
Questa demo converte le pagine PDF in immagini JPEG con DPI, impostazioni di qualità e selezione delle pagine personalizzabili. È perfetta per generare miniature, creare archivi basati su immagini o preparare i PDF per la visualizzazione sul web.
Caratteristiche Principali
- DPI personalizzabile. – Controlla la risoluzione di output (72-600 DPI).
- Impostazioni di qualità. – Regola la qualità della compressione JPEG.
- Selezione delle pagine – Converti tutte le pagine o intervalli di pagine specifici.
- Directory di output. – Scegli dove salvare le immagini convertite.
- Monitoraggio dei progressi. – Feedback visivo durante la conversione.
- Supporto per l'annullamento. – Annulla le conversioni lunghe in qualsiasi momento.
Requisiti delle librerie DLL di PDFium
Prima di eseguire qualsiasi applicazione VCL di PDFium, assicurarsi che i file DLL di PDFium siano installati:
pdfium32.dll/pdfium64.dll– Versioni standard (~5-6 MB)pdfium32v8.dll/pdfium64v8.dll– Con il motore JavaScript V8 (~23-27 MB)
Installazione: Esegui PDFiumVCL\DLLs\CopyDlls.bat come amministratore per copiare automaticamente i file DLL nelle directory di sistema di Windows.
Conversione di base da PDF a immagine.
|
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; |
Conversione completa con opzioni.
|
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; |
Comprensione di RenderPage.
Il RenderPage Il metodo è fondamentale per la conversione da PDF a immagine:
|
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 = [] ); |
Opzioni di rendering
|
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); |
Linee guida su DPI e qualità
| 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 |
Analisi degli intervalli di pagina
|
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; |
Creazione di miniature
|
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; |
Casi d'uso.
- Generazione di miniature – Crea anteprime per i visualizzatori di documenti
- Pubblicazione web Converti i file PDF in immagini per la visualizzazione sul web.
- Social Media. Condividi il contenuto dei file PDF come immagini.
- Conversione di archivi. Converti gli archivi PDF in formati immagine.
- Pre-elaborazione OCR. Prepara i file PDF per l'elaborazione OCR.
Conclusione.
La demo di conversione da PDF a JPG mostra quanto sia facile convertire le pagine PDF in immagini di alta qualità con PDFium VCL. RenderPage Il metodo offre il controllo completo sulla risoluzione, la qualità e le opzioni di rendering.
Che tu stia creando un generatore di miniature, un pubblicatore web o un convertitore di documenti, PDFium VCL fornisce le funzionalità di rendering necessarie.
Inizia oggi stesso a convertire i PDF in immagini. con Componente PDFium VCL today.