Generischer CMD Code

Aus Helper
(Weitergeleitet von Generischer Code)
Zur Navigation springen Zur Suche springen
Mantiseinträge
 Keine
Systemtyp
 25 
Eintrittsinvarianz
JA


Beschreibung

Besteht aus einem Serverjob OJOHZDOGenerischerCode. Ermöglicht dem Benutzer ein Skript ausführen zu lassen.

Der Pfad zum Batchskript muss vollständig angegeben werden.

Zusätzlich werden [Quellordner] sowie [Zielordner] hierbei ersetzt.

Der Rückgabewert bei positiver/erfolgreicher Skriptausführung beachtet neu (04.09.2024) keine Gross-/Kleinschreibung mehr! Bei der Eingabe des Parameters muss nicht mehr unterschieden werden -> ok = Ok = OK = oK

Essentielle Felder

 HZ_SKRIPT     Das auszuführende Skript.  z.B 'c:\skripts\multipagepdf.bat [Quellordner] [Zielordner]'
 HZ_SKRIPTOK   Resultierender Wert bei positiver Durchführung

Pane im Produktionsauftrag (FHK_Maske)

Batchfiles

Einige Serverjobs bedienen sich externer Applikationen um ihre Aufgaben erledigen zu können.

Da eine API meist fehlt, oder noch nicht über Omnis implementiert wurde, steuern wir solche externen Anwendungen gelegentlich über Windows Batch Skripte.

Damit wir eine Übersicht zu den verwendeten Skripten haben, wollen wir diese hier in dieses Dokument aufnehmen und kurz umschreiben. Wir gehen dabei nicht auf die Anwendungen ein, diese werden in einem separaten Kapitel beschrieben.

Multipage TIFF Dateien aus TIFF Dateien erzeugen

Erzeugt in der Sortierreihenfolge der Dateienamen nach aus allen gefundenen TIF Dateien im Quellordner mit der Endung *.tif eine Multipage TIFF Datei im Zielordner mit dem Namen 0001.tif.

Skript
multipage_tiff.bat [Quellordner] [Zielordner]
Rückgabewert für erfolgereiche Ausführung = Ok

Multipage PDF Dateien aus TIFF-Dateien erzeugen

TIF —> create JPG —> create multipage PDF

Ein For Loop über eine Liste aller TIF Bilddateien aus einem Ordner ruft ImageMagick auf und übergibt den Namen der Datei und die Parameter für die Umwandlung. Die JPG werden im Quellordner der TIF Dateien erzeugt.

Kommt es bei der Umwandlung zu JPG zu Fehlern, bricht das Skript ab und löscht die bereits erstellen JPG Dateien wieder. Der Name der fehlerverursachenden TIF Datei wir in errfile.txt im Quellordner gespeichert.

Wurden alle Dateien umgewandelt wird im zweiten Schritt aus diesen wieder mit ImageMagick ein PDF erstellt. Das PDF wird im Zielpfad gespeichert.

Bei Fehlern beim Erzeugen der PDF Datei werden alle bisher erzeugten Dateien gelöscht und der Name der verursachenden JPG Datei in errfile.txt im Quellordner gespeichert.

Skript - Multipagepdf.bat Quellpfad Zielpfad (Standard JPG Qualität = 70)
 ::parameter für Pfade setzten
 set pathfrom=%1
 set pathto=%2
 
 :convert_to_jpg, 
 FOR /F "tokens=*" %%G IN ('dir /b %pathfrom%\*.tif') DO (
 magick mogrify -format jpg -quality 70 %pathfrom%\%%G 2>%pathfrom%\errlog.txt
 if errorlevel 1 (
 set err=1
 ECHO %%G >> %pathfrom%\errfile.txt	) )
 If "%err%"=="1" ( 
 del %pathfrom%\*.jpg 
 echo Fehler beim JPG erstellen 
 exit	 )
 
 :create_pdf
 magick convert -define registry:temporary-path=d:\tmp %pathfrom%\*.jpg %pathto%\0001.pdf 2>>%pathfrom%\errlog.txt
 if errorlevel 1 (
 del %pathfrom%\*.jpg
 del %pathto%\0001.pdf
 echo Fehler beim PDF erstellen
 exit	)
 :end
 del %pathfrom%\*.jpg
 del %pathfrom%\*.txt
 echo Ok
 exit

