jehlenco
Goto Top

Stelle aus jpg auslesen via ocr und als pdf speichern mit dem ausgelesenen als Dateinamen

Moin Moin liebe Forumianer,

ich bastle derzeit immernoch an meinem Labelprogramm und stehe nun vor dem letzten großen Problem.
Um das ganze Projekt einmal kurz zu erläutern hier eine grobe Skizze:

[1]

- Ich habe einen Windows Server wo Microsoft Navision drauf läuft, dieser speichert Lieferscheine im PDF Format in einen Ordner namens "deliver". Der Dateiname hierbei ist die Lieferscheinnummer
- Auf dem Windows Server läuft ausserdem ein Programm von DPD das automatisiert und synchronisiert Labels aus Navision heraus erstellt. Bisher Druckt das Programm dann morgens munter die Labels und die Mitarbeiter im Lager müssen diese Dann ausschneiden zuweisen und in das Plastikfach am Karton vor den Lieferschein legen.

Zusammen mit einem Mitglied hier aus dem Forum habe ich ein Script basierend auf einer Batch Datei das folgendes macht:

ORDNER A (Alle Dateien sind PDF's und fortlaufenden Dateinamen, ( Lieferscheinnummer))
ORDNER B (Alle Dateien sind PDF's und fortlaufenden Dateinamen, ( Lieferscheinnummer gleich wie bei Ordner A)) ->

Hier wird nun Datei 001 aus Ordner A mit der Datei aus Ordner B 001 auf der ersten Seite Wassergemarkt. Sinn des ganzen ist es das oben auf dem Lieferschein das DPD Label ist und die Mitarbeiter den schein lediglich falten müssen und in das Plastik Fach am Karton stecken müssen ohne etwas auszuschneiden bzw zuzuweisen. Anschließend erstellt das Batch Script eine Log und zeichnet auf was sie getan hat und druckt die fertig erstellten Datei(en). Nach erfolgreichem Druck werden dann auch beide Ordner (A,B) gelöscht und die zusammengefügte Datei wird in einen Ordner mit Datum verschoben als Backup.

Nun aber zu meinem Problem, ich muss dem DPD Programm irgendwie sagen das er die Labels automatisiert speichert in einer Datei die den des Lieferscheins hat, dieser steht immer an der gleichen Stelle auf dem Label.
Mit GOCR oder so könnte mann das ganze auslesen und speichern via BAT oder?

Hier nochmal der Link zum aktuellen Script:

@echo off & setlocal


set temptxt=temp.txt
set tempordner1=%temp%\tempordner1.txt
set tempordner2=%temp%\tempordner2.txt
set ordner1=deliver
set ordner2=label
set ordner3=out
set success=log\log.txt
set printtxt=%temp%\print.txt
set printer="HIER BITTE DEN DRUCKERNAMEN EINGEBEN"  

TITLE Deliver Stamp Programm 
COLOR F0
ECHO.


REM ---------------------------------------
REM Abfrage ob sie wirklich Labeln moechten
REM ---------------------------------------



:LOOP
SET Choice=
SET /P Choice="Deliver Stamp Programm version 1.0 | Lieferscheine Labeln? ((Y)es/(N)o)"  

IF NOT '%Choice%'=='' SET Choice=%Choice:~0,1%  

ECHO.
IF /I '%Choice%'=='Y' GOTO ACCEPTED  
IF /I '%Choice%'=='N' GOTO REJECTED  
ECHO Bitte auswaehlen Y (fuer Ja) oder N (fuer Nein) !
ECHO.
GOTO Loop


REM ---------------------------------------
REM Abfrage negativ
REM ---------------------------------------



:REJECTED
ECHO Labeln abgebrochen
ECHO Sie koennen das Programm nun schliessen.
GOTO END


REM ---------------------------------------
REM Abfrage positiv
REM ---------------------------------------


:ACCEPTED
SET NEWLINE=^& echo.
ECHO Beginn des Labelns


REM ---------------------------------------
REM Konvertierung der PDFs
REM ---------------------------------------



for /f "delims=?" %%i in ('dir /b /a "%ordner1%\*.pdf"') do echo %%i>>%temptxt%  
Echo %temptxt% erstellt mit den in %ordner1% enthaltenen PDF Dateien


for /f %%i in (%temptxt%) do pdftk %ordner1%\%%i dump_data output %ordner1%\%%i.txt
Echo Für jede Datei in %temptxt% einen Datadump ausgeführt und in einer Datei gespeichert


REM ---------------------------------------
for /f %%x in (%temptxt%) do for /f "tokens=1* delims== " %%h in ('findstr /ib "NumberOfPages" %ordner1%\%%x.txt') do if %%i GTR 1 (pdftk %ordner1%\%%x cat 1 output %ordner1%\p1_%%x) else (if %%i == 1 copy %ordner1%\%%x %ordner1%\p1_%%x)  
Echo Datadump-Dateien durchsucht nach "NumberOfPages". Wenn die PDF mehr als eine Seite hat wird die Datei gesplitted, sonst nur kopiert wegen dem gleichen Namen  
REM ---------------------------------------


REM ---------------------------------------
for /f %%i in (%temptxt%) do if exist %ordner2%\%%i (pdftk %ordner1%\p1_%%i background %ordner2%\%%i output %ordner3%\temp_stamped_document_%%i && echo %%i erfolgreich erstellt am %date% %time% %ordner1%\%%i : %ordner2%\%%i - Cachedateien erfolgreich gelöscht.>>%success%) else (echo %%i error am %date% %time% %ordner1%\%%i : %ordner2%\%%i - Cachedateien behalten.>>%success%)
Echo Wenn die Datei aus %ordner1% in %ordner2% existiert sollen diese Dateien mit pdftk in eine temporäre Datei zusammengeführt werden und ein Eintrag in der Datei %susccess% erstellt werden.
REM ---------------------------------------


REM ---------------------------------------
for /f %%x in (%temptxt%) do for /f "tokens=1* delims== " %%h in ('findstr /ib "NumberOfPages" %ordner1%\%%x.txt') do if %%i GTR 1 (pdftk A=%ordner3%\temp_stamped_document_%%x B=%ordner1%\%%x cat A1 B2-end output %ordner3%\stamped_document_%%x && del %ordner3%\temp_stamped_document_%%x) else (ren %ordner3%\temp_stamped_document_%%x stamped_document_%%x)  
Echo Hier wird erneut die Anzahl der Seiten geprüft. Wenn diese größer als 1 ist wird mit pdftk die temporäre Datei, die aus der Datei aus %ordner1% und der Datei aus %ordner2% besteht, mit dem Rest, also ab Seite 2 der Datei aus %ordner1% zusammen geführt. Wenn die Seitenzahl 1 ist wird die temporäre Datei lediglich umbenannt.
REM ---------------------------------------

Echo.


REM ---------------------------------------
REM Abfrage positiv - Endnachricht
REM ---------------------------------------

ECHO Erfolgreich ausgefuehrt! Ihre Lieferscheine sind nun mit dem DPD Label versehen. Sie koennen das Programm nun schliessen.


for /f "delims=?" %%i in ('dir /b /a "%ordner1%\*.pdf"') do echo %%i>>%tempordner1%  
for /f "delims=?" %%i in ('dir /b /a "%ordner2%\*.pdf"') do echo %%i>>%tempordner2%  

REM for /f %%a in (%tempordner1%) do for /f %%i in (%tempordner2%) do if %%a==%%i del %ordner1%\%%a && del %ordner2%\%%i && del %ordner1%\p1_%%a && echo Die Dateien %ordner1%\%%a und %ordner2%\%%i wurden am %date% um %time% gelöscht>>%success%
for /f %%a in (%tempordner1%) do for /f %%i in (%tempordner2%) do if %%a==%%i (del %ordner1%\%%a && del %ordner2%\%%i) 


)

GOTO END

:END
for /f "delims=?" %%i in ('dir /b /a "%ordner3%\*.pdf"') do echo %%i>>%printtxt%  
for /f %%i in (%printtxt%) do start /B "Print" "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /t %ordner3%\%%i %printer% && ping -n 30 127.0.0.1 && Taskkill /IM AcroRd32.exe  

del %ordner1%\p1_*.pdf
del %ordner1%\*.txt
del %temptxt%
del %printtxt% 
del %tempordner1%
del %tempordner2%
md print_done\%date%
move %ordner3%\*.* print_done\%date%
ECHO.

Und hier ein weiteres Thema zu dem Script:

Zahl aus PDF auslesen und automatisch speichern


Über Hilfe wäre ich sehr Dankbar

Grüße

Maurice aus Celle

Content-ID: 238491

Url: https://administrator.de/contentid/238491

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Xaero1982
Xaero1982 19.05.2014 aktualisiert um 13:55:39 Uhr
Goto Top
HI,

was mir noch nicht ganz klar ist.
Wo landen denn die Labels? Ich dachte die landen direkt als PDF in dem Labelordner?
Werden die direkt gedruckt von diesem Programm?

Das würde aber bedeuten man muss den Druck abfangen? Bzw. der Druckauftrag wird doch sicher unter der Lieferscheinnummer laufen oder? Dann wäre es doch das einfachste diese mit dem PDF Creator abzufangen und automatisch in dem Ordner Label speichern zu lassen und dann wie gehabt mit dem Script...

Bekommst du raus wie die Druckaufträge heißen?

Gruß
PS: In "Unserem" Skript kannst du die Echo's unter den Forschleifen auch mal mit REM oder :: auskommentieren. Sind nur für dich zur Erklärung gedacht gewesen face-smile
rubberman
rubberman 19.05.2014 um 14:00:07 Uhr
Goto Top
Hallo jehlenco,

wenn die Dateien bereits die Lieferscheinnummer im Namen haben, warum dann mühsam versuchen dieselbe aus PDF oder Bilddateien zu extrahieren?

Grüße
rubberman
jehlenco
jehlenco 19.05.2014 um 14:13:59 Uhr
Goto Top
Also wir verwenden folgendes Programm: http://www.abcsoft.de/produkt1.htm

Dieses druckt die Lieferscheine direkt und speichert sie nicht. Es ist jedoch möglich die die Ausgabe auf PDF zu stellen, beispielsweise automatisiert mit http://de.pdfforge.org/ ... Aber dann heißt die Datei leider immernoch nicht wie die Lieferscheinnummer... daher dachte ich daran das Label als JPG auszugeben und via OCR Software (gocr) zu benennen. Wenn man die Datei speichern möchte im DPD Programm dann fragt er bei jeder Datei wie man sie nennen möchte.

Danke im Vorraus
Xaero1982
Xaero1982 19.05.2014 um 17:31:35 Uhr
Goto Top
Sorry, aber hier bin ich raus. Mit dieser "ocr" komm ich nicht klar. Wüsste auch nicht, wie ich da angeben soll, dass nur ein bestimmter Bereich gescannt werden soll. Bei mir scheitert es aber schon an der Eingangsdatei.

Das DPD Tool kann ich nicht testen.

Vielleicht hat ja noch jemand eine Idee.

Gruß
Xaero1982
Xaero1982 19.05.2014 um 17:48:51 Uhr
Goto Top
Gut, http://txpress.blogspot.de/2008/10/extract-text-from-scanned-images-of. ...

Anhand dieser Beschreibung hab ich mal den Lieferschein vom letzten mal umgewandelt und es ist wie ich es mir dachte unbrauchbar:

__cn   E__o___  0__    8_____________o__q___0oo_ln_?        r



ctul____J           ,   _      r?
_),cmn_,;_,nJ;_,,_J_!,?'__""-''__"''"   __  ^;0_o;_'0___,o_   _,s  

