我试图在Powershell中使用itextsharp(如果这是一个更好的选择,可以改为pdfsharp)来从图像中制作PDF。我已设法创建一个包含一个图像的PDF文件,但我不知道如何从文件夹中的所有图像创建一个。
由于这些图像的比例尺完全适合PDF,我还想设置比例,使其填满页面100%。那可能吗?
我不是经验丰富的Powershell用户,但这是我到目前为止所做的:
[System.Reflection.Assembly]::LoadFrom("C:\temp\itextsharp.dll")
$doc = New-Object iTextSharp.text.Document
$fileStream = New-Object IO.FileStream("C:\temp\output5.pdf", [System.IO.FileMode]::Create)
[iTextSharp.text.pdf.PdfWriter]::GetInstance($doc, $filestream)
$jpg = [iTextSharp.text.Image]::GetInstance( "c:\temp\horse.jpg" )
$doc.open()
$Doc.add($jpg);
$doc.close()
如果有人有任何想法,请告诉我,谢谢。
答案 0 :(得分:2)
您需要使用Get-ChildItem
来获取给定文件夹中的所有图片。然后,您需要在调用foreach
的图片上使用ForEach-Object
(有时会缩短为$doc.Add()
),但在调用$doc.NewPage()
之前也是如此。
以下代码显示全部关闭。一个常见的要求是每个页面的大小也适合图像,所以我也添加了它。我们为每个图片实例化System.Drawing.Bitmap
以获取尺寸,创建具有这些尺寸的iTextSharp Rectangle
,然后使用该尺寸通过$doc.SetPageSize()
设置页面尺寸。
为了让事情变得简单,我已将大部分变量移到顶部,您需要更新它们以满足您的需求。希望这些评论可以让你完全接受。
## Set various paths
$iTextSharpFilePath = "D:\DLLs\itextsharp.dll"
$imageFolderPath = "D:\images"
$pdfFilePath = "D:\temp.pdf"
## Load iTextSharp and System.Drawing
[System.Reflection.Assembly]::LoadFrom($iTextSharpFilePath)
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
## Get all of the images in the folder
## Change the filter if needed
$images = Get-ChildItem $imageFolderPath -Filter *.png
## Create our stream, document and bind a writer
$fileStream = New-Object System.IO.FileStream($pdfFilePath, [System.IO.FileMode]::Create)
$doc = New-Object iTextSharp.text.Document
$writer = [iTextSharp.text.pdf.PdfWriter]::GetInstance($doc, $filestream)
## Open the document for writing
$doc.Open()
## Remove all document margins
$doc.SetMargins(0, 0, 0, 0)
## Loop through each image in the folder
foreach($image in $images)
{
## Create a .Net image so that we can get the image dimensions
$bmp = New-Object System.Drawing.Bitmap($image.FullName)
## Create an iTextSharp rectangle that corresponds to those dimensions
$rect = New-Object iTextSharp.text.Rectangle($bmp.Width, $bmp.Height)
## Set the next page size to those dimensions and add a new page
$doc.SetPageSize( $rect )
$doc.NewPage()
## Add our image to the page
$doc.Add([iTextSharp.text.Image]::GetInstance( $image.FullName ));
## Cleanup
$bmp.Dispose()
}
## Cleanup
$doc.Close()
$doc.Dispose()
$writer.Dispose()