Alternativ dazu gibt es das Skript multipagepdf100.bat. HIer wird die Qualität des JPG auf 100% gesetzt

Alternativ dazu gibt es das Skript multipagepdf75.bat. HIer wird die Qualität des JPG auf 75% gesetzt

Alternativ dazu gibt es das Skript tiffzip2pdf.bat. Hier werden die Tiff-Dateien mit Zip-Kompression in das PDF eingesetzt. Es findet keine zwischenzeitliche Umwandlung in JPG statt.

Alternativ dazu gibt es das Skript multipagepdf2k40.bat. Hier werden die Tiff-Dateien in JPEG2000 Dateien umgewandelt mit Qualitätseinstellung 40.

Alternativ dazu gibt es das Skript multipagepdf_lonza_backq.bat. Ist identisch mit multipagepdf.bat, es ist jedoch stabliler hinsichtlich Sonderzeichen in den Pfadnamen (Wie z.B. Klammern () ). Der aktuelle Name wurde gewählt, weil es z.Z. nur für einen Auftrag mit Klammern im Produktionspfad erstellt wurde, jedoch noch nicht endgültig als Ersatz für multipagepdf.bat freigegeben wurde.

Multipage PDF-Dateien aus JPG-Dateien erzeugen

Mit diesem Skript wird die Orientierung in den EXIF nicht berücksichtigt:

Skript - Multipagepdf2.bat Quellpfad Zielpfad

In den EXIF gespeicherte Orientierung berücksichtigen (= Bild automatisch drehen):

Skript - Multipagepdf2o.bat Quellpfad Zielpfad

Umwandeln von TIFF-Dateien in JPG2000-Dateien

Skript - tif2jp2.bat Quellpfad Zielpfad

Umwandeln von TIFF-Dateien in JPG-Dateien

Skript - tif2jpg.bat Quellpfad Zielpfad

Multipage PDF-Dateien aus JPEG2000 Dateien erzeugen

Da beim erzeugen des PDF die JPEG2000 Dateien dekomprimiert und ggf. nochmals neu komprimiert werden, empfiehlt es sich beim konvertieren von Ausgangsmaterial (z.B. TIF Dateien) zu JPEG2000, verlustfrei vor zu gehen.
Es ist zwar von minimsten Verlusten auszugehen, wenn das Material zwei mal mit der gleichen kompressionrate verarbeitet wird.
Da ein möglicher zusätzlicher Verlust an Bildinformation (und auch Rechenzeit) so vermeidbar ist, wäre dies der optimalste Weg.

Skript
Multipagepdf2k40.bat [pfadVon] [pfadZu] [density] [quality]



::parameter für Pfade setzten

set pathfrom=%~1
set pathto=%~2
set density=%3
::set resample=%4
set quality=%4

IF NOT DEFINED pathfrom exit
IF NOT DEFINED pathto exit
IF NOT DEFINED density set density=300
IF NOT DEFINED quality set quality=40

:convert_to_jpg
FOR /F "tokens=*" %%G IN ('dir /b %pathfrom%\*.tif') DO (

magick "%pathfrom%\%%G" -format jp2 -quality 0 "%pathfrom%\%%G.jp2" 2>%pathfrom%\errlog.txt

if errorlevel 1 (
pause
set err=1
ECHO %%G >> %pathfrom%\errfile.txt
)
)

If "%err%"=="1" ( 
del %pathfrom%\*.jp2 
echo Fehler beim JP2 erstellen
exit
)

:create_pdf
magick -define registry:temporary-path=d:\tmp %pathfrom%\*.jp2 -density %density% -resample %density%x%density% -compress JPEG2000 -quality %quality% %pathto%\0001.pdf 2>>%pathfrom%\errlog.txt
if errorlevel 1 (
del %pathfrom%\*.jp2
del %pathto%\0001.pdf
echo Fehler beim PDF erstellen
exit
)

:end
del %pathfrom%\*.jp2
del %pathfrom%\*.txt
echo Ok
::exit

