fips81
Goto Top

Printjobs mit PDF komprimieren für VPN-Übertragung

Hallo!

Hier eine Lösung für diejenige, denen das Drucken vom Terminalserver zum Client über eine DSL-Leitung zu lange dauert.

  1. EDIT: 09.05.07
    • print.bat und pdfspooler.bat verbessert
  2. EDIT: 10.05.07:
    • der Ordner Spooler auf dem Server liegt nun standardmäßig auf Laufwerk C
    • mehrere Erklärungen in die Bat-Dateien eingefügt
    • Ordner C:\PDFPrint\PDFSPOOLER auf dem Client hat nun den richtigen Namen
  3. EDIT: 12.05.07:
    • rename.bat hinzugefügt
    • Benutzer kann nun weitere Dokumente drucken, obwohl der Kopiervorgang auf den Client noch aktiv ist
    • print.bat wird nun unsichtbar ausgeführt (Haken unter Befehlszeile in PDFPrint)
    • Protokollierung hinzugefügt

Die verwendeten Programme sind Freeware:

FreePDF und Ghostscript (letzeres braucht FreePDF um zu funktionieren)
pdfp8.zip (nicht pdfp.zip) (von dem Autor chicks, einfach googeln)
DirMonitor (selbe Seite wie pdfp8)
Adobe Acrobat Reader (ich habe Version 8 genommen)

Beschreibung der Funktion:

Wenn man auf dem Remote-Rechner, bzw. Terminal-Server etwas ausdruckt, wird mittels FreePDF eine PDF-Datei erzeugt und eine Batch aufgerufen, die die Anzahl der Kopien bzw. Duplex-Optionen mit in den Dateinamen einbringt. Anschließend wird diese PDF in ein freigegebenes Verzeichnis auf den Client kopiert. DirMonitor erkennt dies und startet auch wieder eine Batch, die den Dateinamen auswertet und den Druckvorgang mit den entsprechenden Parametern einleitet.

Das System läuft sehr gut und sehr schnell. Man spart enorm viel Bandbreite ein, wenn man Texte mit Grafiken bzw. Bilder druckt.

Installation und Anpassung:

Server

  • Ghostscript und FreePDF auf dem Server installieren
  • FreePDF starten
  • in den Einstellungen (STRG+S) ein Profil für jeden Benutzer anlegen; für Duplex und mehrere Drucker braucht man weitere Profile

e30a4fd23f87fd8983734108dddaf058-1

  • Befehlszeile wie auf Bild unten anpassen
      • Parameter 1 = Name der PDF-Datei (nicht verändern)
  • Parameter 2 = IP-Adresse des Clients auf dem gedruckt werden soll (anpassen)
  • Parameter 3 = Name des freigegebenen Ordners auf dem Client (nicht verändern)
  • Parameter 4 = Name des Druckers wie er auf dem Client im Windows angezeigt wird; muss in Anführungszeichen stehen (anpassen)
  • Parameter 5 = DUPLEX = Platzhalter zur Erklärung (nicht verändern)
  • Parameter 6 = Wert für Duplex-Druck: 1 = kein Duplex, 2 = lange Seite, 3 = kurze Seite (anpassen)

  • Haken bei Programm unsichtbar ausführen nicht vergessen!

0ebe93e9da8a32afda3af01a1fa64a20-befehlszeile

  • Dialog wie auf folgendem Bild einstellen

5f5c3c26a45d735e8d063553cc84caac-dialog

  • Alle gewünschten Profile erstellen, speichern und dafür eigene Drucker anlegen

491972d0ed1951994906dec6af34305c-drucker

  • auf Laufwerk C: den Ordner Spooler erstellen

  • c:\spooler\print.bat erstellen:

@echo off
REM Diese Datei ist nur dafür gut, dass FreePDF direkt wieder schliesst.

start c:\spooler\rename.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
exit

  • c:\spooler\rename.bat erstellen:

@echo off

REM Folgender Block entfernt in der Variable %1 die Anführungszeichen und die Endung .pdf

set pdfname2=%1
set pdfname=%pdfname2:"=%  
for /f "tokens=1,2,3,4 delims=\" %%i in ("%pdfname%") do set pdfname2=%%l  
set pdfname=%pdfname2:.pdf=%
for /f "tokens=1 delims=" %%i in (%4) do @set printername=%%i  
for /f "tokens=1,2,3 delims=:," %%i in ("%time%") do @set printtime=%%i%%j%%k  
set pdffilename=#%printername%#%6#%username%#%printtime%#ID%random%#%pdfname%
pushd c:\spooler\temp

REM Hier wird die Datei im TEMP Ordner erst mal umbennant, damit sie einen Druck von einem
REM anderen Nutzer, der eine Datei mit dem selben Namen ausdrucken will, nicht blockiert.

ren %1 "%pdffilename%"  
mode con cols=32 lines=4
title PDFPrint

REM Abfrage der Kopien. Dann wird nochmal umbenannt, damit die Anzahl auch im Dateinamen steht.

