Search code examples
powershellpdfprintingitextextract

Print pdf files on different printers depending on their content


I want to print .pdf-files on different printers - depending on their content. How can I check whether a specific single word is present in a file? To queue through a folder's content I've build the following so far:

Unblock-File -Path S:\test\itextsharp.dll
Add-Type -Path S:\test\itextsharp.dll
$files = Get-ChildItem S:\test\*.pdf
$adobe='C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\Acrobat.exe'
foreach ($file in $files) {
  $reader = [iTextSharp.text.pdf.parser.PdfTextExtractor]
  $Extract = $reader::GetTextFromPage($File.FullName,1)
  if ($Extract -Contains 'Lieferschein') {
    Write-Host -ForegroundColor Yellow "Lieferschein"
    $printername='XX1'
    $drivername='XX1'
    $portname='192.168.X.41'
  } else {
    Write-Host -ForegroundColor Yellow "Etikett"
    $printername='XX2'
    $drivername='XX2'
    $portname='192.168.X.42'
  }
  $arglist = '/S /T "' + $file.FullName + '" "' + $printername + '" "' + $drivername + " " + $portname
  start-process $adobe -argumentlist $arglist -wait
  Start-Sleep -Seconds 15
  Remove-Item $file.FullName
}

And for now I got 2 problems with it:

1st: Add-Type -Path itextsharp.dll gives me an error.

Add-Type: One or more types in the assembly cannot be loaded. Get the LoaderExceptions property for more information. In line: 2 character: 1

I've read that it might be due to the file being blocked. There is no information about that in the properties though. And the Unblock-File comand and the start doesn't change/solve anything.

After using $error[0].exception.loaderexceptions[0] I get the information that BouncyCastle.Crypto, Version=1.8.6.0 is missing. Unfortunatelly I can't find any sources for that yet.

2nd: Will if ($Extract -Contains 'Lieferschein') work as I intend? Will it check for the phrase after the Add-Type gets loaded successfully?

Alternatively: There's also the possibility to make it depend from the content's format. One type of the files has the size of DIN A4 for example. The other one is smaller than that. If there's an easier way to check for that, you'd make me happy aswell.

Thank you in advance!


Solution

  • 1st:

    After finding the correct version (1.8.6) on nuget.org the Add-Type commands work perfectly. As expected I didn't even need the unblock command as it was not marked as a blocked file in the properties. Now the script starts with:

    Add-Type -Path 'c:\BouncyCastle.Crypto.dll'
    Add-Type -Path 'c:\itextsharp.dll'
    

    2nd

    Regarding the check-queue: I just had to replace -contains with -match in my if clause.

    if ($Extract -Contains 'Lieferschein')