PowerShell/PDF
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 Conversion d'une ou plusieurs images au format JPEG en PDF et concaténation dans une seul fichier. Cela fonctionne avec une seule image ou plusieurs images. Pour la génération de PDF, se base sur l'imprimante virtuelle "Microsoft Print to PDF". Il faut donc que cette imprimante virtuelle existe pour que le script fonctionne. .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: 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 * .LINK https://stackoverflow.com/users/2127371/makhdumi https://stackoverflow.com/questions/41061219/convert-jpeg-to-pdf #> 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) DocumentFinal.pdf