PowerShell/PDF

Révision datée du 23 janvier 2025 à 21:17 par Fylip22 (discussion | contributions) (Page créée avec « {{Sommaire}} Création d'un document PDF depuis une image ou une liste d'images, avec une page PDF par image. == ConvertToPdf == <source> function ConvertToPdf($files, $outFile) { <# .SYNOPSIS Conversion d'une ou plusieurs images au format JPEG en PDF et concaténation dans une seul fichier .DESCRIPTION .PARAMETER Source .PARAMETER Destination .EXAMPLE ConvertToPdf (Get-ChildItem *.jpg | Sort-Object Name) catalogue.pdf .EXAMPLE ConvertToPdf... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Création d'un document PDF depuis une image ou une liste d'images, avec une page PDF par image.

ConvertToPdf

function ConvertToPdf($files, $outFile) {
<#
.SYNOPSIS
    Conversion d'une ou plusieurs images au format JPEG en PDF et concaténation dans une seul fichier

.DESCRIPTION
    
.PARAMETER Source

.PARAMETER Destination

.EXAMPLE
    ConvertToPdf (Get-ChildItem *.jpg | Sort-Object Name) catalogue.pdf

.EXAMPLE
    ConvertToPdf (Get-ChildItem image*.jpg | Sort-Object Name) catalogue.pdf

.INPUTS
    Un ou plusieurs fichiers images (JPEG...)
.OUTPUTS
    Un fichier PDF

.NOTES
    NAME   : MaFonction.ps1
    AUTHOR : https://stackoverflow.com/users/2127371/makhdumi
    EMAIL  : 
    WWW    : https://stackoverflow.com/questions/41061219/convert-jpeg-to-pdf
    

    VERSION HISTORY:
        1.0    2022-06-25
        Initial Version

    TODO
        * 
#>
    Add-Type -AssemblyName System.Drawing
    $files = @($files)
    if (!$outFile) {
        $firstFile = $files[0] 
        if ($firstFile.FullName) { $firstFile = $firstFile.FullName }
        $outFile = $firstFile.Substring(0, $firstFile.LastIndexOf(".")) + ".pdf"
    } else {
        if (![System.IO.Path]::IsPathRooted($outFile)) {
            $outFile = [System.IO.Path]::Combine((Get-Location).Path, $outFile)
        }
    }

    try {
        $doc = [System.Drawing.Printing.PrintDocument]::new()
        $opt = $doc.PrinterSettings = [System.Drawing.Printing.PrinterSettings]::new()
        $opt.PrinterName = "Microsoft Print to PDF"
        $opt.PrintToFile = $true
        $opt.PrintFileName = $outFile

        $script:_pageIndex = 0
        $doc.add_PrintPage({
            param($sender, [System.Drawing.Printing.PrintPageEventArgs] $a)
            $file = $files[$script:_pageIndex]
            if ($file.FullName) {
                $file = $file.FullName
            }
            $script:_pageIndex = $script:_pageIndex + 1

            try {
                $image = [System.Drawing.Image]::FromFile($file)
                $a.Graphics.DrawImage($image, $a.PageBounds)
                $a.HasMorePages = $script:_pageIndex -lt $files.Count
            }
            finally {
                $image.Dispose()
            }
        })
        $doc.PrintController = [System.Drawing.Printing.StandardPrintController]::new()
        $doc.Print()
        return $outFile
    }
    finally {
        if ($doc) { $doc.Dispose() }
    }
}

Set-Location "C:\tmp\"
ConvertToPdf (Get-ChildItem *.jpg | Sort-Object Name) catalogue.pdf

Voir aussi

  •