Seite 1 von 1

HB_PRINTER und Serienbrief [erledigt]

Verfasst: Fr, 17. Jan 2020 13:30
von Wolfgang_B
Mahlzeit,
ich versuche gerade mit Huberts Druckerklasse Serienbriefe zu generieren. Auf der 1. Seite soll ein Briefkopf und ein Standardtext gedruckt werden, auf die jeweilige 2. Seite ein Aufstellung von Daten. Und das bei allen Kunden in der DB. Irgendwie kriege ich das nicht hin. Die erste Seite ist in der Vorschau noch sichtbar, dann aber nichts mehr. Irgendwie denke ich wahrscheinlich falsch :oops:


Code: Alles auswählen

      DO WHILE ! EOF()														    
 		         // Auf 1. Seite drucken
 		         ::printForm()									// Drucken Briefkopf
  			 ypos := 1800
 			 ::PrintMemo( ::xposLR, yPos, ::formularText, "L" )		// Drucken Brief																										    				                         										
			
			// Auf 2. Seite drucken
			::PrintText(::xposLR, yPos, ::formularText, Daten)
			DBSKIP()
		ENDDO															

Re: HB_PRINTER und Serienbrief

Verfasst: Fr, 17. Jan 2020 13:45
von Werner_Bayern
Servus Wolfgang,

das Grundgerüst sollte so aussehen:

Code: Alles auswählen

hbprint initialisieren
do while…
   :startDoc()
   … drucken (:print())
   :EndDoc()
   skip
enddo
:destroy()

Re: HB_PRINTER und Serienbrief

Verfasst: Fr, 17. Jan 2020 18:42
von Wolfgang_B
Hallo Werner,
das Dumme ist nur, daß ich in ::printForm() die ganzen Briefköpfe meiner Kunden hinterlegt habe. Die alle nochmal in ::print() anzulegen, fände ich nicht so schön ..

Re: HB_PRINTER und Serienbrief

Verfasst: Sa, 18. Jan 2020 15:32
von brandelh
das sollst du doch auch gar nicht :-)

Wichtige Frage ... geht der Druck auf Papier oder in PDF ?

Auf Papier kann man das nacheinander drucken, wobei die Seitennummern zurückgesetzt werden müssen.
Bei PDFs willst du sicher einzelne Dateien oder alles in eine ?

Wenn man ohne meinen Druckdialog druckt, ist man da flexibel, der Druckdialog benötigt aber die Methode ::Print(),
dieser steuert den Aufruf von ::PrintForm() wenn nötig.
Bei einem Serienbrief muss man nur Erkennen, wann das neue Dokument anfangen soll.

Diese Variablen sind in deiner Print() Methode zuweißbar !
Wenn du vor dem neuen Brief diese wieder auf 1 setzt, sollte das funktionieren wie gewünscht:

Code: Alles auswählen

:NewPage() // =>  ::nPageNo++ wurde ausgeführt, du willst aber nun wieder eine 1. Seite innerhalb dieses Druckjobs !
::nPageNo := 1
::lFirstPageForm := .f.         // Formular 1. Seite noch nicht gedruckt - form 1. page not printed
::PrintForm() 
...

*-------------------------------------------------------------
METHOD _HBPrinter:NewPage()
    local uReturn := SELF
    if IsMethod(::oPS:device(),"NewPage")
       if ::IsPageToPrint() .and. ! ::IsThisLastPage() // kein Vorschub bei letzter Seite, wegen
          uReturn := ::oPS:device():NewPage()          // no NewPage an last page, because of
       endif                                           // enddoc()
    endif
    ::nPageNo++
return uReturn
Wenn es in eigene PDFs soll, muss man in Print den Druckjob beenden und erneut mit neuem Namen starten.
Das habe ich zwar noch nicht gemacht, sollte aber gehen.

Re: HB_PRINTER und Serienbrief

Verfasst: Sa, 18. Jan 2020 16:34
von Wolfgang_B
Hallo Hubert,
erstmal vielen Dank!!!

Druck geht auf Papier. Den Druckerdialog brauche ich zur Auswahl des Druckers, da es normalerweise bei meinen Kunden keinen Standarddrucker gibt.

Im Prinzip funktionierts jetzt schon mal. Es gibt noch ein paar Feinheiten, die noch nicht so wie gewollt funktionieren; z.B. die Druckvorschau haut nicht hin. Die Ist aber auch nicht notwendig. Kann man im Druckerdialog den Punkt ausblenden? Je mehr ich mich mit Deiner Klasse beschäftige, desto begeisterter bin ich davon. Echt "klasse"!

Re: HB_PRINTER und Serienbrief

Verfasst: Sa, 18. Jan 2020 17:27
von brandelh
Wenn du nur die Druckerauswahl möchtest, kannst du auch den XbpPrinterDialog() nutzen und die Rückgabe an HBPrinter übergeben.
Da habe ich auch ein Beispiel bei, dann wird auch immer der Standarddruckerauswahlbildschirm mit Zugriff auf die Eigenschaften etc. verwendet.

PS: natürlich kannst DU in diesem einen Programm einen Schalter einbauen um die Vorschau zu verhindern (disable oder hide)

Re: HB_PRINTER und Serienbrief

Verfasst: Mo, 20. Jan 2020 10:06
von Wolfgang_B
Hubert, alles klar. Vielen Dank ...

Re: HB_PRINTER und Serienbrief [erledigt]

Verfasst: Mo, 20. Jan 2020 21:21
von Wolfgang_B
Hallo Werner,
jetzt hab ich erst verstanden, was Du gemeint hast ... :banghead:

Re: HB_PRINTER und Serienbrief [erledigt]

Verfasst: Di, 21. Jan 2020 15:03
von Werner_Bayern
Wir Bayern sind halt nicht immer die Schnellsten :lol:

Re: HB_PRINTER und Serienbrief [erledigt]

Verfasst: Di, 21. Jan 2020 15:54
von Jan
... wie gut das Wolfgang gar kein Bayer ist ... :-D

Jan

Re: HB_PRINTER und Serienbrief [erledigt]

Verfasst: Di, 21. Jan 2020 17:04
von Wolfgang_B
:D :D

Re: HB_PRINTER und Serienbrief [erledigt]

Verfasst: Di, 21. Jan 2020 21:30
von Werner_Bayern
Man sieht sich in Regensburg! :occasion5: