Drucken mit HBPrinter - Was geht wie warum ???

Moderator: Moderatoren

Wer kennt, nutzt oder verabscheut HBPrinterX ?

Ich nutze HBPrinterX ausschließlich
6
14%
Ich nutze HBPrinterX gelegentlich bzw. zusätzlich
10
24%
HBPrinterX habe ich früher mal genutzt
1
2%
geprüft, aber für mich ungeeignet
1
2%
der Schrott gehört verboten
0
Keine Stimmen
In nutze grundsätzlich keine Fremdprodukte
0
Keine Stimmen
Noch nie gehört oder kein Interesse
2
5%
Ich nutze Reportgeneratoren oder ähnliches
11
26%
Ich nehme XbpPrinter() pur
11
26%
 
Insgesamt abgegebene Stimmen: 42

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: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Uwe,

bitte. Du könntest auch die Schrift um 1 oder 2 Punkte kleiner machen, bis es passt?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Ok ich denke eine maximale Zeilenanzahl sollte leicht umsetzbar sein. Mal sehen.
Gruß
Hubert
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: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Hubert,

eine kleine Erweiterung bei _HBPrinter:PrintMemo

Code: Alles auswählen

    lNeedBox := .f.
    
    if ! empty(cArt)
       cArt := alltrim(upper(cArt))
       if cArt = "B"         // BOX zeichnen
          lNeedBox := .t.
          cArt  := NIL        // für PrintText() sperren
       endif
    endif
Damit können Memos dann auch unterstrichen, durchgestrichen etc. gedruckt werden - siehe :PrintText, Parameter cArt.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo,
Ich würde gerne dem Druckdokument, wenn ich es über einen PDF-Drucker ausgebe einen eigenen Namen mitgeben (aktuell wird immer HB-Printer verwendet).
Ich habe dies mit startdoc() geschafft - aber wenn ich die Methoden Print/Prinform verwende kann ich startdoc() nicht verwenden, das dies wohl an einer Stelle implizit verwendet wird, die ich nicht beeinflussen kann. (ich habe nur die Variable cAktivSpoolJobName gefunden)

Bitte um Hinweis, wie ich dem Dokument einen Namen mitgeben kann.

Ich nutze die Version HBPrinterklasse 1.40 mit Alaska 1.9 als auch 2.0.

Herzlichen Dank
Gruß
Schorsch
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

cAktivSpoolJobName ich weiß nicht wo, aber die Richtung stimmt ;-)

schau mal im Beispiel Test-BOLD.PRG da wird der Wert einfach vorgegeben und intern dann an StartDoc() weiter gereicht ...

Code: Alles auswählen

oHBPrinter := MyHBPrinter():New():create()
if oHBPrinter:IsPrinterError()             // Fehler verhindern, avoid errors
   --- Fehler
else
   oHBPrinter:addFont("14.Arial")
   oHBPrinter:addFont("12.Arial")
   oHBPrinter:addFont({"Arial",12,.t.,.f.})       // Passender Bold Font !

   oHBPrinter:SpoolJobName := "TEST-BOLD - Probeausdruck 2"
   ...
   oHBPrinter:PrintingDialog( .t. , .t. , xbeK_ALT_P )
endif
In HBPRINT.PRG steht was dazu ...

Code: Alles auswählen

   1.31   -  10.12.2008  (= 2008-12-10)
                ...
                ::spoolJobName ==> siehe / like 1.90.337
ab der 1.90.335 (SL1) kennt der XbpPrinter() die Instanzvariable, die genutzt wird, laut Hilfe ist die aber schreibgeschützt.
Ich habe damals (2008) geschrieben, siehe 1.90.337 - also bitte in der Hilfe nachlesen, vermutlich ein Tippfehler das mit der 337 ;-)
Intern nutze ich eine Methode, die den Vorgabetext setzt, wenn nichts vorgegeben wurde

ACCESS ASSIGN METHOD SpoolJobName // verhält sich im Prinzip wie eine iVar, man kann also einfach zuweisen ohne () ...

