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