Convertir des images en PDF est une exigence courante pour la gestion, l'archivage et le partage de documents. Démo "Image vers PDF". La démo montre comment créer des documents PDF multi-pages à partir d'un ensemble d'images en utilisant PDFium VCL.
Aperçu
Cette démo permet aux utilisateurs de sélectionner plusieurs images, de les prévisualiser, de les réorganiser si nécessaire et de les convertir en un seul document PDF. Chaque image devient une page dans le PDF, correctement redimensionnée et centrée.
Principales fonctionnalités
- Prise en charge de plusieurs images. – Ajouter plusieurs images en une seule fois.
- Prise en charge des formats. – Images JPEG, PNG, BMP, GIF et TIFF.
- Aperçu de l'image. – Prévisualisez les images avant la conversion.
- Redimensionnement automatique des pages. – Orientation portrait ou paysage en fonction de l'orientation de l'image.
- Mise à l'échelle intelligente. – Les images sont mises à l'échelle pour s'adapter à la page avec des marges.
- Informations sur l'image. – La taille originale et le facteur de mise à l'échelle sont affichés sur chaque page.
Exigences des DLL PDFium
Avant d'exécuter toute application PDFium VCL, assurez-vous que les fichiers DLL PDFium sont installés :
pdfium32.dll/pdfium64.dll– Versions standard (environ 5-6 Mo)pdfium32v8.dll/pdfium64v8.dll– Avec le moteur JavaScript V8 (environ 23-27 Mo)
Installation : Exécuter PDFiumVCL\DLLs\CopyDlls.bat en tant qu'administrateur pour copier automatiquement les DLL dans les répertoires système Windows.
Création de fichiers PDF à partir d'images.
Le processus de conversion principal :
|
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 |
procedure TFormMain.CreatePDFFromImages; var I: Integer; PageWidth, PageHeight: Double; ImageWidth, ImageHeight: Double; ScaleX, ScaleY, Scale: Double; ImageSize: TSize; X, Y: Double; Picture: TPicture; begin if FImageList.Count = 0 then Exit; ProgressBar.Visible := True; ProgressBar.Max := FImageList.Count; ProgressBar.Position := 0; try // Create new PDF document Pdf.CreateDocument; Pdf.Active := True; for I := 0 to FImageList.Count - 1 do begin try // Load the image Picture := TPicture.Create; try Picture.LoadFromFile(FImageList[I]); // Get image dimensions ImageSize.cx := Picture.Width; ImageSize.cy := Picture.Height; // Set page orientation based on image if ImageSize.cx > ImageSize.cy then begin // Landscape PageWidth := 842; // A4 landscape PageHeight := 595; end else begin // Portrait PageWidth := 595; // A4 portrait PageHeight := 842; end; // Create page Pdf.AddPage(I + 1, PageWidth, PageHeight); Pdf.PageNumber := I + 1; // Calculate scaling ImageWidth := ImageSize.cx; ImageHeight := ImageSize.cy; ScaleX := (PageWidth - 80) / ImageWidth; // 40pt margin each side ScaleY := (PageHeight - 120) / ImageHeight; // 40pt + space for text Scale := Min(ScaleX, ScaleY); ImageWidth := ImageWidth * Scale; ImageHeight := ImageHeight * Scale; // Center on page X := (PageWidth - ImageWidth) / 2; Y := (PageHeight - ImageHeight) / 2; // Add image to PDF Pdf.AddPicture(Picture, X, Y, ImageWidth, ImageHeight); // Add image information Pdf.AddText(Format('File: %s', [ExtractFileName(FImageList[I])]), 'Arial', 10, X, Y + ImageHeight + 10, clBlack, $FF, 0.0); Pdf.AddText(Format('Original: %dx%d px, Scale: %.1f%%', [ImageSize.cx, ImageSize.cy, Scale * 100]), 'Arial', 8, X, Y + ImageHeight + 25, clGray, $FF, 0.0); finally Picture.Free; end; ProgressBar.Position := I + 1; Application.ProcessMessages; except on E: Exception do // Continue with next image on error LabelStatus.Caption := 'Error: ' + E.Message; end; end; // Save the PDF Pdf.SaveAs(SaveDialog.FileName); ShowMessage(Format('PDF created with %d pages!', [FImageList.Count])); finally ProgressBar.Visible := False; Pdf.Active := False; end; end; |
Ajout d'images à la liste.
|
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 |
procedure TFormMain.BtnAddImagesClick(Sender: TObject); var I: Integer; ListItem: TListItem; FileSize: Int64; FileSizeStr: string; begin if OpenPictureDialog.Execute then begin for I := 0 to OpenPictureDialog.Files.Count - 1 do begin FImageList.Add(OpenPictureDialog.Files[I]); // Add to ListView ListItem := ListView.Items.Add; ListItem.Caption := ExtractFileName(OpenPictureDialog.Files[I]); ListItem.SubItems.Add(OpenPictureDialog.Files[I]); // Full path // Get file size try FileSize := GetFileSizeHelper(OpenPictureDialog.Files[I]); if FileSize >= 1024 * 1024 then FileSizeStr := Format('%.1f MB', [FileSize / (1024 * 1024)]) else if FileSize >= 1024 then FileSizeStr := Format('%.1f KB', [FileSize / 1024]) else FileSizeStr := Format('%d bytes', [FileSize]); except FileSizeStr := 'Unknown'; end; ListItem.SubItems.Add(FileSizeStr); end; UpdateUI; LabelStatus.Caption := Format('Added %d image(s). Total: %d images', [OpenPictureDialog.Files.Count, FImageList.Count]); end; end; |
Utilisation de la méthode AddPicture.
La AddPicture La méthode accepte un objet, qui prend en charge divers formats d'image : TPicture objet, qui prend en charge divers formats d'image :
|
1 2 3 4 5 |
// Add picture with automatic sizing procedure TPdf.AddPicture(Picture: TPicture; X, Y: Double); // Add picture with specific size procedure TPdf.AddPicture(Picture: TPicture; X, Y, Width, Height: Double); |
Ajout direct d'images JPEG.
Pour les images JPEG, vous pouvez utiliser l'option optimisée. AddJpegImage méthode :
|
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 |
function AddJpegFromFile(const FileName: string): Boolean; var Pdf: TPdf; FileStream: TFileStream; begin Pdf := TPdf.Create(nil); try Pdf.CreateDocument; Pdf.Active := True; Pdf.AddPage(1, 595, 842); Pdf.PageNumber := 1; FileStream := TFileStream.Create(FileName, fmOpenRead); try // Add JPEG directly - more efficient than loading as TPicture Result := Pdf.AddJpegImage(FileStream, 50, 50, 495, 742); finally FileStream.Free; end; Pdf.SaveAs('output.pdf'); finally Pdf.Active := False; Pdf.Free; end; end; |
Prévisualisation des images sélectionnées.
|
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 |
procedure TFormMain.ListViewSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); begin if Selected and (Item <> nil) then begin LoadImagePreview(Item.SubItems[0]); // Full path end; end; procedure TFormMain.LoadImagePreview(const FileName: string); begin try if FileExists(FileName) then begin ImagePreview.Picture.LoadFromFile(FileName); ImagePreview.Proportional := True; ImagePreview.Stretch := True; LabelStatus.Caption := 'Preview: ' + ExtractFileName(FileName); end; except on E: Exception do begin ImagePreview.Picture.Assign(nil); LabelStatus.Caption := 'Error loading preview: ' + E.Message; end; end; end; |
Suppression et réorganisation des images.
|
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 |
procedure TFormMain.BtnRemoveSelectedClick(Sender: TObject); var I, RemovedCount: Integer; begin RemovedCount := 0; if ListView.SelCount > 0 then begin // Remove from back to front to avoid index issues for I := ListView.Items.Count - 1 downto 0 do begin if ListView.Items[I].Selected then begin FImageList.Delete(I); ListView.Items.Delete(I); Inc(RemovedCount); end; end; if (FImageList.Count = 0) or (ListView.Selected = nil) then ImagePreview.Picture.Assign(nil); UpdateUI; LabelStatus.Caption := Format('Removed %d item(s). Total: %d images', [RemovedCount, FImageList.Count]); end; end; |
Configuration de la boîte de dialogue.
|
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 |
procedure TFormMain.FormCreate(Sender: TObject); begin FImageList := TStringList.Create; // Setup ListView ListView.ViewStyle := vsReport; ListView.Columns.Add.Caption := 'File Name'; ListView.Columns.Add.Caption := 'Path'; ListView.Columns.Add.Caption := 'Size'; ListView.Columns[0].Width := 200; ListView.Columns[1].Width := 300; ListView.Columns[2].Width := 100; ListView.RowSelect := True; ListView.MultiSelect := True; // Setup dialogs OpenPictureDialog.Filter := 'Image Files|*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.tiff;*.tif|' + 'JPEG Files|*.jpg;*.jpeg|' + 'PNG Files|*.png|' + 'Bitmap Files|*.bmp|' + 'All Files|*.*'; OpenPictureDialog.Options := [ofAllowMultiSelect, ofPathMustExist, ofFileMustExist]; SaveDialog.Filter := 'PDF Files|*.pdf|All Files|*.*'; SaveDialog.DefaultExt := 'pdf'; UpdateUI; end; |
Cas d'utilisation.
- Albums photo. – Création d'albums PDF à partir de photos numériques.
- Numérisation de documents. – Combiner les images des pages numérisées en un seul fichier PDF.
- Création de portfolios. – Créer des fichiers PDF de portfolio à partir d'images.
- Archivage. – Convertir des collections d'images en fichiers PDF pour l'archivage à long terme.
- Génération de rapports. – Inclure des captures d'écran et des diagrammes dans les rapports PDF.
Conclusion.
La démonstration Image vers PDF montre comment PDFium VCL facilite la création de documents PDF professionnels à partir d'images. Grâce au dimensionnement automatique des pages, au redimensionnement intelligent et à la prise en charge de plusieurs formats d'image, vous pouvez créer des outils de conversion d'images vers PDF puissants.
La AddPicture Cette méthode gère la complexité de l'intégration d'images dans les pages PDF, tandis que vous vous concentrez sur l'interface utilisateur et le flux de travail de votre application.
Essayez le composant PDFium VCL. depuis loslab.com et commencez dès aujourd'hui à créer des fichiers PDF à partir d'images.