Beim umwandeln zum Format JPEG2000 kann die DPI Auflösung nicht gesteuert werden, bzw. wird immer auf 72DPI gerechnet und daraus die Dokumentengrösse abgeleitet in cm in die Datei eingebettet.
Dies hat zur Folge, dass die Dokumente welche z.B. von 300DPI runtergerechnet wurden, anschliessend im PDF zu gross (Dokumentgrösse) erscheinen falls die gewünschten Einstellungen nicht korrekt gesetzt werden.
Mit der Option -Density kann beim erzeugen des PDF's der DPI Wert angegeben werden. Mit der Option -resample kann das eingehende Format auf das Ausgangsformat umgerechnet werden.

-density 200 -resample 98x98
-density 300 -resample 300x300

Beim konvertieren zu PDF werden die JPEG2000 Datei ohne Paramter nicht komprimiert eingebettet was ggf. zu grossen PDF Dateien führt.
Deshalb geben wir folgende Parameter mit:

-compress JPEG2000 -quality 0 (verlustfrei)
-compress JPEG2000 -quality 40 (gutes verhältniss kompression / verlust)


JPG2000 zu PDF Dateien verbinden

Skript - multipagepdf2k.bat source destination density quality

Das Skript wandelt jpg2000 Dateien zu PDFs. Parameter:

  • source
  • destination
  • density: Die Auflösung, Standard ist 300 dpi
  • quality: Die Qualität, Standard ist 40

Zwei PDF Dateien zu einer verbinden und umbenennen

Das Skript kann nur gestartet werden, wenn [Quellordner] und [Zielordner] mitgegeben wurden.

Beachte: Die Deckblätter müssen zwingend auf '_Beleg.PDF' lauten.


Skript - mergePDF.bat source destination
 @echo off
 ::Randbedingungen: Es darf nur 2 Files im Ordner haben, der Beleg muss Namentlich vor der Zielpdf im Dateisystem sein
 ::Wurden 2 Parameter übergeben?
 
 IF [%1] == [] (exit -1)
   IF [%2] == [] (exit -1)
 :: Vars setzten
 set source=%1
 set destination=%2
 set fixedPDF=_Beleg.pdf
 set pdftkPath=C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe
 
 ::Existiern diese beiden Ordner?
 IF NOT EXIST %source% (exit -2)
 IF NOT EXIST %destination% (exit -3)
 
 ::Source so setzten, dass alle PDF's im Verzeichnis aufgelistet werden
 set sourceSearch=%source:~0,-1%
 set sourceSearch=%sourceSearch%\*.pdf
 
 ::Name des 2. PDF's herausfinden
 for /f %%a IN ('dir /b /s "%sourceSearch%"') do (
 set targetPDF=%%a
 GOTO mergePDF )
 
 :mergePDF
 ::Pfad des Beleg PDF
 set firstPDF=%source:~0,-1%
 set firstPDF=%firstPDF%\%fixedPDF%
 
 ::Pfad des Output PDF's festlegen
 for %%b in (%targetPDF:\= %) do set targetPDFName=%%b
 set destinationPath=%destination:~0,-1%
 set destinationPath=%destination%\%targetPDFName%
 
 ::PDF mergen
 "%pdftkPath%" A=%firstPDF% B=%targetPDF% cat A B output %destinationPath% 2> err.txt
 for /f %%i in (err.txt) do (exit -4)
 echo ok
 exit

Erste Seite eines PDF Dokumentes in ein TIF Bild extrahieren

Skript
pdf2tif.bat [Quellordner] [Zielordner] [density (default 300)]

Kopiert alle Dateien ausser PDFs von [Quellordner] nach [Zielordner].

Erwartet genau eine PDF Datei in [pfadVon] und extrahiert daraus die erste Seite in ein TIF mit dem selben Namen wie das ursprungs PDF unter [Zielordner].

Sind mehrere PDF's vorhanden, wird alphabetisch geordnet das erste davon genommen.

Bekannte Fehlermeldungen

2500 - Die Skriptdatei wurde nicht gefunden. Prüfe ob die Datei am genannten Pfad vorhanden ist, oder ob der Korrekte Pfad/Name zu dem Skript im Arbeitsschritt eingerichtet wurde.

2501 - Bei der Ausführung des Skriptes sind Fehler aufgetreten. Siehe weitere Infos im Fehlertext.

Image Magick - Parameter und Optionen

 -auto-orient (Berücksichtigt EXIF Orientierungsinformationen und dreht das Bild entsprechend.)