egal welche Xbase++ Version man nutzt, intern setze ich den Inhalt dieser iVar ein um StartDoc() richtig zu belegen:

Code: Alles auswählen

*-------------------------------------------------------------
METHOD _HBPrinter:StartDoc(cText,nSetPageNo)
    local cAltDrive, cAltDir, cResetDir
    local uReturn := SELF
    DEFAULT cText TO ::SpoolJobName
    DEFAULT nSetPageNo TO 1
    cAltDrive := curdrive()
    cAltDir   := curdir()
    ::nPageNo := nSetPageNo
    ::_IsOpenStartDoc := .t.
    ::_cPrinterShowText := cText
    if IsMethod(::oPS:device(),"StartDoc")
       uReturn := ::oPS:device():StartDoc(cText)
    endif
    if cAltDrive # curdrive() .or. cAltDir # curdir()
       cResetDir := cAltDrive +":\"+ cAltDir
       curdrive(cAltDrive)
       curdir(cResetDir)
    endif
return uReturn
Weiter unten gibt es noch eine Methode, die auch den Namen nachträglich setzen sollte, macht das wirklich Sinn ?

Code: Alles auswählen

*-------------------------------------------------------------
METHOD _HBPrinter:SpoolJobName(cSpoolJobName)
   static cAktivSpoolJobName := NIL
   do case
      case ! IsNil(cSpoolJobName)   // Setzen !
           cAktivSpoolJobName := cSpoolJobName
           if ::_oPS:device():isDerivedFrom( "XbpPrinter" ) .and. ;
              IsMemberVar( ::_oPS:device(), "SpoolJobName" )
              ::_oPS:device():SpoolJobName := cSpoolJobName
           endif
      case IsNil(cAktivSpoolJobName)
           cAktivSpoolJobName := "HB-Printer"
           if ::_oPS:device():isDerivedFrom( "XbpPrinter" ) .and. ;
              IsMemberVar( ::_oPS:device(), "SpoolJobName" )
              ::_oPS:device():SpoolJobName := cSpoolJobName // Laut Hilfe eigentlich readonly ...
           endif
      otherwise
           if ::_oPS:device():isDerivedFrom( "XbpPrinter" ) .and. ;
              IsMemberVar( ::_oPS:device(), "SpoolJobName" )
              cSpoolJobName := ::_oPS:device():SpoolJobName
           endif
   endcase
return cAktivSpoolJobName
die Variable cAktivSpoolJobName ist mit STATIC auf jeden Fall intern ;-)
Gruß
Hubert
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo Hubert,

oHBPrinter:SpoolJobName := "TEST-BOLD - Probeausdruck 2"

Das war der entscheidende Tipp - das hat gut funktioniert - vielen Dank
Gruß
Schorsch
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo Hubert,

ich habe meine Formulare und komplexe Dokumente bisher mit Deiner HBPrinter Klasse gemacht und stehe jetzt vor dem Problem, ein Dokument als PDF-Datei zu erzeugen, das gespeichert(an einem bestimmten Ort) oder/und verschickt werden soll. Die Möglichkeit auf einen PDF-Drucker zu drucken ist zu umständlich und erfordert immer manuelle Eingriffe.
Ich habe dafür jetzt Deine HBPrintPDF Klasse genommen und Deine mitgelieferten Testprogramme zum Laufen bekommen.
Jetzt meine Frage:
Muss ich meine Programme, die diese Dokumente erzeugen komplett mit HBPrintPDF neu schreiben oder gibt es eine einfache Möglichkeit der Konvertierung ?
Was ich vor allem vermisse bei HBPrintPDF mit den Methoden Print und PrinForm zu arbeiten, denn diese Methoden(konstante/variable Seiteninhalte trennen) finde ich sehr praktisch.
Für eine Erläuterung wie ich einfach von HBPrinter zu HBPrintPDF komme wäre sehr hilfreich.
Danke
Gruß
Schorsch
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von flanelli »

Hallo Schorsch,
mir mir ist schon klar, dass du deine Anfrage an Hubert gerichtet hast aber ich hoffe, du siehst es
nicht als negativ und einmischend, wenn ich dir ganz kurz meine Sicht der DInge bzgl. PDF-Drucker darlege.