echo.
echo  Wie viele Kopien moechten Sie?
echo.
set /p copy=
if "%copy%"=="" @set copy=1  
set newpdffilename=#%printername%#%6#%copy%#%username%#%printtime%#ID%random%#%pdfname%
ren "%pdffilename%" "%newpdffilename%"  
popd
start /min c:\spooler\pdfspooler.bat "%newpdffilename%" %2 %3  

REM Die 3. Bat wird aufgerufen, damit der Kopiervorgang im Hintergrund abläuft.

exit

  • c:\spooler\pdfspooler.bat erstellen:

@echo off
title WIRD GEDRUCKT...
mode con cols=27 lines=4
echo.
echo  FENSTER NICHT SCHLIESSEN!

REM Hier werden wieder die Anführungszeichen entfernt.

set pdffilename2=%1
set pdffilename=%pdffilename2:"=%  
pushd c:\spooler\temp
copy /Z %1 "\\%2\%3\%pdffilename%.pdf"  

REM Für Fehlerprotokollierung REM in FOLGENDER Zeile entfernen.
REM if %errorlevel% equ 1 (echo %date% %time% %username% %pdffilename% >> c:\spooler\log\error.log)

del %1 /f /s /q
popd

REM Fuer Protokollierung aller Druckvorgaenge REM in FOLGENDER Zeile entfernen.
REM echo %date% %time% %pdffilename% >> c:\spooler\log\spool.log

REM Die Variablen %2 und %3 sind IP-Adresse und freigegebener Ordner auf dem Client.
REM Sie stammen von der Befehlszeile in FreePDF und werden von rename.bat und print.bat mit übergeben.

exit

  • Ordner c:\spooler\TEMP und c:\spooler\Log erstellen und für vollen Schreibzugriff sorgen

  • Bat-Datei erstellen und per Taskplaner am besten nachts kurz vor der Datensicherung ausführen lassen, oder in den Autostart-Ordner verknüpfen (damit bei einem Programmabsturz das Verzeichnis trotzdem clean bleibt):

@echo off
del c:\spooler\temp\*.* /f /s /q

Client

  • Adobe Acrobat Reader installieren, starten und AGB bestätigen
  • auf Laufwerk C: den Ordner PDFPrint erstellen
  • den Ordner C:\PDFPrint\PDFSPOOLER (ohne $-Zeichen) erstellen und unter dem Namen PDFSPOOLER$ (mit $-Zeichen) mit vollem Schreibzugriff für die Benutzer freigeben
  • PDFP.exe aus pdfp8.zip in Ordner PDFPrint extrahieren
  • DirMonitor.exe in den Ordner PDFPrint extrahieren
  • c:\pdfprint\dirmonitor.exe -install ausführen

  • c:\pdfprint\dirmonitor.ini erstellen:

[directories]
c:\pdfprint\pdfspooler="c:\pdfprint\pdfprint.bat"  

  • c:\pdfprint\dmstart.bat erstellen und in den Autostart-Ordner verknüpfen oder kopieren:

@echo off
del c:\pdfprint\pdfspooler\*.* /f /s /q
del c:\pdfprint\dirmonitor.log /f /s /q
net start sdirmon

  • dmstart.bat ausführen damit DirMonitor gestartet wird

  • c:\pdfprint\pdfprint.bat erstellen:

@echo off
REM Folgende Schleife liest aus dem Dateinamen die entsprechenden Parameter für den Druck.
for /f "tokens=1,2,3,4 delims=#" %%i in (%1) do @set printername="%%j"&set duplex=%%k&set copy=%%l  

REM Diese Schleife entfernt C:\PDFPrint\PDFSPOOLER aus dem Dateinamen damit die Datei mit ren umbenannt
REM werden kann.
for /F "tokens=1,2,3,4 delims=\" %%i in (%1) do @set pdffilename="%%l"  
pushd c:\pdfprint\pdfspooler

REM Der Abschnitt check wartet ab, bis die Datei vollständig auf dem Client angekommen ist.
:check
ping 127.0.0.1 -n 1
ren %pdffilename% %pdffilename%
if not exist %1 goto:eof
if %errorlevel% equ 0 (goto print) else (goto check)


:print

REM Hier wird bewusst auf die Option -c von pdfp.exe verzichtet, da sie nicht richtig funktioniert.

for /l %%i in (1,1,%copy%) do (c:\pdfprint\pdfp.exe -p %printername% -d %duplex% %1)
del %1 /f /s /q
popd

  • zur Sicherheit erstellen wir auch auf dem Client eine kleine Datei Namens reset.bat und verknüpfen sie auf den Desktop, falls etwas abgestürzt ist, oder klemmt (habe ich zum Glück nie benutzen müssen face-wink ):

@echo off
taskkill /f /im acrord32.exe /fi "USERNAME eq System"  
taskkill /f /im pdfp.exe /fi "USERNAME eq System"  
taskkill /f /im cmd.exe /fi "USERNAME eq System"  
del c:\pdfprint\pdfspooler\*.* /f /s /q


Anwendung

