Lors du travail avec des PDF, il existe souvent des exigences pour redimensionner le contenu à diverses fins. Dans ce scénario, nous visons à réduire la taille de toutes les pages d'un PDF de 70%. Ce guide décrit les étapes nécessaires, répond aux questions pertinentes et fournit des solutions.
Déclaration du problème.
Nous devons réduire la taille de chaque page d'un document PDF de 70%, tout en conservant l'ordre original des pages. Cela nécessite :
- Le chargement du fichier PDF.
- La capture et le redimensionnement de chaque page.
- L'enregistrement des pages redimensionnées dans un nouveau fichier PDF.
Étapes pour atteindre l'objectif.
- Initialisation de l'environnement.
- Charger le fichier PDF original.
- Supprimez tout fichier de sortie existant pour éviter les conflits.
- Configurez les paramètres de mise à l'échelle :
- Définissez le facteur de mise à l'échelle (70 %).
- Calculez les marges nécessaires pour centrer le contenu mis à l'échelle.
- Traitez chaque page dans une boucle :
- Sélectionnez la première page.
- Capturez le contenu de la page.
- Créez une nouvelle page avec les dimensions originales.
- Dessinez le contenu capturé et mis à l'échelle sur la nouvelle page.
- Répétez l'opération pour toutes les pages.
- Enregistrez le nouveau fichier PDF et ouvrez-le.
- Enregistrez les pages modifiées dans un nouveau fichier PDF.
- Ouvrez automatiquement le nouveau fichier PDF pour examiner les résultats.
Implémentation du code.
Voici le code C# qui effectue les étapes ci-dessus.
|
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 |
private void button_Click(object sender, EventArgs e) { // Delete the old file if it exists to avoid any conflicts. File.Delete("newpages.pdf"); // Define variables for page dimensions and scaling factors. double pageWidth, pageHeight, horizBorder, vertBorder; double scaleFactor = 0.70; // 70% scaling reduction. int capturedPageId; int ret; // Load the original PDF document. PDFL.LoadFromFile("Pages.pdf"); PDFL.SetOrigin(1); // Get the total number of pages in the document. int numPages = PDFL.PageCount(); // Loop through all pages to process each one. for (int i = 1; i <= numPages; i++) { // Always select the first page as the pages get deleted after capture. PDFL.SelectPage(1); // Retrieve the dimensions of the current page. pageWidth = PDFL.PageWidth(); pageHeight = PDFL.PageHeight(); // Calculate the borders to center the scaled page content. horizBorder = pageWidth * (1.0 - scaleFactor) / 2; vertBorder = pageHeight * (1.0 - scaleFactor) / 2; // Capture the content of the first page. This action deletes the page from the document. capturedPageId = PDFL.CapturePage(1); // Create a new page with the original dimensions. int pageId = PDFL.NewPage(); PDFL.SetPageDimensions(pageWidth, pageHeight); // Draw the captured page content onto the new page with the specified scaling. ret = PDFL.DrawCapturedPage(capturedPageId, horizBorder, vertBorder, pageWidth - 2 * horizBorder, pageHeight - 2 * vertBorder); } // Save the modified document as a new PDF file. PDFL.SaveToFile("newpages.pdf"); // Open the newly created PDF file for review. System.Diagnostics.Process.Start(@"newpages.pdf"); |
Explication et justification
- Suppression de fichiers. S'assure que toute sortie précédente est effacée pour éviter les erreurs ou le contenu obsolète.
- Facteur d'échelle : Définie sur 0.70, cela réduit la taille du contenu à 70% de la taille originale.
- Calcul des bordures : Centre le contenu mis à l'échelle dans les dimensions originales de la page.
- Boucle de traitement des pages : Parcourt toutes les pages, en capturant, en mettant à l'échelle et en dessinant chaque page, une par une.
- Enregistrement et ouverture des fichiers : Finalise le nouveau document et l'ouvre pour que l'utilisateur puisse vérifier les modifications.
En suivant cette approche structurée, nous nous assurons que chaque page du fichier PDF est redimensionnée de manière cohérente et conserve son ordre d'origine, ce qui donne un document traité de manière professionnelle.
Édition Delphi :
Utilisez Delphi pour redimensionner les pages PDF à 70 % :
|
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 |
procedure TForm1.ButtonClick(Sender: TObject); var pageWidth, pageHeight, horizBorder, vertBorder: Double; scaleFactor: Double; capturedPageId, ret: Integer; numPages, pageId, i: Integer; begin // Delete the old file if it exists to avoid any conflicts. if FileExists('newpages.pdf') then DeleteFile('newpages.pdf'); // Define the scaling factor (70%). scaleFactor := 0.70; // 70% scaling reduction. // Load the original PDF document. PDFL.LoadFromFile('Pages.pdf'); PDFL.SetOrigin(1); // Get the total number of pages in the document. numPages := PDFL.PageCount(); // Loop through all pages to process each one. for i := 1 to numPages do begin // Always select the first page as the pages get deleted after capture. PDFL.SelectPage(1); // Retrieve the dimensions of the current page. pageWidth := PDFL.PageWidth(); pageHeight := PDFL.PageHeight(); // Calculate the borders to center the scaled page content. horizBorder := pageWidth * (1.0 - scaleFactor) / 2; vertBorder := pageHeight * (1.0 - scaleFactor) / 2; // Capture the content of the first page. This action deletes the page from the document. capturedPageId := PDFL.CapturePage(1); // Create a new page with the original dimensions. pageId := PDFL.NewPage(); PDFL.SetPageDimensions(pageWidth, pageHeight); // Draw the captured page content onto the new page with the specified scaling. ret := PDFL.DrawCapturedPage(capturedPageId, horizBorder, vertBorder, pageWidth - 2 * horizBorder, pageHeight - 2 * vertBorder); end; // Save the modified document as a new PDF file. PDFL.SaveToFile('newpages.pdf'); // Open the newly created PDF file for review. ShellExecute(0, 'open', 'newpages.pdf', nil, nil, SW_SHOWNORMAL); end; |
Édition VB.Net
Voici le code VB.Net pour effectuer cette tâche :
|
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 |
Private Sub button_Click(sender As Object, e As EventArgs) Handles button.Click ' Delete the old file if it exists to avoid any conflicts. If File.Exists("newpages.pdf") Then File.Delete("newpages.pdf") End If ' Define variables for page dimensions and scaling factors. Dim pageWidth, pageHeight, horizBorder, vertBorder As Double Dim scaleFactor As Double = 0.70 ' 70% scaling reduction. Dim capturedPageId, ret As Integer ' Load the original PDF document. PDFL.LoadFromFile("Pages.pdf") PDFL.SetOrigin(1) ' Get the total number of pages in the document. Dim numPages As Integer = PDFL.PageCount() ' Loop through all pages to process each one. For i As Integer = 1 To numPages ' Always select the first page as the pages get deleted after capture. PDFL.SelectPage(1) ' Retrieve the dimensions of the current page. pageWidth = PDFL.PageWidth() pageHeight = PDFL.PageHeight() ' Calculate the borders to center the scaled page content. horizBorder = pageWidth * (1.0 - scaleFactor) / 2 vertBorder = pageHeight * (1.0 - scaleFactor) / 2 ' Capture the content of the first page. This action deletes the page from the document. capturedPageId = PDFL.CapturePage(1) ' Create a new page with the original dimensions. Dim pageId As Integer = PDFL.NewPage() PDFL.SetPageDimensions(pageWidth, pageHeight) ' Draw the captured page content onto the new page with the specified scaling. ret = PDFL.DrawCapturedPage(capturedPageId, horizBorder, vertBorder, pageWidth - 2 * horizBorder, pageHeight - 2 * vertBorder) Next ' Save the modified document as a new PDF file. PDFL.SaveToFile("newpages.pdf") ' Open the newly created PDF file for review. Process.Start("newpages.pdf") End Sub |
Les versions VB.Net et Delphi du code permettent d'obtenir le même résultat que le code C# original, en veillant à ce que chaque page du fichier PDF soit réduite de 70 % tout en conservant l'ordre d'origine.