Ich verwende auch schon seit Langem die geniale Druckerklasse von Hubert in entsprechend
angepasster Form auf die eigenen Bedürfnisse ( alles klappt wunderbar )
*An diese Stelle nochmals Danke an Hubert, Du hast mir vor etlichen Jahren durch deine Klasse
den Weg geebnet, meine komplexen und ausgeklügelten Druckerroutinen ( die auch zur Laufzeit
jederzeit ohne Sourceänderung adaptierbar sind ) recht einfach von Clipper auf Xbase-GUI umzusetzen.

Warum allerdings der Ausdruck über einen PDF-Drucker und auch die individuelle Weiterverarbeitung
der PDF-Datei ( sei es an einem fixen oder variablen Speicherort oder als Anhang zum Email )
"umständlich" sein soll, kann ich so mal nicht ganz nachvollziehen.

Meine Apps erstellen Dokumente via PDF-CREATOR ( z.B. sowohl alle Angebote aus den DBF-Daten als
auch Deck-oder Schlussblätter die z.B. in Word erstellt sind etc. ) ohne jeglichen weiteren
manuellen EIngriff bzgl. automatischen oder variablen Speicherort, Anhängen an ein Email,
Weiterleiten an einen Zentralserver in ein CRM, etc. etc.

All das lässt sich doch recht einfach in der Druckroutine festlegen und mehr als die Installation
des PDF-Creator ist dann nicht erforderlich. Die diversen Einstellungen für den PDF-Creator
lassen sich via ActiveX problemlos von der Xbase-App aus treffen bzw. einfach automatisch
beim Programmstart überprüfen und gegebenfalls auch automatisch adaptieren.
Somit bleibt nichts mehr übrig was man "manuell" machen müßte.

Ich mlöchte damit keineswegs irgendetwas gegen alle anderen Lösungen, egal ob andere PDF-Drucker oder diverse
Xbase-Klassen, aussprechen aber gerade der Einsatz eines PDF-Druckers macht das ganze Prozedere
recht einfach und vor allem wenn es auch mal um komplexere Ausdrucke geht.

Bin aber auch immer gerne für alle anderen Varianten offen, wenn diese tatsächlich einfacher sein sollten.
Ahoile aus dem Süden
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo flanelli,
ich habe auch in anderen Beiträgen von PDF CREATOR gelesen- mich aber zugegebenermaßen noch nicht damit befasst, da ich die von Dir beschriebene Flexibilität in den Beiträgen nicht so erkannt habe. Ich werde dies nachholen. Was mich halt grundsätzlich dabei stört, dass auf jedem Kunden-PC dieser installiert sein muss, damit ich ihn dann auch verwenden kann (zumindest habe ich dies so verstanden).
Mit der HBPrintPDF Klasse von Huber geht es ja auch nicht ohne zusätzliche SW + Lizenz - bei dem habe ich aber den Eindruck dies besser selbst steuern zu können.
Erstmal danke für den Tipp - ich probiere es auf jeden Fall aus.
Gruß
Gruß
Schorsch
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von flanelli »

Hallo Schorsch,
bzgl. einer erforderlichen Installation auf jedem Arbeitsplatz ist das ja letztendlich nichts anderes als die
Installation eines neuen Druckers und zudem ist der PDF-Creator auch kostenlos.
Meine Kunden ( darunter auch ein Großkonzern mit recht rigiden Vorgaben an diverse Installationen )
haben seit vielen Jahren damit keinerlei Probleme, lediglich bei einem gravierenden Sprung des OS
( z.B. von XP auf Win7, oder Win10 ) war es dann ratsam eine etwas aktuellere Version zu installieren
aber nicht immer ist die aktuellste auch die unbedingt erforderliche )

Ich möchte da keine Werbung für den PDF-Creator machen, ich hab nur etliche andere PDF-Drucker
ausprobiert und eben diesen als optimal, außerordentlich stabil und alle Bedürfnisse abdeckend dann
ausgewählt.