O  lI_6J'_I_Y___r_!     .0  C_  __    'l_'  
_  TL_4r__J_!1__3X_     __0 ___,,9o0,oD_n,L,__
0             ___a_0_,__ 0 _? o' ,_  
______l_u___n__        ____L_   o_   _0o__
_',__ J__'m__;^m         '_ v,s_9____ ___  _0o_'_                 ?  

tt_i__a______r_       o  __LJ0o _r __0  ' _                 Nh  
_ !J!_'-'-'^__mn-"i!'1w"'^"  _ _ _0'?_L_,  _    __           _  
t Toti107l_0tC)2l-98_-O     0_',,__ _^  ^ ?c,__          t        h  
_            ß  B   _   ,_  '_o         <-         r  
7            i  _-    ,0i,0D_,^
_             __00_^q0_.   00___       h_        _
C              ! ^     --_       NiJ
m            _                 _._       g
_            ,  __           _r;        fU
u          _ j_ _ _._ó              % _         0
_r ___               ' _        0  
l           __-j  9_         q  _  o,        g
_          __                    _        6
_
_  _   _    -c                  h;        _
______             0    r;,        hg
tm_      _  _j             0      _
_  __                    _!
_  Y_  M                     o.
_   _  __  _                     '         _  
_  _  U_  _
_  y  M_  _f             0              _
_   cæ_t  __    _         _              _g
_•  _  C_  _t    n                        g
M  _u'___  __t  _  N       a  
r_  ___  Y_  o  _       _
=_,d_-_  0h  c
O_ ____9,z    c_  _  _       _
___     0r  _>_0
_   C_    _____n
_.;_  t__  -y_-,_ë!;_       b  0__
_,tmj_2  to,___i!ô       0  ____

