silent-daniel
Goto Top

Lösung gesucht: Dokument 2x drucken und als PDF speichern (Netzwerk)

Hallo,

ich suche ein Lösung für ein Problem:

CBird Registrierkasse soll den Beleg 2x Drucken und gleichzeitig als PDF auf ein Servershare ablegen \\1.2.3.4\Verkauf_Standort (über VPN verbunden)

Ich habe es mit PDF24 versucht (freeware)
Da kann ich ein einen Drucker erstellen, der das PDF abspeichert und druckt.

Aber halt nur 1x und wenn aber der Netzwerkshare nicht verfügbar ist (VPN / Internetprobleme), geht das Dokument verloren und muss nachgedruckt und gespeichert werden...
Ich könnte auf einen lokalen Ordner speichern, aber dann muss wieder ein extra Programm das auf das Share kopieren.

Kennt jemand eine einfache Lösung, darf auch gerne was kosten...

Gruß silent-daniel

Content-Key: 4811180422

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

Printed on: April 27, 2024 at 21:04 o'clock

Member: evgnbz
evgnbz Nov 30, 2022 at 11:06:48 (UTC)
Goto Top
ordner erstellen -> sowas wie https://rsync.samba.org/download.html anschmeißen und konfigurieren -> pdf in den ordner speichern
Member: manuel-r
manuel-r Nov 30, 2022 at 11:11:54 (UTC)
Goto Top
Mit zwei kleinen Scripts und PDF24 kein großes Problem
  • aus dem Programm per PDF24 ein PDF erstellen und in ein lokales Verzeichnis PDFerzeugt speichern
  • per Script dieses Verzeichnis überwachen und jedes PDF das dort gefunden wird 2x auf den Drucker ausgeben
  • nach dem Druck die Datei ins lokale Verzeichnis PDFgedruckt verschieben
  • mit dem zweiten Script in regelmäßigen Abständen prüfen ob das Zielshare erreichbar ist und wenn ja alle Dateien aus PDFgedruckt dahin verschieben

Manuel
Member: silent-daniel
silent-daniel Nov 30, 2022 at 11:12:26 (UTC)
Goto Top
Hallo, danke für den Input.

wie Drucke ich das Dokument 2x? Im Cbird kann ich das nicht einstellen. PDF24 habe ich es auch nicht gesehen.

screenshot 2022-11-30 121044

Grundsätzlich würde ich gerne weitere extra Programme vermeiden, bei 10 Standorten...
Member: silent-daniel
silent-daniel Nov 30, 2022 updated at 11:19:13 (UTC)
Goto Top
Zitat von @manuel-r:

Mit zwei kleinen Scripts und PDF24 kein großes Problem
  • aus dem Programm per PDF24 ein PDF erstellen und in ein lokales Verzeichnis PDFerzeugt speichern
  • per Script dieses Verzeichnis überwachen und jedes PDF das dort gefunden wird 2x auf den Drucker ausgeben
  • nach dem Druck die Datei ins lokale Verzeichnis PDFgedruckt verschieben
  • mit dem zweiten Script in regelmäßigen Abständen prüfen ob das Zielshare erreichbar ist und wenn ja alle Dateien aus PDFgedruckt dahin verschieben

Manuel

Das klingt genau nach dem was ich suche, kannst du evtl. Beispiele für das Script geben/verlinken? (ich will keine fertige Lösung, brauche aber Anhaltspunkte für das Einrichten, Danke!

also:

1. PDF24 speichert den Beleg in den Ordner c:\Kasse\PDFerzeugt
2. Script überwacht den Ordner und druckt jedes PDF 2x auf dem Drucker (evtl. kann man den Standarddrucker einstellen?)
3. Script verschiebt das PDF in den Ordner c:\Kasse\PDFgedruckt
4. ein 2. Script prüft \\1.2.3.4\Verkauf auf Erreichbarkeit und kopiert PDF von c:\Kasse\PDFgedruckt nach \\1.2.3.4\Verkauf +verschiebt das PDF nach c:\Kasse\PDFexportiert)