Wünsche dir jedenfalls alle Gute beim Testen ...
Ahoile aus dem Süden
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hallo,

zunächst wähle ich den PDF Druckertreiber (seit Win 10) ist ja sogar einer installiert, wenn der Anwender flexibel zwischen den Druckausgaben wählen soll.
HBPrintPDF mit der QuickPDF ist immer dann zwingend, wenn die PDFs im Hintergrund erzeugt werden sollen, z.B. eine CGI EXE auf einem Webserver, oder andere Serverdienste ...

alles dazwischen kann man so oder so erledigen.
Eine "einfache Konvertierung" habe ich nie benötigt und daher auch nicht erstellt, einige Methoden habe ich HBPrintPDF spendiert,
um Druckausgaben aus Clipper (SAY) bzw. HBPrinter zu erleichtern, aber Print und PrintKopf gehören nicht dazu.
Diese beiden Methoden sind zwingend nötig, wenn man aus der Druckerauswahl/Druckvorschau heraus mit HBPrinter drucken will, da dann dieses Fenster alles steuert.
Für HBPrintPDF war so ein Druckerfenster (mit Vorschau) nie vorgesehen, daher habe ich das auch nicht gemacht.
Gruß
Hubert
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo Hubert,
danke für die Klarstellung - ich muss also das Programm für das besagte Dokument mit PrintPDF neu erstellen.
Für mich ist die Hintergrunderstellung des PDF wichtig, da ich nicht einen PDF-Drucker(-treiber) auswählen muss, der vielleicht nicht/falsch installiert/konfiguriert ist.
An den Komfort von HBPrinter gewöhnt man sich eben schnell, vor allem wenn man mit dem Umgang von Classen nicht so firm ist. Nochmals Danke für die Schaffung dieser Möglichkeiten.
Gruß
Schorsch
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo Hubert,
ich würde gerne mit deiner HBPrintPDF verschiedene Schriftarten verwenden - ich durchblicke aber die Methode(n) nicht, wie das zu bewerkstelligen ist.
Mit deiner bisher benutzen HBPrint Classe habe ich zum Beispiel folgende Statements verwendet:
#define HB_FONT_14Arial 1
oHBPrinter:addFont("14.Arial")
::SetFont(HB_FONT_14Arial)

Was sind die entsprechenden Statements in der HBPrintPDF Classe ?

Für eine kurze Erläuterung wäre ich dankbar-
Gruß
Schorsch
Gruß
Schorsch
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Die Schriften werden zu dem Dokument geladen und als Referenz z.B. in local Variablen abgelegt.
Hier ein Auszug aus dem TEST_BOX.PRG Beispiel von HBPrintPDF:

Code: Alles auswählen

   local cTitleFont    := "Calibri", ;
         cNormalFont   := "Verdana", ;
         cBoldFont     := "Verdana [Bold]", ;
         cItalicFont   := "Verdana [Italic]", ;
         nTitlefont    := 0,;
         nNormalFont   := 0, ;
         nBoldFont     := 0, ;
         nItalicFont := 0
...
   oHBPDF := HBPrintPDF():new():create(cKey)
   if oHBPDF:IsOK
      oHBPDF:SetPageSize("A4")
      oHBPDF:SetPageSize("A4 Landscape")

      // Lade Schriften in PDF, add fonts to pdf ###################### erst einmalig in das PDF laden

      nTitlefont := oHBPDF:AddTrueTypeFont(cTitleFont,0)   ############### nTitlefont ist die Referenz-ID dieses Fonts, falls es nicht 0 oder NIL ist.
      if empty(nTitlefont)
         msgbox("Could not load: "+cTitleFont )
      endif

      nBoldFont  := oHBPDF:AddTrueTypeFont(cBoldFont,0)
      if empty(nBoldFont)
         msgbox("Could not load: "+cBoldFont )
      endif

      nNormalFont := oHBPDF:AddTrueTypeFont(cNormalFont,0)
      if empty(nNormalFont)
         msgbox("Could not load: "+cNormalFont )
      endif

      nItalicFont  := oHBPDF:AddTrueTypeFont(cItalicFont,0)
      if empty(nItalicFont)
         msgbox("Could not load: "+cItalicFont )
      endif

