PDFsharp & MigraDoc Foundation
https://forum.pdfsharp.net/

Reordering pages after merge
https://forum.pdfsharp.net/viewtopic.php?f=2&t=3653
Page 1 of 1

Author:  xfirebg [ Thu Aug 31, 2017 6:30 am ]
Post subject:  Reordering pages after merge

Hello i created merge script with PdfSharp. How can reverse the merge order in the end like : page 3, page 2 and page 1, etc. ?

Code:
Add-Type -Path C:\assemblies\PdfSharp.dll                       
$MYName =  Get-Date -format "MMMM yyyy"


Function Merge-PDF {           
    Param($path, $filename)                       
           
    $output = New-Object PdfSharp.Pdf.PdfDocument           
    $PdfReader = [PdfSharp.Pdf.IO.PdfReader]           
    $PdfDocumentOpenMode = [PdfSharp.Pdf.IO.PdfDocumentOpenMode]                       
           
    foreach($i in (gci $path *.pdf -Recurse)) {           
        $input = New-Object PdfSharp.Pdf.PdfDocument           
        $input = $PdfReader::Open($i.fullname, $PdfDocumentOpenMode::Import)           
        $input.Pages | %{$output.AddPage($_)}           
    }                       
           
    $output.Save($filename)           
}

Merge-PDF -path c:\fso -filename C:\WEB\Apache24\htdocs\WEBDams\Data\CHQ\HQ\1\$MYName.pdf
Write-Host "Файлът е създаден и качен на сайта!"
Start-Sleep -s 4

Author:  Thomas Hoevel [ Thu Aug 31, 2017 7:51 am ]
Post subject:  Re: Reordering pages after merge

Hi!

Use a for loop that runs from pages.Count - 1 down to 0 and add the pages in the reverse order right from the start.

Author:  xfirebg [ Thu Aug 31, 2017 8:00 am ]
Post subject:  Re: Reordering pages after merge

Thomas Hoevel wrote:
Hi!

Use a for loop that runs from pages.Count - 1 down to 0 and add the pages in the reverse order right from the start.

:)
I dont understand very well. Can i use the foreach in this line somehow:
Code:
$input.Pages | %{$output.AddPage($_)}

Author:  Thomas Hoevel [ Thu Aug 31, 2017 8:28 am ]
Post subject:  Re: Reordering pages after merge

The name is PDFsharp because it was developed with C#. I am not a PowerShell guru.

In C# I can use "Reverse()" if I want to stick to foreach:
Code:
var reversedList = pdfRenderer.PdfDocument.Pages.PagesArray.Reverse();
foreach (var page in reversedList)
{
    // ...
}

I don't know how that translates to PowerShell. OTOH PowerShell may have other options I am completely unaware of.

Author:  xfirebg [ Thu Aug 31, 2017 1:45 pm ]
Post subject:  Re: Reordering pages after merge

Thomas Hoevel wrote:
The name is PDFsharp because it was developed with C#. I am not a PowerShell guru.

In C# I can use "Reverse()" if I want to stick to foreach:
Code:
var reversedList = pdfRenderer.PdfDocument.Pages.PagesArray.Reverse();
foreach (var page in reversedList)
{
    // ...
}

I don't know how that translates to PowerShell. OTOH PowerShell may have other options I am completely unaware of.


I just figured out. In Powershell you can use the Sort-Object Aliases - "sort". Like this:
Code:
gci $path *.pdf -Recurse|sort -Descending

Thank you for finding time to help. :)

Final code:

Code:
Add-Type -Path C:\assemblies\PdfSharp.dll                       
$MYName =  Get-Date -format "MMMM yyyy"


Function Merge-PDF {           
    Param($path, $filename)                       
           
    $output = New-Object PdfSharp.Pdf.PdfDocument           
    $PdfReader = [PdfSharp.Pdf.IO.PdfReader]           
    $PdfDocumentOpenMode = [PdfSharp.Pdf.IO.PdfDocumentOpenMode]                       
           
    foreach($i in (gci $path *.pdf -Recurse|sort -Descending)) {           
        $input = New-Object PdfSharp.Pdf.PdfDocument           
        $input = $PdfReader::Open($i.fullname, $PdfDocumentOpenMode::Import)         

        for ($index = 0; $index -lt $input.PageCount; $index++) {
            $page = $input.Pages[$index]
            $null = $output.AddPage($page)

        }      
    }                       
           
    $output.Save($filename)           
}

Merge-PDF -path c:\fso -filename C:\WEB\Apache24\htdocs\WEBDams\Data\CHQ\HQ\1\$MYName.pdf
Write-Host "Файлът е създаден и качен на сайта!"
Start-Sleep -s 4

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/