LL erzeugte PDF später nochmals drucken ohne Dialog

Moderator: Moderatoren

Antworten
Peter Schweizer
UDF-Programmierer
UDF-Programmierer
Beiträge: 81
Registriert: Do, 06. Apr 2006 10:51

LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Peter Schweizer » Di, 06. Feb 2018 17:24

Hallo,

eine pdf-Datei die mit LL20 erstellt wurde und im Dateisystem abgelegt ist, soll später nochmals ausgedruckt werden.

Beim späteren druck soll jedoch kein zusätzlicher Dialog erscheinen.

Kann man in LL sowas machen ?

Oder muß ich über einen anderen Weg drucken.

Grüße
Peter

Benutzeravatar
HaPe
Foren-Moderator
Foren-Moderator
Beiträge: 463
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von HaPe » Di, 06. Feb 2018 17:52

Hallo Peter !
Kann man in LL sowas machen ?
Das weiß ich (noch) nicht.
Oder muß ich über einen anderen Weg drucken.
Können mittels ShellExecute und der passenden Option:

Code: Alles auswählen

lcOperation = 'PRINT'
lnShowWindow = SW_HIDE  && SW_HIDE = 0

*-- EXE starten und das Dokument drucken
lnReturn = ShellExecute( 0, lcOperation, lcFileName, "", "", lnShowWindow )

Mit einer aktuellen 2.0 Version kannst die ShellExecute vor dem Aufruf so definieren:
EXTERN LONG ShellExecute( nHWND AS LONG, @cOperation AS STRING, @cFile AS STRING, @cParameters AS STRING @cDirectory AS STRING, nShowCmd AS LONG ) IN SHELL32.DLL
--
Hans-Peter

Organisator der XUG Stuttgart
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7146
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Tom » Di, 06. Feb 2018 18:00

Das kann L&L m.E. nicht, jedenfalls nicht über das StorageSystem, das ich aber verwende, um als LL-Vorschau gespeicherte Dokumente später abermals zu drucken. Ich habe die Doku nicht hier (bin im Urlaub), aber für den Druck von PDF-Kopien verwende ich den VSPDF-Viewer (als Komponente).
Herzlich,
Tom

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1466
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Werner_Bayern » Di, 06. Feb 2018 22:55

HaPe hat geschrieben:
Di, 06. Feb 2018 17:52
Mit einer aktuellen 2.0 Version kannst die ShellExecute vor dem Aufruf so definieren:
EXTERN LONG ShellExecute( nHWND AS LONG, @cOperation AS STRING, @cFile AS STRING, @cParameters AS STRING @cDirectory AS STRING, nShowCmd AS LONG ) IN SHELL32.DLL
[/code]
Servus Hans-Peter,

da fehlt ein Komma und lt. Doku müsste der Aufruf wohl so sein?

Code: Alles auswählen

EXTERN INTEGER ShellExecute(nHWND AS UINTEGER, @cOperation AS STRING, @cFile AS STRING, @cParameters AS STRING, @cDirectory AS STRING, nShowCmd AS INTEGER) IN SHELL32.DLL
es grüßt euch

Werner

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11228
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von AUGE_OHR » Mi, 07. Feb 2018 3:54

da ShellExecuteA ein Rückgabe Wert hat sollte man eine Function daraus machen damit man die "andere" Möglichkeit auch bekommt wenn es "nicht passt"

Code: Alles auswählen

FUNCTION ShellOpenFile( cPath, cFILE, cAction )
LOCAL lSuccess
LOCAL Retvar   := .F.

DEFAULT cAction TO "open"       // "print"

   *----------------------------------------------------------
   *  Created from ContactUs.PRG
   *  Posted to Alaska Generic NG 3/15/01
   *  By Anand K Gupta  Sun, 24 Dec 2000
   *----------------------------------------------------------