....
      // Standard Vorgehen für Schriftwahl und Schriftgröße
      // The standard way to use fonts and fontsize (TextSize)

      if ! oHBPDF:SelectFont(nTitleFont)
         msgbox("Error with: "+cTitleFont )
         quit
      endif

      oHBPDF:SetTextSize(20) // 20 Points !
      oHBPDF:DrawText(100,50, "TEST with boxes")

      if ! oHBPDF:SelectFont(nBoldFont)
         msgbox("Error with: "+cBoldFont )
         quit
      endif

      oHBPDF:SetTextSize(12) // 12 Points !
                     // x  y  text
      oHBPDF:DrawText(100,70, "This is BOLD text")

      if ! oHBPDF:SelectFont(nNormalFont)
         msgbox("Error with: "+cNormalFont )
         quit
      endif

      oHBPDF:SetTextSize(12) // 12 Points !

      nY  := 100
      nX  := 100
      nLF := oHBPDF:GetTextHeight()

      for x := 1 to 5
          oHBPDF:DrawText(nX,nY, "This is NORMAL text, line "+str(x,3))
          nY += nLF
      next

      oHBPDF:SetTextSize(10) // 10 Points !

      oHBPDF:DrawText(100,150, "This is SMALLER text")

#### könnte auch PrintText() sein, die Druckausgabe nimmt den zuletzt eingestellten Font
Gruß
Hubert
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo Hubert.
Vielen Dank das Beispiel hat geholfen.
Woher bekommt man eine Liste der Fontnamen, die mit der Quick PLF Lib verwendbar sind ?
Gruß
Schorsch
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Das sind ja alles TrueType fonts des Rechners. So wie ich das verstanden habe, werden die eingebettet im Dokument (das muss ja unabhängig sein).
Also eigentlich alle ;-)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Jan »

Hubert,

in :font sagt der dritte Parameter, ob der Font eingebunden wird oder nicht. Standard ist nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

OK, dann die PDF in den Eigenschaften prüfen ... was drin ist.
Bei Postscript Druckern wird gerne auf interne Fonts umgebogen, das ist ja auch von Adobe ... ich sehe mal in die Hilfe.

Eventuell wäre es besser die Funktion AddStandardFont() zu verwenden, diese sind immer verfügbar:

Code: Alles auswählen

Adds a standard font to the document. These standard fonts will always be available on all PDF viewers.

Syntax
DLL: int DPLAddStandardFont(int InstanceID, int StandardFontID);

Parameters
StandardFontID The ID of the font to add:
0 = Courier
1 = CourierBold
2 = CourierBoldOblique
3 = CourierOblique
4 = Helvetica
5 = HelveticaBold
6 = HelveticaBoldOblique
7 = HelveticaOblique
8 = TimesRoman
9 = TimesBold
10 = TimesItalic
11 = TimesBoldItalic
12 = Symbol
13 = ZapfDingbats
Return values
0 The font could not be added
Non-zero The ID of the font that was successfully added
Umsetzung auf Windows PCs:

Helvetica => Arial
TimesRoman => Times New Roman

Die gängigen TrueType Fonts wie Arial, Times New Roman oder die neuen sind aber auch immer verfügbar (auf Windows in unseren Breiten), ich hab keine Ahnung wie das ein Chinesischer Rechner anzeigt ;-)
Gruß
Hubert
Benutzeravatar
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Schorsch »

Hallo Hubert,
bisher konnte ich dem PDF-Druckertreiber mit dem Befehl:

oHBPrinter:SpoolJobName := "TEST-BOLD - Probeausdruck 2"

Einene Titel/Namen zum Speichern mitgeben.

Seit Win 10, der ja einen eingebauten PDF-Drucker hat get das leider so nicht mehr.
Hat jemand eine Idee, wie man dem WIN 10 PDF-Drucker einen Dateinamen zum Speichern vorgeben kann ?
Für einen Hinweis wäre ich sehr dankbar, da meine Anwender inzwischen alle WIN 10 haben und nicht bereit sind ein Zusatzproduckt für die PDF-Erzeugung zu installieren.
Gruß
Schorsch
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: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