Drucker auswählen und auf drucken klicken. Anzahl der Druckaufträge eingeben
face-smile

1ab3d479bc94f262c3b0a3f6ab5fd52e-kopien

Ach ja, die Order Spooler und PDFPrint auf Server und Client müssen direkt im Wurzelverzeichnis liegen!
Bisher auch nur mit Windows XP und 2000 am laufen, darunter funktioniert es, denke ich, nicht.

Anzumerken ist noch, dass man auch problemlos Dateien ausdrucken kann, deren Dateiname die sonderbarsten Zeichen enthält und auch bis zu 255 Zeichen lang sein kann.

Ich freue mich auf Lob, Kritik und Verbesserungen!
Mfg, Michael

Content-ID: 58559

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

Torben
Torben 10.05.2007 um 12:07:54 Uhr
Goto Top
Hallo,
Das wäre ja wirklich eine geile Sache wenn es nur funktionieren würde. Man wäre somit nicht mehr auf kommerzielle Produkte wie ThinPrint angewiesen.
Leider hab das das ganze ca. 3 mal probiert jedoch klappt das nicht, irgendwie wird nicht auf dem Clientdrucker gedruckt. Wenn ich die "print.bat" Datei sehe meine ich die Forumformatierung mittels copy/paste klappte bestimmt nicht, denn in einer Batch Datei das "#" Zeichen ?

Und irgendwie kommt man etwas durcheinander im Profileditor steht unter "Aktion nach PDF Erstellung" > "..... PDFSPOOLER$.
In deiner Anleitung heist es jedoch

Zitat:
den Ordner C:\PDFPrint\PDFSPOOLER$ erstellen und mit vollem Schreibzugriff für die Benutzer freigeben

Na heist der Ordner nun "PDFSPOOLER" oder "PDFSPOOLER$" oder meinst du der Ordner sollte freigegeben werden und das Share sollte "PDFSPOOLER$" heisen um es als administratives verstecktes Share zu deklarieren ?
Denn in den Batch Dateien lautet die Pfadangebe ständig "c:\...\pdfspooler" und "PDFSPOOLER$" vs. "PDFSPOOLER" sind zwei unterschiedliche Verzeichnisse.

Super wäre es wenn du zu jeder Zeile eine gute Beschreibung geben könntest so wäre mir das debugging leichter gefallen wo bei mir die Säge klemmt. Irgendwie ging der Druckauftrag zwar an Free PDF und die Batch Datei die mich nach der Anzahl der Seiten fragt kam auch, nur leider wars das dann. Ich meine die "print.bat" und "pdfspooler.bat" sollten noch überarbeitet werden.

Es wäre wirklich super wenn das Teil zuverlässig laufen würde. Wie stellst du überhaupt sicher das die gepoolte PDF Datei fertig konvertiert ist um diese dann zu drucken und wozu soll "ping 127.0.0.1 -n 1" in der "pdfprint.bat" ?

Außerdem ist der Inhalt der Variablen "pdfname2" nicht "c:\spooler", sondern "c:\spooler\temp\print.bat" man sollte doch die Datei "print.bat" nach "c:\spooler" kopieren !?
Und muss der Zieldrucker auf dem Client nicht freigegeben sein ?, denn "pdfp.exe" braucht doch als UNC Pfadangabe die IP des Client und Freigabe Namen des Druckers !?
Mfg
Fips81
Fips81 10.05.2007 um 15:40:29 Uhr
Goto Top
Hi!

Das wäre ja wirklich eine geile Sache wenn es nur funktionieren würde.

Normalerweise funktioniert es prima, mal sehen wo bei Dir der Fehler liegt.

irgendwie wird nicht auf dem Clientdrucker gedruckt. Wenn ich die "print.bat" Datei sehe meine ich die Forumformatierung mittels copy/paste klappte bestimmt nicht, denn in einer Batch Datei das "#" Zeichen ?

Das mit dem #-Zeichen stimmt durchaus so. Es darf halt kein solches Rautezeichen im Benutzer- oder Druckernamen vorhanden sein, sonst kommt die Batch auf dem Client durcheinander. Ich sage ja, für Verbesserungen bin ich dankbar. ;)

Und irgendwie kommt man etwas durcheinander im Profileditor steht unter "Aktion nach
PDF Erstellung" > "..... PDFSPOOLER$.
In deiner Anleitung heist es jedoch
den Ordner C:\PDFPrint\PDFSPOOLER$ erstellen und mit vollem Schreibzugriff für die Benutzer freigeben
Na heist der Ordner nun "PDFSPOOLER" oder "PDFSPOOLER$" oder meinst du der Ordner sollte freigegeben werden und das Share sollte "PDFSPOOLER$" heisen um es als administratives verstecktes Share zu deklarieren ?

Genau wie Du gesagt hast, ist es. Bin zwar alles mehrmals durchgegangen, aber dieser Fehler ist mir nicht aufgefallen.