so richtig oder?

Gruß silent-daniel
Member: stefaan
stefaan Nov 30, 2022 at 11:31:00 (UTC)
Goto Top
Servus,

wie schon geschrieben: das PDF lokal speichern und in Echtzeit oder zu gewissen Uhrzeiten oder Ereignissen (PC-Start) das Verzeichnis syncronisieren. https://freefilesync.org kann beides.

Alternativ:
Einen virtuellen Druckertreiber finden, der einen Druckauftrag auf 2 Druckern (PDF24 und den Kassendrucker) druckt.

Cbird anhauen, dass sie eine Unterstützung für mehrere Drucker oder einen PDF-Export einbauen sollen. Andere Kassen können das von Haus aus (z.B.: https://www.ckvsoft.at dort kann automatisch ein PDF in einem Ordner ablegen). Bei 10 Standorten hast du ja auch schon ein bisserl Geld abgelegt.

Grüße, Stefan
Member: Crusher79
Crusher79 Nov 30, 2022 at 11:53:57 (UTC)
Goto Top
https://github.com/lomo74/mfilemon

Basis ist GS. Damit kannman virtuell Drucker anlegen.

PDFCreator oder auch PDF24 sollten sowas wie "Nach dem Druck" / "Vor dem Druck" haben. Damit kann man PDF übergeben und im Nachgang erneut ausdrucken/ Archivieren.

Bzw. wenn gewünscht auch PDF - wenn lesbar - in TXT umwandeln und die Metadaten ins Archiv schreiben. Alles schon mehrfach gemacht.

PDFcreator bis 1.3.x war auch die Server Version kostenlos. Server ist bei dir wegen instabilen Netz wohl eh nicht gefragt.
Member: manuel-r
manuel-r Nov 30, 2022 at 12:22:01 (UTC)
Goto Top
Das klingt genau nach dem was ich suche, kannst du evtl. Beispiele für das Script geben/verlinken? (ich will keine fertige Lösung, brauche aber Anhaltspunkte für das Einrichten.

Mit Powershell und SumatraPDF zum drucken geht das einwandfrei

Get-ChildItem -Path C:\PDFerzeugt\*.pdf liefert alle PDFs im Verzeichnis

Start-Process sumatra.exe -ArgumentList '-silent -print-to [DRUCKERPFAD] -print-settings "fit,[DRUCKANZAHL]" [PFADZUMPDF]' druckt ein PDF

Move-Item -Path C:\PDFerzeugt\Beleg12345.pdf -Destination C:\PDFgedruckt\Beleg1234.pdf verschiebt ein gedrucktes PDF in das zweite Verzeichnis


Das sollte als Anhaltspunkte erst mal reichen face-wink

Manuel
Member: evgnbz
evgnbz Nov 30, 2022 at 14:10:02 (UTC)
Goto Top
$from =C:\PDFerzeugt\
$into= Netzlaufwerkpfad
Copy-Item -Filter *.pdf -Path $from -Recurse -Destination $into
Member: silent-daniel
silent-daniel Nov 30, 2022 updated at 14:55:56 (UTC)
Goto Top
ich habe eine Powershell Script Datei erstellt:


#set variables
$PDFerstellt = 'C:\RegKasse\PDFerstellt'  
$PDFgedruckt = 'C:\RegKasse\PDFgedruckt'  
$PDFserver = '\\192.168.1.xxx\Daten\Verkauf_Standortxxx'  
$server = '192.168.1.xxx'  

#read all PDF Files
$pdffiles = Get-ChildItem -Path $PDFerstellt -Recurse -File

#print each file
foreach ($singlefile in $pdffiles)
{
    sleep -Milliseconds 100
    #Drucken auf Standarddrucker
    echo "Drucke 1x"  
    Start-Process -FilePath $singlefile.FullName -Verb Print -PassThru -WindowStyle Hidden | %{sleep 10;$_} | kill
    #Drucken 2. Beleg auf Standarddrucker
    echo "Drucke 2x"  
    sleep -Milliseconds 100
    Start-Process -FilePath $singlefile.FullName -Verb Print -PassThru -WindowStyle Hidden | %{sleep 10;$_} | kill
    echo "Verschieben nach $PDFgedruckt"  
    Move-Item -Path $singlefile.FullName -Destination $PDFgedruckt
}

If ((Test-Connection $server).PingSucceeded)
{
echo "Server erreichbar"  
sleep -Milliseconds 100
#copy PDFs to Server
echo "Kopieren auf Server"  
Copy-item  -Force -Recurse $PDFgedruckt\*.* -Destination $PDFserver
}

diese macht alles was ich will.
Wie lasse ich die alle 2-5 Sekunden laufen in der Aufgabenplanung laufen, damit es mir die PDFs ausdruckt und am Server speichert?

back-to-topwas können für Probleme am Code auftreten? ich pinge den Server aber weiß nicht ob das Share existiert...

Member: manuel-r
manuel-r Nov 30, 2022 at 15:08:01 (UTC)
Goto Top
ich pinge den Server aber weiß nicht ob das Share existiert

Test-Path ist dein Freund
Member: silent-daniel
silent-daniel Nov 30, 2022 updated at 18:32:00 (UTC)
Goto Top
Danke für die Hilfe!

gibt es eine Möglichkeit mit einem Befehl 2x zu Drucken, damit ich den Blödsinn nicht brauche?

sleep -Milliseconds 100
    #Drucken auf Standarddrucker
    echo "Drucke 1x"  
    Start-Process -FilePath $singlefile.FullName -Verb Print -PassThru -WindowStyle Hidden | %{sleep 10;$_} | kill
    #Drucken 2. Beleg auf Standarddrucker
    echo "Drucke 2x"  
    sleep -Milliseconds 100
    Start-Process -FilePath $singlefile.FullName -Verb Print -PassThru -WindowStyle Hidden | %{sleep 10;$_} | kill


Ich habe jetzt noch eingebaut, dass er je nach Gateway den Standort bestimmt und inddas richtige Serververzeichnis speichert, gibts da was zu optimieren?

mein ganzer code ist jetzt:

#set variables
$PDFerstellt = 'C:\RegKasse\PDFerstellt'  
$PDFgedruckt = 'C:\RegKasse\PDFgedruckt'  

$networkgateway = (Get-wmiObject Win32_networkAdapterConfiguration | Where {$_.IPEnabled}).DefaultIPGateway
echo $networkgateway
Switch ($networkgateway)
{
    "192.168.1.254" {$PDFarchive = '\\192.168.1.230\Daten\Verkauf_Standort1'}  
    "192.168.2.254" {$PDFarchive = '\\192.168.1.230\Daten\Verkauf_Standort2'}  
    "192.168.3.254" {$PDFarchive = '\\192.168.1.230\Daten\Verkauf_Standort3'}  
    "192.168.4.254" {$PDFarchive = '\\192.168.1.230\Daten\Verkauf_Standort4'}  
    "192.168.5.254" {$PDFarchive = '\\192.168.1.230\Daten\Verkauf_Standort5'}  
}
echo $PDFarchive

#read all PDF Files
$pdffiles = Get-ChildItem -Path $PDFerstellt -Recurse -File

#print each file
foreach ($singlefile in $pdffiles)
{
    sleep -Milliseconds 100
    #Drucken auf Standarddrucker
    echo "Drucke 1x"  
    #Start-Process -FilePath $singlefile.FullName -Verb Print -PassThru -WindowStyle Hidden | %{sleep 10;$_} | kill
    #Drucken 2. Beleg auf Standarddrucker
    echo "Drucke 2x"  
    sleep -Milliseconds 100
    #Start-Process -FilePath $singlefile.FullName -Verb Print -PassThru -WindowStyle Hidden | %{sleep 10;$_} | kill
    echo "Verschieben nach $PDFgedruckt"  
    Move-Item -Path $singlefile.FullName -Destination $PDFgedruckt -force
}

$ValidPath = Test-Path $PDFarchive -IsValid

If ($ValidPath -eq $True)
{
echo "Server erreichbar"  
sleep -Milliseconds 100
#copy PDFs to Server
echo "Kopieren auf Server"  
Copy-item  -Force -Recurse $PDFgedruckt\*.* -Destination $PDFarchive
}
Else
{
echo "Server Fehler"  
}
echo "Schleife abgeschlossen"  
Member: Crusher79
Crusher79 Nov 30, 2022 at 20:54:57 (UTC)
Goto Top
https://www.lvbprint.de/gsbatchprint/

GhostScript. Interessant sind die Paramter: -I Schacht1 -I Tray1

Sucht selber nach Schacht1 oder Tray1.

https://kb.foxit.com/hc/en-us/articles/360040240152-Ways-to-view-the-com ...


Kopieren könntest du in Drucker hinterlegen - Anzahl der Kopien. Machen viele so. Also Kopie des Spoolers erstellen und z.B. "PDF_BatchPrint" nennen. Dort die Anzahl der Kopien hinerlegne.

gsbatchprint kann zumindest bei Schachtwahl helfen. FoxitReader lässt auch die Angabe eines Spoolers zu.


Kopien im Spooler zu hintrelegen hat auch einen Geschwindkeitsvorteil. FoxitReader nur mal erwähnt, falls es Probleme beim Drucken gibt. Denn was über GUI gut geht, funktioniert auch via Batch. Was die Aufbereitung der PDF angeht. Da hat man dann seltejn Überraschungen.

gsbatchprint kann auch Ordner runterdrucken. Hier wäre es mögich viele Aufträge auf einmal zu generieren. Wenn die Dateien zumindest alle schon vorliegen.
Member: silent-daniel
silent-daniel Dec 01, 2022 at 06:36:35 (UTC)
Goto Top
okay danke!

und wie lasse ich am besten das Script laufen?
Taskplaner? Was stelle ich am besten ein?
es soll alle 2-5 sekunden ausgeführt werden.

gruß silent-daniel
Member: Crusher79
Crusher79 Dec 01, 2022 at 07:04:38 (UTC)
Goto Top
@silent-daniel ich steige wegen den Kommentaren grad nicht ganz durch.

Lass mich einen Schritt zurück gehen - oder mehrere. Wir nutzen selber mfilemon auf den POS. Es soll normal gedruckt werden und dann etwas passieren. Batchlauf hängt von der Gesamtsituation ab. Ob man sagt man archiviert 20 Uhr alle Re. des Tages, erstellt begeleitend Dateien für die Verschlagwortung etc.

Im Tagesgeschäft sind Verzörgerungen nervig. Trigger würde ich hier mit der "Drucksoftware" verbinden. Sagen was nach Ausgabe von XY passieren soll. XY kann ein PDF sein oder wie mfilemon nur die Daten die dann mit GS weiterverarbeitet werden.

Warum das mfilemon? PDFCreator ist eigentlich sehr gut. Du lässt PDF erstellen und kannst Pfad und Namen mit in ein Script geben, was danach sofort läuft. Wo ist das Problem? PDFCreator hat Bloatware an Bord. Da tillen teils beim Installieren Trendmciro etc. schon aus! Ist nervig.

mfilemon hatten wir genommen, um da Ruhe reinzubringen. GhostScript ist mächtig. Bei Grafike etc. kann man vieles einstelleln. Im POS Umfeld drucken wir doch nur Texte. Da klappt die Übergabe sehr gut. Man kann dort eine Batch angeben.

gswin64c.exe  -dBATCH -sDEVICE=pdfwrite -dNOPAUSE -sPAPERSIZE=a5 -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel=1.4 -sDEVICE=pdfwrite -r600 -sOutputFile="c:\temp\test22.pdf" -  

Wir sind hier in einer Batch. Pfad zur PDF ist bekannt. Heisst also du kansnt nach GS sofort weiter machen! PDF mit Batch oder Powershell verschieben und an Drucker übergeben. Da wir als Trigger eine NACHHER Aktion ausführen, passiert das unverzüglich.

https://superuser.com/questions/1467919/print-to-pdf-with-ghostscript-ou ...

Es sieht etwas wild aus, aber du codest ja eh. Der Vorteil ist das "User Command". Du bist komplett frei. Mfilemon wird als Spooler installiert und liegt der Kasse als Drucker vor.


Warum nun oben das Foxit und gsbatchprint Zeug? Drucken können viele. Bei komplexen PDF tillen mitunter die Anwendungen aus. Idee ist, was Foxit klar darstellt und über die GUI druckt, kommt auch über Batch so raus.

gsbatchprint war nur erwähnt wegen Schachtsteuerung. Normal ist die sträke alle gesammeltne PDF zu drucken. Liegt nur 1x in den Ordner geht das natürlich auch. "Schacht1" oder "Tray1" find ich neckisch. Wenn du im Treiber schon die Anzahl der Kopien drin hast, kannst du ohne KopieDruckerA, KopieDruckerB, Kopie DruckerC eingreifen.

# Config erzeugen
 #cd "c:\fl-system\" 
 #rundll32 printui.dll,PrintUIEntry /Ss /n "FSP" /a "PrinterConfigFSP.dat" 

(cd "c:\fl-system\");  
(rundll32 printui.dll,PrintUIEntry /q /Sr /n "$NewPrinterName" /a "PrinterConfigFSP.dat" r u);  

Warum das schon wieder? Mitunter hat man ja Ausfhilfen die weit über 60 J sind oder MA die langeweile haben. Ich schaumal nach den Drucker...

Mit printui kannst du die Vorgabe für den Spooler sichern und wiederherstellen. Hier wäre es z.B. Nur Schwarz-weiss und 2x Kopien. Je nach Wunsch halt. Melde sich der User an, wird der Drucker an der Kasse "zurückgesetzt". Bzw. kannst du über die dat die Einstellungen deployen. Gut wenn man an die 100 POS o.ä. hat.

Drucker zu härten ist schwer. Die Anwender sollen ja Dinge einstellen können und müssen es ja uach. Mit printui kann man aber die Vorgaben immer wiedermachen. Dei Parameter oben sichern bei Ricoh ALLES und spielen es wieder ein. Auch die "erweiterten" Einstellungen Steg/ Bund, Skalierung etc.

printui dient nur einen gewissen "Schutz", bzw. die wiederherstellen deiner Vorgeaben.


PDFCreator, PDF24 sind gut. Wenn du noch Bock hast schau dir mal mfilemon an! Ein Blick lohnt sich.
Member: silent-daniel
Solution silent-daniel Dec 06, 2022 at 07:37:30 (UTC)
Goto Top
Ich habe es jetzt so gemacht, dass wenn der PDF24 Druckt, das Script ausführt.
PDF24 kann jeden Befehl nach dem Drucken ausführen...


Das Script wurde aber nochmal angepasst, wenn der Beleg Tagesbeleg, Monatsbeleg oder Jahresabschluss heißt, wird er nur einmal gedruckt und auf das richtige Laufwerk gespeichert.
screenshot 2022-12-06 083657
Member: Crusher79
Crusher79 Dec 07, 2022 at 20:37:15 (UTC)
Goto Top
Doch ok. Solange es kostenlos bleibt.

Ich habe bei den Tools immer die Angst, dass die eines Tages die Funktionen nur gegen cash anbietet. Bzw. mit Adware gespickt die AV durcheinander bringen.

Aber solche Problelme gibt es ja bei vielen Projekten face-wink Linux als Printserver wäre da ggf. Quelloffener. Aber auch wieder mit Kanonen auf Spatzen geschossen. Passt doch soweit.