Servus Schorsch,

wird von Microsoft Print to PDF nicht unterstützt. Wir installieren PDF-Creator, da hat man sehr viele Möglichkeiten - inkl. Druckprofile mit festen Pfaden.
es grüßt

Werner

<when the music is over, turn off the lights!>
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von flanelli »

Schorsch hat geschrieben: Mo, 18. Mai 2020 13:24 Seit Win 10, der ja einen eingebauten PDF-Drucker hat get das leider so nicht mehr.
Hat jemand eine Idee, wie man dem WIN 10 PDF-Drucker einen Dateinamen zum Speichern vorgeben kann ?
Für einen Hinweis wäre ich sehr dankbar, da meine Anwender inzwischen alle WIN 10 haben und nicht bereit sind ein Zusatzproduckt für die PDF-Erzeugung zu installieren.
hallo schorsch,
wie werner schon angeführt hat gibt es wohl keine dahingehende möglichkeit beim "ms-print to pdf" Drucker...
aber es handelt sich dabei sozusagen um einen "Drucker" und so scheint dieser auch als Drucker in den vorhandenen
Ausgabegeräten auf.

Beim PDF-Creator etc. etc. etc. handelt es sich letztendlich auch nur um "Drucker" und ich frage mich schon ernsthaft
warum sich deine Kunden gegen die Installation eines Druckers verwehren. Letzenedlich kann man diese PDF-Drucker
auch als Druckertreiber betrachten und gegen eine solche Installation kann doch niemand ernsthafte Einwände haben.
Da wären mir bei MS / WIN10-Apps und Features schon weitaus lieber wenn man die nicht installieren könnte
und würde :-)

Es gibt ja auch tatsächlich rein physische spezielle Drucker die nicht in der MS-Liste aufscheinen und dann müßten
deine Kunden auch einen "fremden" Treiber installieren damit das Ding auch funzt.

Ist nur meine persönliche Meinung aber wenn wir einen Kunden hätten, der sich gegen die Installation eines PDF-Druckers
verwehren würde, dann würden wir auch schleunigst danach trachten, uns dieses Kundens zu verwehren :-)

btw... der PDF-CREATOR ist ja nur einer von vielen aber jedenfalls einer mit dem man tatsächlich sehr unkompliziert
ganz feine Sachen machen kann, vor allem auch wegen der Com-Schnittstelle...
Ahoile aus dem Süden
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

Hallo,

tatsächlich ist der Test mit diesem Code (ich hab den Druckernamen auf Win10 geändert) wie beschrieben so,
dass im Speichern-Dialog der Dateiname nicht vorgegeben wird, im Gegensatz zu vielen anderen PDF Treibern.
Der Hersteller entscheidet was ein Drucker kann. Aber es gibt Lösungen, je nach Anforderung:

Wenn man den Dialog sehen will und eventuell noch ein Verzeichnis ändern etc. kann man aber den Dateinamen mit Pfad in die Zwischenablage legen und der Kunde muss nur noch einfügen.
So mache ich das wenn das Verzeichnis vorgegeben werden soll, denn mein Druckertreiber kann zwar den Namen aber nicht das Verzeichnis vorbelegen.

Wenn man ohne Dialog auskommt, ist aber der Befehl für Speichern unter ... ein anderer !

Code: Alles auswählen

*#### ANSI .t. äöü ÄÖÜ ß !!!!
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "XBPDEV.ch"

procedure AppSys
   SET CHARSET TO ANSI
return

*---------------- Fonts nur einmal erzeugen - create fonts only once ------
procedure main
local oHBP, nPosY, nLR, nSpaNr, x, aDaten, cWindowsDruckerObjekt

aDaten := { {"Text a",         123.12},;
            {"Text bb",         12.54},;
            {"Text ccc",      1234.23},;
            {"Text dddd äöüß",    9.3} }