Der Ordner auf dem Client heist natürlich C:\PDFPrint\PDFSPOOLER ohne $-Zeichen. Im Freigabename muss man das Dollarzeichen dazufügen, damit die Freigabe versteckt wird. Quasi so: PDFSPOOLER$

Ich bitte um Verzeihung und korrigiere es! face-smile

Super wäre es wenn du zu jeder Zeile eine gute Beschreibung geben könntest so wäre mir das debugging leichter gefallen wo bei mir die Säge klemmt.

Okay, mache ich heute abend.

Irgendwie ging der Druckauftrag zwar an Free PDF und die Batch Datei die mich nach der Anzahl der Seiten fragt kam auch, nur leider wars das dann. Ich meine die "print.bat" und "pdfspooler.bat" sollten noch überarbeitet werden.

Sobald die Datei, die am Client im Ordner C:\PDFPrint\PDFSPOOLER ankommt etwa folgendes Format hat: #HP LaserJet 4L#1#1#Michael#141040#ID9288#Testseite.pdf liegt der Fehler nicht am Server.

Wie stellst du überhaupt sicher das die gespoolte PDF Datei fertig konvertiert ist um diese dann zu drucken und wozu soll "ping 127.0.0.1 -n 1" in der "pdfprint.bat" ?

ping 127.0.0.1 -n 1
REM Ping nur dafür gut, damit die Schleife eine Sekunde Pause bekommt und nicht die komplette
REM Rechnerleistung für die Batch draufgeht

ren %pdffilename% %pdffilename%
REM Hiermit stelle ich sicher, dass die Datei komplett übertragen ist. Es wird solange versucht die
REM Datei in den selben Namen umzubenennen bis es funktioniert. D.h. wenn es geklappt hat,
REM ist die Datei vollständig übertragen und die Rename-Funktion meldet Errorlevel 0.

if not exist %1 goto:eof
REM Diese Zeile prüft, ob die Datei noch vorhanden ist und noch nicht mit del gelöscht wurde.
REM Macht auf den ersten Blick keinen Sinn, aber wenn PDFP den Acrobat Reader startet,
REM macht es eine neue cmd.exe auf, die dann in der Ping-Schleife festhängen würde.

if %errorlevel% equ 0 (goto print) else (goto check)
REM Solange ren Errorlevel 1 meldet, läuft die Schleife.


Außerdem ist der Inhalt der Variablen "pdfname2" nicht "c:\spooler", sondern "c:\spooler\temp\print.bat" man sollte doch die Datei "print.bat" nach "c:\spooler" kopieren !?

Richtig, die Dateien print.bat und pdfspooler.bat auf dem Server müssen direkt im Ordner Spooler liegen und nicht im Ordner Temp

In der Variable pdfname2 darf und kann eigentlich garnichts von der print.bat stehen.

set pdfname2=%1
REM Wird gefüllt von FreePDF. Der Inhalt kann entweder so aussehen:
REM E:\Spooler\TEMP\Testseite.pdf
REM oder
REM "E:\Spooler\TEMP\Testseite von Michael.pdf"  
REM Das Problem ist, dass FreePDF Dateinamen ohne Leerzeichen ohne Anführungszeichen ausgibt.

set pdfname=%pdfname2:"=%  
REM Hier werden die Anführungszeichen entfernt, falls diese vorhanden sind.

for /f "tokens=1,2,3,4 delims=\" %%i in ("%pdfname%") do set pdfname2=%%l  
REM Aus     E:\Spooler\TEMP\Testseite.pdf     mach     Testseite.pdf

set pdfname=%pdfname2:.pdf=%
REM Aus     Testseite.pdf      mach     Testseite      (hier wird also nur die Endung .pdf entfernt)

Und muss der Zieldrucker auf dem Client nicht freigegeben sein ?, denn "pdfp.exe" braucht doch als UNC Pfadangabe die IP des Client und Freigabe Namen des Druckers !?

Nein, muss nicht! Der Drucker in der Befehlszeile von FreePDF muss lediglich genau so heißen wie der Drucker auf dem Client im Windows sichtbar ist. Also wenn der Drucker auf dem Client 10.0.0.5 Kyocera Mita von Sepp Meier heißen würden, dann sieht die Befehlszeile in FreePDF so aus:
e:\spooler\print.bat %pdfFile 10.0.0.5 PDFSPOOLER$ "Kyocera Mita von Sepp Meier" DUPLEX 1

Also ändere erst mal den Ordner C:\PDFPrint\PDFSPOOLER$ nach C:\PDFPrint\PDFSPOOLER und gibt ihn unter PDFSPOOLER$ frei und überprüfe die Befehlszeile im Profil von FreePDF.

Ich bin gespannt, ob es dann funktioniert. Heute Abend füge ich ein paar Erklärungen hinzu und ändere das Tutorial so ab, dass der Ordner Spooler auf dem Server standardmäßig auf Laufwerk C liegt.

Mit freundlichem Gruß, Michael
circassia
circassia 11.05.2007 um 10:37:55 Uhr
Goto Top
Hallo Freunde,

vorerst mal einen großen Dank an den Torbe für seine Mühe und auch an Michael, der sich mit der Sache stark auseinandergesetzt hat face-smile

Ich bin leider noch kein Guru...deshalb werde ich mit einer kleinnen dummen Machbarkeitsfrage anfangen...

In einer Druckerei gibt es Client1 (Grafiker) und den client2(der Rechner, der am Canon colorpass drucker) angeschlossen ist....

Dh, dieses tutorial hat die Funktion, dass die Grafik von Client1 an Client 2 komprimiert geschickt und somit bandbreite gespart wird?

danke vielmals face-smile
Torben
Torben 11.05.2007 um 11:12:34 Uhr
Goto Top
Hallo Fips81,
Ja nun gehts es erst mal, wirklich cool nur gibt es noch einige Problem die wären:

Wenn ich mehr als einen Druck eingebe dann wird zwar in "C:\pdfprint\pdfspooler" die *.pdf erstellt aber eben nur eine ! Irgendwie hängt die ganze Sache dann und die eben erstellte *.pdf Datei wird durch den Dienst "sdirmon" völlig exklusiv geschützt. Es gibt keine Möglichkeit diese zu löschen und die anderen Drucke ich hab nicht nur 1x sondern Bsp. 2x gewählt sehe ich kurz das sie erstellt werden jedoch danach werden diese gleich gelöscht. Es ist danach nicht mehr möglich *.pdf Dokumente im Ordner "C:\pdfprint\pdfspooler" zu erhalten. Um das erste *.pdf Dokument zu löschen reicht es nicht den "sdirmon" Dienst zu stoppen > die *.pdf Datei kann ich einfach nicht löschen. Erst wenn ich "sdirmon" deaktiviere den Rechner neu starte kann ich die *.pdf Datei löschen und kann von neuen beginnen.
Die *.pdf Datei geht nicht zu löschen da der Acrobat Reader im Hintergrund das Dokument irgendwie offen hält und der Acrobat Reader ist einfach nicht killbar !
Wenn diese Hürde noch genommen wird wäre das super dann könnte man es vielleicht als Produktiv einsetzen.

Noch eins habe ich festgestellt wenn ich sehr schnell aus zwei unterschiedlichen Anwendungen oder aus der gleichen ganz egal auf drucken gehe kommt das ganze irgendwie durcheinander und Fazit ist, es kommt immer nur eine *.pdf Datei im Share PDFSPOOLER$ an obwohl ich sehe das sich FreePDF 2x öffnet und ich werde auch 2x mal nach der Anzahl der Drucke gefragt nur einer geht immer ins Nirvana. Mach ich das ganze etwas zeitverzögert klappt es jedoch. Stellt sich mir die Frage ob "dirmon" damit auch klar kommt wenn Bsp. 20 WTS User gleichzeitig ein Dokument in das Spooler Share schmeissen.

Mfg
Torben
Torben 11.05.2007 um 12:39:31 Uhr
Goto Top
Hallo Freunde,

vorerst mal einen großen Dank an denTorbe für seine Mühe und auch an Michael, der sich mit der > Sache stark auseinandergesetzt hat face-smile
Ich bin leider noch kein Guru...deshalb werde ich mit einer kleinen dummen Machbarkeitsfrage anfangen...
In einer Druckerei gibt es Client1 (Grafiker) und den client2(der Rechner, der am Canon colorpass drucker) angeschlossen ist....
Dh, dieses tutorial hat die Funktion, dass die Grafik von Client1 an Client 2 komprimiert geschickt und somit bandbreite gespart wird?

danke vielmals face-smile

Ja das Dokument was auch immer du von Client1 drucken willst kannst du wenn dein Druckerprofil so angelegt wurde das das Ziel Client2 ist dorthin kopieren lassen. Hintergrund bei Terminalservern ist das max. glaub ich 5 Drucker für Terminaldienste einrichtbar sind hat man mehr pech, weis nicht wie es mit Citrix aussieht. Verbindet sich ein WTS User auf dem TS kann er den Drucker selbst auswählen und da diese lokal sind wohl beliebig viele anlegen. Druckaufträge brechen jeder Verbindung den Hals da sie ungemein gross sind. Darum gibt es Hersteller wie die ThinPrint Engine die den eigentlichen Druckauftrag auf dem WTS in eine PDF Datei wandeln und dann diese viel kleinere Datei Bsp. über eine VPN Verbindung zur Filiale senden. Das ganze kannst du auch auf dein Prinzip verwenden. Das Tool Dirmon ist im Prinzip der Wächter, kommt eine Datei in dem Spoolerverzeichnis an druckt es diese Bsp. gleich auf dem gewünschten Drucker aus.
Fazit durch hast weniger Overhead deiner Bandbreite Bsp. 30MB Druckauftrag sind ca. 1,5MB PDF Datei > Wahnsinn oder ?

Mfg
Fips81
Fips81 11.05.2007 um 13:00:06 Uhr
Goto Top
Mahlzeit!

@circassia:

Genaugenommen wird der "Ausdruck" abgefangen und in ein PDF-Dokument, im Prinzip "Bild", verwandelt. Dieses Bild wird dann verschickt. Es ist sehr viel kleiner als die normalen Druckerdaten vom Windows. Wenn du z.B. ein DIN-A4 Großes Foto drucken willst, mutiert das im Spooler zu 50 MB oder mehr. Mit "meinem System" geht anstelle nur 1 MB durch die Leitung. Qualitätsunterschiede konnte ich bisher noch nicht sehen.

Ja, so gesehen ist das Bild kleiner, also werden die zu übertragenden Daten "komprimiert".

Ist eher für VPN-Verbindungen (z.B. von zu Hause über Internet auf dem Firmencomputer arbeiten und zu Hause drucken) gedacht, da die Internetbandbreite doch recht klein ist. Kannst Du natürlich auch im LAN nutzen.

EDIT: Hui, eben hab ich Torbens Erklärung erst gesehen, die eigentlich genauer als meine ist. Ich lass es trotzdem mal so stehen. face-smile

@Torben:

Hi! Riesen Dank für Test und Feedback!
Freut mich, dass es soweit funktioniert.

Egal wie viele Kopien du eingibst, es wird nur eine Datei übertragen. Die pdfprint.bat auf dem Client wertet die Anzahl aus dem Dateinamen aus und startet PDFP entsprechend oft bevor die Datei wieder gelöscht wird. Die Idee war ja zu komprimieren, nicht pro Kopie eine Datei durch die Leitung zu jagen! face-smile

Habe ich nun richtig verstanden, dass bei Dir ein Druck aus dem Drucker kommt und es dann nicht mehr funktioniert weil AcroRd32.exe nicht mehr beendet wird? Wenn ja, dann schau nochmal nach ob Du dir nicht die Datei pdfp.zip runtergeladen hast. Du musst, wie ganz oben erwähnt, pdfp8.zip nehmen! Der Ausdruck funktioniert mit dem älteren PDFP genauso, jedoch ist PDFP dafür verantwortlich, den Reader zu schließen, und die alte Version kann das nicht!
Folge dem hängt der Reader fest und kann auch nicht mehr gestartet werden. D.h. es kommen keine weiteren Kopien.

Also schau nochmal genau nach der pdfp.exe! In beiden den Dateien pdfp.zip und pdfp8.zip heißt sie pdfp.exe und hat genau 48 KB.
Für mich sieht das nach Hex-Editor-Tuning aus! face-smile
Spaß beiseite... Hier ein riesen Dank an den macher von PDFP, chicks! Er sollte die alte Version von der Seite nehmen.

Mfg!
Torben
Torben 11.05.2007 um 13:40:02 Uhr
Goto Top
Egal wie viele Kopien du eingibst, es wird nur eine Datei übertragen. Die pdfprint.bat auf dem Client wertet die Anzahl aus dem Dateinamen aus und startet PDFP entsprechend oft bevor die Datei wieder gelöscht wird. Die Idee war ja zu komprimieren, nicht pro Kopie eine Datei durch die Leitung zu jagen! face-smile

Das wäre ja wirklich genial, nur klappt das bei mir einfach nicht. Wenn ich das richtig verstanden habe wäre das wie folgt, ich drucke eine Textpassage mit 5 Zeilen und wähle im Dialog 3x Kopie. Im Spoolershare kommt jetzt eine PDF Datei an mit dem Inhalt von 15 Zeilen oder wie ?

Mfg
Fips81
Fips81 11.05.2007 um 13:57:20 Uhr
Goto Top
Nein! Es wird 3 mal PDFP gestartet bevor die Datei gelöscht wird. Du hast quasi 3 Druckaufträge im Spooler mit der jeweiligen originalen Seitenanzahl. In deinem Fall 1 Seite.

pdfp.exe überprüft? Habe eben geschaut, das Änderungsdatum muss 07.12.2006 sein.
Wenn die nicht richtig funktioniert, kanns nicht klappen.

Mfg
Torben
Torben 11.05.2007 um 14:05:37 Uhr
Goto Top
Nein! Es wird 3 mal PDFP gestartet bevor die Datei gelöscht wird. Du hast quasi 3 Druckaufträge im Spooler mit der jeweiligen originalen Seitenanzahl. In deinem
Fall 1 Seite.

pdfp.exe überprüft? Habe eben geschaut, das Änderungsdatum muss 07.12.2006 sein. Wenn die nicht richtig funktioniert, kanns nicht klappen.

Mfg

Hallo,
Ja die Datei ist die richtige stimmt alles, nur hab ich das mit der Spoolanzahl immer noch nicht kapiert ! Ist dieses Bsp. 3x mal pdfp starten sichtbar, denn pdfp startet nur einmal.


Mfg
Fips81
Fips81 11.05.2007 um 14:13:58 Uhr
Goto Top
Ja ist sichtbar, Du musst die PID im Taskmanager einblenden, dann kannst Du sehen, dass die PDFP.exe und die AcroRd32.exe 3 mal nacheinander gestarten werden. Die PID verändert sich dann logischwerweise, daran siehst Du es.

