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