#define SW_HIDE             0
   * #define SW_NORMAL           1
   * #define SW_SHOWMINIMIZED    2
   * #define SW_SHOWMAXIMIZED    3
   * #define SW_MAXIMIZE         3
   * #define SW_SHOWNOACTIVATE   4
   * #define SW_SHOW             5
   * #define SW_MINIMIZE         6
   * #define SW_SHOWMINNOACTIVE  7
   * #define SW_SHOWNA           8
   * #define SW_RESTORE          9
   * #define SW_SHOWDEFAULT      10

   lSuccess := @SHELL32:ShellExecuteA( APPDESKTOP() :GetHWND(), ;
                                        cAction, ;
                                       cPath + cFile, ;
                                       0, ;
                                       CURDIR(), ;
                                       SW_HIDE )            // SW_NORMAL

   DO CASE
      CASE lSuccess > 32                                    // Aufruf erfolgreich
         Retvar := .T.

      CASE lSuccess = SE_ERR_NOASSOC                        // Keine verknüpfte Anwendung

         // Falls ShowOpenWithDialog = True, wird der Dialog
         // "öffnen mit" für diese Datei angezeigt:
         // Shell "RunDLL32 shell32.dll,OpenAs_RunDLL " & Filename

         @ SHELL32:OpenAs_RunDLL( APPDESKTOP() :GetHWND(), ;
                                  0, ;
                                  cPath + cFile, ;
                                  0, ;
                                  CURDIR(), ;
                                  SW_HIDE )                 // SW_NORMAL

         //  Die Auswahlmöglichkeit wird als Erfolg gewertet:
         Retvar := .T.

      OTHERWISE
         // ShellExecute war erfolglos.
         // Boolean-Standardwert False zurückgeben
         DO CASE
            CASE lSuccess = SE_ERR_FNF
               MSGBOX( "File not found.", cPath + cFILE )
            CASE lSuccess = SE_ERR_PNF
               MSGBOX( "Path not found.", cPath + cFILE )
            CASE lSuccess = SE_ERR_ACCESSDENIED
               MSGBOX( "Access denied !", cPath + cFILE )
            CASE lSuccess = SE_ERR_OOM
               MSGBOX( "Out of memory !", cPath + cFILE )
            CASE lSuccess = SE_ERR_SHARE
               MSGBOX( "Cannot share an open file.", cPath + cFILE )
            CASE lSuccess = SE_ERR_ASSOCINCOMPLETE
               MSGBOX( "File association information not complete.", cPath + cFILE )
            CASE lSuccess = SE_ERR_DDETIMEOUT
               MSGBOX( "DDE operation timed out.", cPath + cFILE )
            CASE lSuccess = SE_ERR_DDEFAIL
               MSGBOX( "DDE operation failed.", cPath + cFILE )
            CASE lSuccess = SE_ERR_DDEBUSY
               MSGBOX( "DDE operation is busy.", cPath + cFILE )
            CASE lSuccess = SE_ERR_DLLNOTFOUND
               MSGBOX( "Dynamic-link library not found.", cPath + cFILE )
         ENDCASE
         Retvar := .F.
   ENDCASE

RETURN Retvar
gruss by OHR
Jimmy

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 189
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Klaus Schuster » Mi, 07. Feb 2018 5:49

Hast Du Dir schon einmal SumatraPDF angesehen? Sehr leicht zu verwenden & schnell.
Gruß Klaus

Benutzeravatar
Klaus Schuster
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 189
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Klaus Schuster » Mi, 07. Feb 2018 6:07

der schweigsame Einsatz ist eine Einzeiler:

RunShell( '-print-to-default -exit-on-print Rechnungen\' + journal->Pdf, 'SumatraPDF.exe', TRUE, TRUE )

Nachteil: Du musst ein externes Tool einsetzen...
Gruß Klaus

Peter Schweizer
UDF-Programmierer
UDF-Programmierer
Beiträge: 81
Registriert: Do, 06. Apr 2006 10:51

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Peter Schweizer » Mi, 07. Feb 2018 8:02

Vielen Dank für Eure Vorschläge,

werde mal SumatraPDF ausprobieren.
Schein ja recht einfach einsetzenbar.

Grüße
Peter

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14400
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von brandelh » Mi, 07. Feb 2018 8:15

es gibt auch für den Acrobat Reader code hier, sumatra ist aber auch gut und einfach zu integrieren (einfach EXE ins Verzeichnis kopieren und aufrufen)
Gruß
Hubert

Benutzeravatar
HaPe
Foren-Moderator
Foren-Moderator
Beiträge: 463
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von HaPe » Mi, 07. Feb 2018 9:40

Hallo Werner und Klaus !
da fehlt ein Komma und lt. Doku müsste der Aufruf wohl so sein?
Ja, das Komma habe ich versemmelt.


Nachteil: Du musst ein externes Tool einsetzen...
Ja das ist so, auch bei meiner Lösung.
SumatraPDF ist wirklich klein und schnell.
Bei meiner Lösung muss irgend ein PDF-Viewer installiert sein, weil ShellExecute die für die Dateiendung PDF von Windows vorgesehene Anwendung einsetzt.
--
Hans-Peter

Organisator der XUG Stuttgart
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

DelUser01

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von DelUser01 » Mi, 07. Feb 2018 10:42

@Peter

wenn Du das PDF hast kannst Du doch das einfach mit Acrobat Reader ausdrucken - ohne Dialog:

Code: Alles auswählen

"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /n /s /o /h "dokument.pdf" "Druckername"
oder

"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t "dokument.pdf" "Druckername"
siehe Adobe Acrobat SDK Doku - Seite 24:
https://www.adobe.com/content/dam/acom/ ... er_faq.pdf

Du musst halt den Acrobat-Pfad hinterlegen oder aus der Registry auslesen.
Müsste dann mir RunShell() auch gehen...

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14400
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von brandelh » Mi, 07. Feb 2018 13:03

Ich persönlich habe bei externen Programmen die sumatra EXE mitgeliefert, aber auf dem Zielrechner nachgesehen ob es einen Standard-PDF Viewer gibt.
So erhält der Anwender seinen zu sehen, wenn er verfügbar ist. Sumatra ist halt immer verfügbar und die EXE muss auch nicht installiert werden.
Gruß
Hubert

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 931
Registriert: Mi, 28. Jul 2010 17:16

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von ramses » Sa, 10. Feb 2018 10:33

Hallo

um ein bereits vorhandenes PDF zu drucken gibt es doch eine einfache und sehr schnelle Funktion.


hbprint_printoutPDF( cPdffile , cDruckername, nDruckSchachtnummer )

Die ist aus Hubert's HBPrint Klasse, irgendwo in einem Beitrag habe ich die Anpassungen beschrieben damit diese verschiedene Formate der PDF' Druckt. Wir Drucken damit alle PDF's auch solche welche die Kunden quer, hoch oder in A3 gespeichert haben.

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14400
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von brandelh » Sa, 10. Feb 2018 13:50

das muss wohl HBPrintPDF sein, ich weiß gar nicht ob die Druckfunktion in der kostenlosen lite Version enthalten ist.
Gruß
Hubert

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 931
Registriert: Mi, 28. Jul 2010 17:16

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von ramses » Sa, 10. Feb 2018 14:08

Hallo Hubert

es gab doch einen Thread damals hatte ich doch arge Probleme beim Drucken von PDF's zum Schluss habe ich doch dann meine hbprint_printoutPDF() Funktion noch in den Thread gestellt. Die Namensgebung kam vermutlich daher weil mein Code in einer PRG aus dem Ordner HBPrint steht und die Funktion ein PDF Druckt -> PrintOutPDF. Ich habe diese Funktion unter Verwendung ausschliesslich einiger stark angepassten Grundfunktionen aus deiner freien Klasse im Jahr 2010 erstellt. Ein gleicher Namen mit einem deiner Produkte ist wirklich zufällig.

Wenn du nichts dagegen hast stelle ich auch gerne die komplette PRG ein. Mit allen nötigen Teilen aus deiner Klasse damit die Funktion läuft.


Gruss Carlo

(Beabeitet: Code entfernt. Dieser ist nun im Anhang weiter unten)
Zuletzt geändert von ramses am So, 11. Feb 2018 19:41, insgesamt 2-mal geändert.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14400
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von brandelh » So, 11. Feb 2018 9:13

Ich habe gar nichts dagegen, wollte nur klar stellen, dass

1. HBPrintPDF und nicht der HBPrinter die Basis ist, und
2. wenn die Print-Funktion in der lite enthalten ist, es kostenlos geht ;-) ... ansonsten wäre ja die mittlerweile sehr teure "Foxit Quick PDF Library" zu kaufen.

und wenn ich durch die Funktionsliste gehe, fehlt leider die Funktion "PrintDocument" (Rendering and printing), also wenn man keine ältere Lizenz hat, ist das wirklich teuer.
Gruß
Hubert

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 931
Registriert: Mi, 28. Jul 2010 17:16

Re: LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von ramses » So, 11. Feb 2018 19:39

Hallo

im Zuge der aktuellen kompletten APP Umstellung stelle ich auch noch alle alten verbliebenen normalen Ausdrucke auf L&L um. Zur bearbeitung von PDF-Files blieben noch einige Funktionen übbrig die noch mit der HBPrint Klasse / QuickPDF ausgeführt werden. Es sind dies:

Code: Alles auswählen

// HBPrint_mergePDFArr2File  --> Mehrere PDF zu einem PDF zusammensetzen
// HBPrint_PrintOutPDF       --> Ausdruck einer ein- / mehrseitiger PDF Datei auf A4 Papier
// HBPrint_GetPDFPageCount   --> Ruckgabe Anzahl Seiten im PDF
// HBPrint_ExtractPDFPages   --> PDF  in einzelne Files/Seiten aufteilen oder ein Bereich in ein PDF-File exportiern
// HBPrint_ConvertPDF2JPG    --> PDF in einzelne Seiten zerlegen und als JPG File speichern
Wenn jemand Interesse an den Funktionen hat bitte PN ich stelle diese gerne zur Verfügung. Sie sind alle mit der QuickPDFDLL 14.11 getestet.

Gruss Carlo

Antworten