Kannst auch in den Diensteinstellungen für DirMonitor im Reiter Anmelden Datenaustausch zwischen Dienst und Desktop zulassen anklicken, dann kannst' mitgucken was passiert.

Welche Version von Acrobat Reader haste installiert? Was passiert wenn Du den Reader einzeln startest? Hängt er irgendwo fest, z.B. sollst Du die AGB bestätigen?
Torben
Torben 11.05.2007 um 14:47:55 Uhr
Goto Top
Ja ist sichtbar, Du musst die PID im Taskmanager einblenden, dann kannst Du sehen, dass die PDFP.exe und die AcroRd32.exe 3 mal nacheinander gestarten werden. Die PID
verändert sich dann logischwerweise, daran siehst Du es.

Server:
Ok hab ich probiert der Prozess "freepdf.exe" startet sichtbar 1x und konvertiert dann fleißig und er bekommt eine PID die sich nicht ändert d.h FreePDF startet nicht 3 mal.

Mfg
Fips81
Fips81 11.05.2007 um 15:13:59 Uhr
Goto Top
Guck: FreePDF auf dem Server startet auch nur einmal, das ist richtig. Dann wird die Anzahl der Kopien in den Dateinamen eingebunden (#HP LaserJet 4L#1#3#Michael#141040#ID9288#Testseite.pdf siehe fett markierte 3). Wenn die Datei übertragen ist, wird sie auf dem Server gelöscht und somit hat sich das auf dieser Seite erledigt. Jedoch auf dem Client muss dann PDFP.exe und AcroRd32.exe 3 mal nacheinander gestartet werden.

Drucke doch auf dem Client mal eine PDF Datei manuell aus:
z.B.: Start -> Ausführen -> cmd
c:\pdfprint\pdfp.exe -p "HP Laserjet 1020 "C:\Dokumente und Einstellungen\Michael\Desktop\Meine PDF zum testen.pdf"
Acrobat Reader muss sich wieder komplett schließen!

Achja
Stellt sich mir die Frage ob "dirmon" damit auch klar kommt wenn Bsp. 20 WTS User gleichzeitig ein Dokument in das Spooler Share schmeissen.
20 - keine Ahnung! Bei einem Kunden habe ich es mit genau den obigen Dateien problemlos laufen. Darüber jagen 4 User im Durchschnitt 500 Seiten am Tag durch (Steuerberater face-smile).

Grüße
Fips81
Fips81 12.05.2007 um 15:11:16 Uhr
Goto Top
Hey Torben,

ich habe die print.bat und die pdfspooler.bat überarbeitet und eine rename.bat hinzugefügt. Nimm Dir die 3 Dateien nochmal raus, dann sollte es aber echt laufen. Vorausgesetzt Acrobat Reader macht keinen Strich durch die Rechnung. face-smile
Gut, laufen hätte es vorher auch sollen, aber nun kann man wirklich alles mögliche durcheinander drucken.

Mfg
circassia
circassia 15.05.2007 um 08:12:07 Uhr
Goto Top
face-smile es ist echt spannend mitzulesen.....danke übrigens auf die Antwort für meine Frage...werde demnächst das selbe System versuchen zu realisieren

mfg.
Jacolo
Jacolo 31.05.2007 um 22:53:29 Uhr
Goto Top
Hallo! Haben einen Terminalserver im Einsatz welcher eigentlich sehr gut
funktioniert.
Also Kunde öffnet einen Terminalserverclient (VPN vorhanden) verbindet sich zum Server (2003) und
öffnet hier ein Outlook. Ein Mail mit PDF Anhang ist da. PDF (mit Bildern)
wird am Server geöffnet und der Bildaufbau ist je nach PDF extrem langsam und
erst recht beim Seitenwechseln.

könnte man auf ähnliche weise beim öffnen eines PDF´s dieses automatisch auf den Client kopieren lassen und automatisch dort mit einem Reader öffnen lassen?

Bitte um Hilfe
Ein verzweifelter
Jaco Vokoun
Fips81
Fips81 01.06.2007 um 09:46:16 Uhr
Goto Top
Guten Morgen!

Mein Vorschlag wäre:

  • auf dem Client die Ordner c:\pdf und c:\pdf\in erstellen
  • Ordner c:\pdf\in freigeben
  • Dirmonitor in Ordner c:\pdf kopieren
  • Dirmonitor-Dienst installieren mit dirmonitor.exe -install
  • in den Dienst-Einstellungen von Dirmonitor Datenaustausch zwischen Dienst und Desktop zulassen aktivieren (wichtig!)
  • Datei c:\pdf\pdf.bat erstellen
@echo off
title PDF wird empfangen - NICHT SCHLIESSEN!
mode con cols=40 lines=1
pushd c:\pdf\in
set pdffilename="%~nx1"  
:check
ping 127.0.0.1 -n 2 > nul
ren %pdffilename% %pdffilename% > nul
if not exist %1 goto:eof
if %errorlevel% equ 0 (goto start) else (goto check)
:start
start /wait "d:\programme\acrobat reader\reader\acrord32.exe" %1  
del %1
popd
Pfad vom Reader anpassen

  • Datei c:\pdf\dirmonitor.ini erstellen bzw. vorhandene anpassen:
[directories]
c:\pdf\in="c:\pdf\pdf.bat"  

  • auf dem Server ein Netzlaufwerk zum Client auf den Ordner in mappen
  • Dirmonitor starten mit net start sdirmon
  • dafür sorgen, daß Dirmonitor automatisch gestartet wird (oben genannte dmstart.bat)

Somit muss er nur noch seine PDF im Anhang in das Netzlaufwerk speichern und sie wird automatisch geöffnet. Nach dem schließen vom Reader wird sie wieder gelöscht.
Ich hab's eben auf die schnelle getestet. Funktioniert.
Natürlich eine Frage der Sicherheit wegen des Netzlaufwerkes.

Mfg, Michael

PS: Mich würde interessieren, ob das bei Torben geklappt hat, bzw. ob es sonst noch jemand versucht hat und welche Schwierigkeiten aufgetreten sind.
Jacolo
Jacolo 01.06.2007 um 20:49:35 Uhr
Goto Top
Hey! Vielen vielen Dank! Funktioniert. Spitze

Könnte man das auch ausweiten für verschiedene Dateitypen? zb JPEG´s oder andere Standard Dateitypen?
Habe versucht ein install.bat file zu fabrizieren aber irgendwie bekomm ich das nicht richtig hin. Bin mal soweit.

habe einen Installations-Ordner mit folgender Struktur angelegt:

Install TS PDF

in diesem Ordner gibt es einen Ordner PDF in welchem der Ordner Dirmon mir allen Dateien enthalten ist, der In Ordner und die PDF.bat

So siet meine bastelei aus.
@echo off
rem Ordner werden erstellt
md c:\PDF
md c:\PDF\IN
md c:\PDF\Dirmon
rem Dateien werden kopiert
copy .\pdf\pdf.bat c:\pdf
copy .\pdf\dirmon\*.* C:\pdf\dirmon
rem sdirmon wird als Dienst installiert
"C:\PDF\Dirmon\dirmonitor.exe" -install  
rem Dienst wird gestartet
net start sdirmon
Was mir fehlt ist dem Dienst den Datenaustausch beizubringen. Da ich des Skripting nicht Herr bin wäre Spitze wenn Du mir auch hier weiterhelfen könntest. Bitte nicht einen Lachkrampf bekommen...geht sicher auch einfacher und professioneller.

Also Danke nochmals. Ist eine spitzen sache.
Gruss
Jaco
Fips81
Fips81 01.06.2007 um 22:49:02 Uhr
Goto Top
Huhu!

Könnte man das auch ausweiten für verschiedene Dateitypen? zb JPEG´s oder andere Standard Dateitypen?
Ja, entferne den reader im script (lol). Ungefähr so:
  • vorher: start /wait "d:\programme\acrobat reader\reader\acrord32.exe" %1
  • nachher: start /wait %1

Was mir fehlt ist dem Dienst den Datenaustausch beizubringen.
Jup, und die Freigabe müsste man auch noch setzen. Da ich aber auch kein Script-Geek bin und programmieren auch erst lerne, kann ich dir momentan damit nicht weiterhelfen. Aber ich kann googeln wie'n junger Gott! face-smile Werde am Montag/Dienstag gucken, ob ich was rausfinden kann.

Ein Anhalts-Schnipsel habe ich jedoch gefunden.
startcodes = Split(",läuft nicht,wird gestartet,wird gestoppt,läuft,wird fortgesetzt,angehalten,Fehler", ",")  
starttypes = Split("Autostart Boot,Autostart Windows,Autostart CM,manuell,gesperrt", ",")  

Set dienst = GetObject("WinNT://" & strPC & "/" & strSrvc & ",service")  

'Dienst auf 'Autostart Windows' umstellen  
If dienst.StartType = 4 Then
dienst.Put "StartType", 2  
dienst.SetInfo
End If

If dienst.Status = 4 Then 'wenn dienst gestartet ist dann stoppen  
dienst.Stop
MsgBox "Dienst auf " & strPC & " gestoppt"  
ElseIf dienst.Status = 1 Then '...sonst starten  
dienst.start
MsgBox "Dienst auf " & strPC & " gestartet"  
End If
Quelle mcseboard.de (Cybquest)

Vielleicht hilfts weiter...

Grüße!
Fips81
Fips81 22.09.2007 um 02:12:42 Uhr
Goto Top
Hi!

Ich verstehe Dein Problem nicht. FreePDF sollte den Dateinamen so weitergeben, wie es ihn von dem Programm, mit dem Du drucken willst, erhält. Das ist normal aber egal, weil der eh umbenannt wird. Oder meinst Du PDFP funktioniert nicht richtig? Beschreibe bitte Dein Problem genauer!

Gruß, Michael!