Seite 1 von 1

PDF drucken

Verfasst: Di, 07. Feb 2017 16:39
von Jan
Hallo,

hat irgendwer auf die Schnelle ein wenig Code, wie ich per ActiveX aus einem Xbase++-Programm heraus eine PDF drucken kann? Die Schwierigkeit (für mich zumindest) dabei ist: Der Reader soll nicht (sichtbar) geöffnet werden. Es geht nicht auf den Standarddrucker, den passenden Drucker muß ich also auch irgendwie mitgeben können. Der Dateiname der PDF inkl. Pfad liegt natürlich als Variable vor.

Ich weiß natürlich, wie ich den Reader per ActiveX anspreche. Aber das mit dem Drucker ist mir dann doch etwas zu hoch ...

Jan

Re: PDF drucken

Verfasst: Di, 07. Feb 2017 17:16
von HaPe
Hallo Jan !
hat irgendwer auf die Schnelle ein wenig Code, wie ich per ActiveX aus einem Xbase++-Programm heraus eine PDF drucken kann?
Ich habe dir Code um ohne ActiveX Dokumente über die zugehörigen Anwendung zu drucken ohne diese zu Sehen.
Falls dir das auch reicht, hier der VFP-Code dazu:

Code: Alles auswählen

LPARAMETERS tcDocument AS STRING

*-- Zuerst die Parameter setzen
lcOperation = 'Print'
lcFileName = tcDocument
lcParameter = ''
lcWorkDir = ''

*-- Dokument mit der Standard-Anwendung ausdrucken.
ShellExecute( 0, lcOperation, lcFileName, lcParameter, lcWorkDir, 0 )
Funktioniert mit PDF, DOCX, XLSX usw.

Den Standard-Drucker und zurück kannst du mit den Win32-Api-Funktionen SetDefaultPrinter und GetDefaultPrinter setzen.

Hier (wieder VFP-Code als Beispiel)

Code: Alles auswählen

DO declare

LOCAL cCurrentPrinter
cCurrentPrinter = GetDefaultPrinter()

? "Default printer:", cCurrentPrinter

IF SetDefaultPrinter("Microsoft XPS Document Writer") = 0
    * 1801 - ERROR_INVALID_PRINTER_NAME
    ? "SetDefaultPrinter failed:", GetLastError()
ELSE
    ? "New default printer:", GetDefaultPrinter()

    SetDefaultPrinter(m.cCurrentPrinter)
    ? "Default printer restored:", GetDefaultPrinter()
ENDIF

* end of main

FUNCTION GetDefaultPrinter
    LOCAL cPrinter, nBufsize, nResult
    nBufsize = 250
    cPrinter = REPLICATE(CHR(0), nBufsize)

    TRY
        IF GetDefaultPrinterAPI(@cPrinter, @nBufsize) <> 0
            cPrinter = SUBSTR(cPrinter, 1, AT(Chr(0),cPrinter)-1)
        ELSE
            cPrinter=""
        ENDIF
    CATCH
        cPrinter=""
    ENDTRY
RETURN m.cPrinter


PROCEDURE declare
    DECLARE INTEGER GetLastError IN kernel32
    DECLARE INTEGER SetDefaultPrinter IN winspool.drv STRING pszPrinter
    DECLARE INTEGER GetDefaultPrinter IN winspool.drv as GetDefaultPrinterAPI STRING @pszBuffer, INTEGER @pcchBuffer

Re: PDF drucken

Verfasst: Mi, 08. Feb 2017 3:01
von AUGE_OHR
Jan hat geschrieben:hat irgendwer auf die Schnelle ein wenig Code, wie ich per ActiveX aus einem Xbase++-Programm heraus eine PDF drucken kann?
ich habe, "auf die schnelle", leider nichts als "hidden" ActiveX
Jan hat geschrieben:Die Schwierigkeit (für mich zumindest) dabei ist: Der Reader soll nicht (sichtbar) geöffnet werden.
dann setzte mal die Grösse auf {0,0} oder die Position ausserhalb des sichtbaren Bereich :)

man könnte aber auch per "Command Line Parameter" drucken
AcroRd32.exe <filename>

The following switches are available:

/n - Launch a new instance of Reader even if one is already open
/s - Don't show the splash screen
/o - Don't show the open file dialog
/h - Open as a minimized window
/p <filename> - Open and go straight to the print dialog
/t <filename> <printername> <drivername> <portname> - Print the file the specified printer.
noch ein Tip den ich bei Adobe gelesen haben : das ganze als "Bild" ausdrucken ...
aber frage mich jetzt nicht wie ich an die Option mit XbpPrinter() komme

Re: PDF drucken

Verfasst: Mi, 08. Feb 2017 7:29
von Koverhage
Jan,
warum per ActiveX ?
Du kannst doch den Print direkt über Edgars Tool machen. Du doch auch die Funktionen der QuickPDF
direkt aufrufen ( oPDF:qCall() )

Re: PDF drucken

Verfasst: Mi, 08. Feb 2017 8:13
von Jan
Moin Klaus,

leider nein.Das klappt eben nicht in diesem Fall. Deswegen suche ich nach Alternativen.

Jan