这里使用到 itextsharp dll, 需要的可以在我的CSDN下载:
$dllpath = "\\cnfuoapp130\rpa_folder\kdc_rpa\Jayden\RC_Expense\Rc_Submit_IBS\Library";
$sourcePDF = "C:\Users\jtang20\Desktop\splitPdf\20200912_SLE-BEL-S-20-003_Rachel Zheng12345678.pdf";
$outputFolder = $sourcePDF.Substring(0,$sourcePDF.LastIndexOf("\") + 1) + "split"; # "C:\Users\jtang20\Desktop\splitPdf\split";
$combineFolder = $sourcePDF.Substring(0,$sourcePDF.LastIndexOf("\") + 1) + "combine"; # "C:\Users\jtang20\Desktop\splitPdf\combine";
Function splitPDF(){
if(Test-Path $outputFolder){
[void](Remove-Item -Path $outputFolder -Recurse);
}
Start-Sleep 1;
[void](New-Item -Path $outputFolder -ItemType Directory);
$path = "$dllpath\itextsharp.dll";
[Void][System.Reflection.Assembly]::LoadFile($path);
$reader = New-Object iTextSharp.text.pdf.PdfReader($sourcePDF);
$pCount = $reader.NumberOfPages;
$startPos = 1;
for($i = 1;$i -le $pCount; $i++){
if($i -le $pCount){
$output = $outputFolder + "\" + $i + ".pdf";
$fileStream = New-Object System.IO.FileStream($output, [System.IO.FileMode]::OpenOrCreate);
$document = New-Object iTextSharp.text.Document;
$pdfCopy = New-Object iTextSharp.text.pdf.PdfCopy($document, $fileStream);
$document.Open();
$pdfCopy.AddPage($pdfCopy.GetImportedPage($reader, $i));
$newFile = [System.IO.FileInfo]::new($output);
#Write-Host $newFile.Length;
$pdfCopy.FreeReader($reader);
$document.Close();
Start-Sleep 0.2;
$fileStream.Close();
}
}
$reader.Close();
Start-Sleep 0.2;
return $pCount;
}
Function MergePdf(){
if(Test-Path $combineFolder){
[void](Remove-Item -Path $combineFolder -Recurse);
}
Start-Sleep 1;
[void](New-Item -Path $combineFolder -ItemType Directory);
$sList = "";$returnFP = "";
$lengthCount = 0;
for($i = 1;$i -le $pCount; $i++){
# FileInfo
$FI = [System.IO.FileInfo]::new("$outputFolder\$i.pdf");
$lengthCount = $lengthCount + $Fi.Length;
if($lengthCount -gt (9 * 1024 * 1024)){
if([String]::IsNullOrEmpty($sList)){
$sList = $i.ToString();
}else{
$sList = $sList + "|$i";
}
$lengthCount = $Fi.Length;
}else{
if([String]::IsNullOrEmpty($sList)){
$sList = $i.ToString();
}else{
$sList = $sList + ",$i";
}
}
}
$iCount = 0;
$sFileName = $sourcePDF.Substring($sourcePDF.LastIndexOf("\") + 1);
if($sFileName.Length -gt 43){
$sFileName = $sFileName.Substring(0,43);
}else{
$sFileName = $sFileName.Substring(0,$sFileName.LastIndexOf("."));
}
$reader = New-Object iTextSharp.text.pdf.PdfReader($sourcePDF);
foreach($pageColl in $sList.Split("|")){
$path = "$dllpath\itextsharp.dll";
[Void][System.Reflection.Assembly]::LoadFile($path);
$sFP = "$combineFolder\$sFileName`_" + "$iCount.pdf";
if($returnFP -eq ""){
$returnFP = $sFP;
}else{
$returnFP = $returnFP + "," + $sFP;
}
$fileStream = New-Object System.IO.FileStream(($sFP), [System.IO.FileMode]::OpenOrCreate);
$document = New-Object iTextSharp.text.Document;
$pdfCopy = New-Object iTextSharp.text.pdf.PdfCopy($document, $fileStream);
$document.Open();
foreach ($objPage in $pageColl.split(",")){
#$sFileName" + "_" +
$pdfCopy.AddPage($pdfCopy.GetImportedPage($reader, $objPage));
}
$pdfCopy.FreeReader($reader);
$document.Close();
Start-Sleep 0.2;
$fileStream.Close();
$iCount++;
}
$reader.Close();
#>
return $returnFP;
}
$pCount = splitPDF;
#Write-Host $pCount;
$sAllFile = MergePdf;
Write-Output $sAllFile;