// cWindowsDruckerObjekt := "Canon iP4500 series" // kann man vorgeben, bei NIL oder keiner Angabe => Standarddrucker

cWindowsDruckerObjekt := "Microsoft Print to PDF" // Standard Win10 PDF Drucker Treiber

oHBP := HBPrinter():New():create(cWindowsDruckerObjekt) // :create() nutzt Standarddrucker
if oHBP:IsPrinterError()             // Fehler verhindern, avoid errors
   msgbox("Drucker ist nicht verfügbar !")
else
   oHBP:SpoolJobName := "TEST-BOLD - Probeausdruck 2" // das wird nicht übernommen ... 
   oHBP:addFont("10.Arial") // hier werden alle benötigten Fonts in ein internes Array geladen
   oHBP:setFont(1)  // hier wird der gewünschte Font gewählt
   oHBP:StartDoc("Drucktest")  // ein LASER wird dies im Display anzeigen, ein PDF Druckertreiber wird es als Dateinamen verwenden.
   nPosY  :=  200   // 2 cm von oberer Papierkante - Einheit 1/10 mm => 1 mm == 10, 1cm = 100
   nLR    :=  200   // 2 cm von linker Papierkante
   nSpaNr := 1200
   for x := 1 to len(aDaten)
       //  :PrintText( nPosX, nPosY, xData, cAusrichtung, nMaxLen, cArt, nFarbe, nDrehen ) - das hilft immer ;-)
       oHBP:PrintText( nLR  , nPosY, aDaten[x,1] ) // Standardausrichtung in Drucklänge, nicht gedreht ...
       oHBP:PrintText(nSpaNr, nPosY, transform(aDaten[x,2],"999,999.99"), "R" ) // Zahlen formartiert rechtsbündig
       nPosY += oHBP:LineFeed()  // eine Zeile weiter (0,0 ist linke obere Papierkante) mit Standardabstand. 50 wären 5 mm ... wie man will.
   next
   oHBP:EndDoc()
endif
msgbox("gedruckt Umlaute äöü")
return
fügt man diese Zeile ein: oHBP:setPrintFile( "TEST-BOLD - Probeausdruck PrintToFile.PDF" ) speichert er dorthin ohne Nachfrage.

Code: Alles auswählen

   // viele PDF Treiber sehen das als Namensvorgabe, dann kommt der Speichern Dialog
   oHBP:SpoolJobName := "TEST-BOLD - Probeausdruck 2"
   // aber eigentlich ist das nur die Info die der Laser beim Drucken anzeigen soll.
   
   // das ist die Vergabe des Dateinamens beim Speichern, dann kommt aber auch KEIN Speicherdialog mehr !
   // Name muss daher auch die .PDF Extension und einen eventuellen Pfad enthalten, Standardpfad ist wohl EXE Verzeichnis. 
   oHBP:setPrintFile( "TEST-BOLD - Probeausdruck PrintToFile.PDF" ) // EXE Verzeichnis in meinem Beispiel
// oder mit Pfad
   oHBP:setPrintFile( "d:\temp\TEST-BOLD - Probeausdruck PrintToFile.PDF" ) // egal wohin, aber Endung nicht vergessen
   
Gruß
Hubert
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: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von Werner_Bayern »

=D>

Hubert,

seit wann geht das? Kann es sein, dass das vor ca. 1-2 Jahren noch nicht möglich war? Wir haben damals auch mit setPrintFile getestet, keine Chance mit Microsoft Print to PDF...
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von brandelh »

tatsächlich keine Ahnung, habe vorhin nur getestet.
Der Befehl ist schon ewig enthalten, aber bei normalen Druckern doch eher schwierig, daher habe ich das Jahre lang nicht mehr probiert.
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: 76 Mal

Re: Drucken mit HBPrinter - Was geht wie warum ???

Beitrag von ramses »

Hallo zusammen

Beim "Microsoft Print to PDF" ist es über die DOCINFO Structur mit der Win.API möglich den Filenamen zu setzten.
Valar Morghulis

Gruss Carlo
Antworten