Ich denke das kannst du so vergessen ... schreibe den Hersteller der Software an und frage, ob man den Druck benennen kann mit dem Namen des Liferscheins.

Gruß
rubberman
rubberman 20.05.2014 um 11:32:57 Uhr
Goto Top
Hallo jehlenco.

Gibt es denn keine andere Möglichkeit den Lieferschein mit dem Ausdruck zu verheiraten?
In welcher Reihenfolge werden die Lieferscheine verarbeitet (Name, Datum etc.)? Anhand des Timestamps der Dateien sollte doch dann eine Zuordnung erfolgen können. Vielleicht kann man das Labelprogramm auch einzeln mit den Lieferscheinen füttern. Dann ist auch klar welches Label als Output kommt.

Grüße
rubberman
Xaero1982
Xaero1982 26.05.2014 um 16:40:14 Uhr
Goto Top
Hast du hier inzwischen eine Lösung gefunden?

Gruß
jehlenco
jehlenco 26.05.2014 um 16:46:27 Uhr
Goto Top
Leider nicht... das Projekt liegt derzeit auf "Eis", leider...

Es muss doch eine Lösung geben das irgendwie in der Art zu speichern?!
Xaero1982
Xaero1982 26.05.2014 um 18:06:22 Uhr
Goto Top
Also das mit dem Auslesen aus dem Druck kannst du vergessen.

Wie gesagt: Das beste wäre es wenn du den Hersteller anschreibst und fragst, ob es eine Möglichkeit gibt diesen Druck als PDF zu speichern bzw. der Dateiname vorgegeben wird in Form der Lieferscheinnummer.

Ich kann das Programm wie gesagt leider nicht testen, da mir zum Betrieb die entsprechenden Dateien fehlen.

Gruß