LL erzeugte PDF später nochmals drucken ohne Dialog

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

LL erzeugte PDF später nochmals drucken ohne Dialog

Beitrag von Peter Schweizer »

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
Gruss Peter
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

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

Beitrag von HaPe »

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

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

Beitrag von Tom »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

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

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag von AUGE_OHR »

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
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

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

Beitrag von Klaus Schuster »

Hast Du Dir schon einmal SumatraPDF angesehen? Sehr leicht zu verwenden & schnell.
Gruß Klaus
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

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

Beitrag von Klaus Schuster »

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
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

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

Beitrag von Peter Schweizer »

Vielen Dank für Eure Vorschläge,

werde mal SumatraPDF ausprobieren.
Schein ja recht einfach einsetzenbar.

Grüße
Peter
Gruss Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

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
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

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

Beitrag von HaPe »

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
DelUser01

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

Beitrag von DelUser01 »

@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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

das muss wohl HBPrintPDF sein, ich weiß gar nicht ob die Druckfunktion in der kostenlosen lite Version enthalten ist.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag von ramses »

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.
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Antworten