Drucken im Allgemeinen, PDF im Besonderen

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Drucken im Allgemeinen, PDF im Besonderen

Beitragvon georg » Fr, 05. Feb 2016 16:47

Hallo,


für eine kleine, private Geschichte brauche ich eine Druckausgabe in eine PDF-Datei. Bisher mache ich das über einen generischen Postscriptdrucker, erzeuge eine .ps Datei und konvertierte die per GhostScript. Der Code ist gute 15 Jahre alt und robust. Damals war Acrobat unerschwinglich, und generische PDF-Treiber eine Zukunftsphantasie.

Ich habe mich mal an den Beispielen zu XbpPrinter() orientiert und das ausprobiert:

Code: Alles auswählen
#INCLUDE "Gra.CH"

FUNCTION Main()
   Local aSize
   Local cPrinter
   Local oDC, oPS
   cPrinter := "Microsoft Print to PDF"
   oDC := XbpPrinter():new()
   oDC:create(cPrinter)
   oDC:setPrintFile("C:\Temp\XbpTest.pdf")
   oPS := XbpPresSpace():new()
   aSize := oDC:paperSize()
   aSize := {aSize[5] - aSize[3], aSize[6] - aSize[4]}
   oPS:create(oDC, aSize, GRA_PU_LOMETRIC)
   oPS:device():startDoc()
   GraBox(oPS, {10, 10}, {400, 100})
   GraSTringAt(oPS, {20, 50}, "Image is printed")
   oPS:device():endDoc()
   oPS:configure()
   oDC:destroy()
RETURN (.T.)


Das erste, was mir auffällt: nachdem das Programm gelaufen ist, ist der "Microsoft Print to PDF" der Standarddrucker. Eigentlich wollte ich nur DIESE Druckausgabe darüber steuern, und nichts anderes.

Das zweite, was mir auffällt: wiewohl es das Verzeichnis C:\Temp gibt, kommt dort nichts an.

Dann irritiert es auch kaum noch, wenn ich die :setPrintFile() Anweisung auskommentiere und eine Zieldatei im Dialog angebe, auch in diesem Fall nichts erzeugt wird. (Habe es dann mit Word versucht und festgestellt, dass auch von Word aus Microsoft Print to PDF nix macht. Faszinierend.)

Wer setzt mich hier technisch mal auf die Schiene? Und: welchen PDF-Druckertreiber könnt Ihr als Ersatz empfehlen?
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1823
Registriert: Fr, 08. Feb 2008 22:29

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Schubi » Fr, 05. Feb 2016 17:53

Hallo Georg,

von diesem MS PDF Printer habe ich keine Ahnung, aber wir setzen seit längerem Bullzip als Druckertreiber ein.
Bullzip kann man aus dem Programm heraus per ActiveX parametrisieren, sodass der Anwender sich um nichts kümmern muss.
Die entstandenen PDFs sind außerdem sehr kompakt.
Wenn man die Grafikqualität > 150 dpi setzen will, muss man glaube ich die kostenpflichtige Variante benutzen.
Grüße Steffen
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 123
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon georg » Fr, 05. Feb 2016 18:39

Hallo, Steffen -


also, ich habe Bullzip mal geladen und ausprobiert, aus Xbase++ heraus gibt es aber nur eine .ps Datei, da bräuchte ich noch Hilfestellung bezüglich der Parametrisierung.

Aber trotzdem stellt mein Programm den Standard-Drucker um.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1823
Registriert: Fr, 08. Feb 2008 22:29

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Wolfgang Ciriack » Fr, 05. Feb 2016 19:53

Ich benutze PDFCreator, dort kannst du Profile mit verschiedenen Aktionen anlegen und diese dann verschiedenen Druckern zuordnen.
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2235
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon brandelh » So, 07. Feb 2016 23:10

ich nutze "eDocPrinter PDF Pro"
obs den noch gibt weiß ich nicht, aber der kann anhand von Schrifttypen z.B. Lesezeichen erzeugen.

Wenn du aber nur Text erzeugen willst, habe ich irgendwo ein Basicprogramm rumliegen,
dass daraus OHNE Druckertreiber einfach eine PDF erzeugt. Schriftarten weiß ich jetzt nicht.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13390
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Schubi » Mo, 08. Feb 2016 18:39

Hallo Georg,
hier mal die Bullzip - Einstellungen, (<cDatei> ist der Temporärdateiname der PDF):

Code: Alles auswählen
            oBullZip := CreateObject("Bullzip.PDFPrinterSettings")
            IF Valtype(oBullzip) == "O"
               oBullZip:setValue("Device", 'pdfwrite')
               oBullZip:setValue("Output", cDatei)
               oBullZip:setValue("ConfirmOverwrite", "no")
               oBullZip:setValue("SupressErrors", IIF(BULLZIP_DEBUG,"no","yes"))
               oBullZip:setValue("showSettings", IIF(BULLZIP_DEBUG,"always","never"))
               oBullZip:setValue("ShowProgress", IIF(BULLZIP_DEBUG,"yes","no"))
               oBullZip:setValue("ShowProgressFinished", IIF(BULLZIP_DEBUG,"yes","no"))
               oBullZip:setValue("ShowPDF", IIF(BULLZIP_DEBUG,"yes","no"))
               oBullZip:setValue("Title", "xxx")
               oBullZip:setValue("Author", "yyy")
               oBullZip:setValue("Target", "printer")
               oBullZip:setValue("Subject", "zzz"
               oBullZip:writeSettings()
         ENDIF
Grüße Steffen
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 123
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon georg » Mo, 08. Feb 2016 18:55

Hallo, Hubert - die Drucken sollen schon einfache Elemente (Linien), verschiedene Fonts sowie mindestens eine Grafik enthalten. Und die Erstellung soll ohne "Wohin soll ich das stellen"-Anfrage des Druckertreibers erfolgen.

Danke, Steffen - werde ich direkt morgen mal angehen. Ich werde dann von meinen Erfolgen berichten.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1823
Registriert: Fr, 08. Feb 2008 22:29

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon brandelh » Di, 09. Feb 2016 9:08

Wenn du unabhängig werden willst, und grafische Elemente brauchst,
kann ich nur empfehlen eine richtige PDF Lib zu nutzen. XppPDF oder QuickPDF (mit HBPrintPDF).
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13390
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon georg » Di, 09. Feb 2016 11:03

Guten Morgen,


also, ich habe das mal so versucht:

Code: Alles auswählen
#DEFINE BULLZIP_DEBUG .F.

#INCLUDE "ActiveX.CH"
#INCLUDE "Gra.CH"

#PRAGMA LIBRARY("ASCom10.LIB")

FUNCTION Main()
   Local aList, aSize
   Local cName, cPrinter
   Local oSet, oPDF, oDC, oPS

   oPDF := AutomationObject():new():create("Bullzip.PDFUtil")
   IF oPDF == NIL
      ? "Error: ", ComLastError()
      ? "Description:"
      ? ComLastMessage()
      RETU(.F.)
   ENDIF
   cName := oPDF:getProperty("defaultprintername")

   oSet := CreateObject("Bullzip.PDFPrinterSettings")
   IF oSet == NIL
      ? "Error: ", ComLastError()
      ? "Description:"
      ? ComLastMessage()
      RETU(.F.)
   ELSE
      oSet:setValue("Output", "C:\Temp\xxyy.pdf")
               oSet:setValue("Device", cName)
               oSet:setValue("ConfirmOverwrite", "no")
               oSet:setValue("SupressErrors", IIF(BULLZIP_DEBUG,"no","yes"))
               oSet:setValue("showSettings", IIF(BULLZIP_DEBUG,"always","never"))
               oSet:setValue("ShowProgress", IIF(BULLZIP_DEBUG,"yes","no"))
               oSet:setValue("ShowProgressFinished", IIF(BULLZIP_DEBUG,"yes","no"))
               oSet:setValue("ShowPDF", IIF(BULLZIP_DEBUG,"yes","no"))
               oSet:setValue("Title", "xxx")
               oSet:setValue("Author", "yyy")
               oSet:setValue("Target", "printer")
               oSet:setValue("Subject", "zzz")
               oSet:writeSettings()
   ENDIF

   cPrinter := "Bullzip PDF Printer"
   oDC := XbpPrinter():new()
   oDC:create(cPrinter)
   oPS := XbpPresSpace():new()
   aSize := oDC:paperSize()
   aSize := {aSize[5] - aSize[3], aSize[6] - aSize[4]}
   oPS:create(oDC, aSize, GRA_PU_LOMETRIC)
   oPS:device():startDoc()
   GraBox(oPS, {10, 10}, {400, 100})
   GraSTringAt(oPS, {20, 50}, "Image is printed")
   oPS:device():endDoc()
   oPS:configure()
   oDC:destroy()

RETURN (.T.)


Es wird zwar eine Datei c:\temp\xxyy.pdf erzeugt, die ist allerdings vom Inhalt her keine PDF-Datei. Irgendwie stehe ich da auf dem Schlauch ...
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1823
Registriert: Fr, 08. Feb 2008 22:29

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Schubi » Di, 09. Feb 2016 13:15

Hallo Georg,

device muss 'pdfWrite' sein.
Das sehe ich irgendwie nicht in deinem Quellcode.
Grüße Steffen
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 123
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon georg » Di, 09. Feb 2016 13:56

Danke, Steffen, das war's. Ich hatte (fälschlicherweise) angenommen, dass hier der Name des Druckers hinmuss.

Jetzt funktioniert es.

Sehe ich Dich beim Forentreffen? Dann hast Du mindestens ein Bier (oder was anderes) gut.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1823
Registriert: Fr, 08. Feb 2008 22:29

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Schubi » Di, 09. Feb 2016 15:20

Kann leider nicht zum Treffen kommen. Wir haben Messe, aber man sieht sich... :occasion5:
Grüße Steffen
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 123
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Jan » Di, 09. Feb 2016 15:30

... das erste Treffen seit Menschengedenken, an dem Du nicht teilnehmen kannst. Sehr traurig.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11774
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Martin Altmann » Di, 09. Feb 2016 15:32

Schade ist es in der Tat - aber es ist nicht das erste Treffen, an dem er nicht teilnimmt ;-)
Ändert aber nichts daran, dass ich mich darüber gefreut hätte, ihn mal wieder zu sehen!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12969
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Schubi » Di, 09. Feb 2016 17:02

Nun weint mal nicht ... :D
Grüße Steffen
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 123
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Manfred » Do, 05. Mai 2016 17:42

Wolfgang Ciriack hat geschrieben:Ich benutze PDFCreator, dort kannst du Profile mit verschiedenen Aktionen anlegen und diese dann verschiedenen Druckern zuordnen.

wie darf ich das verstehen, "verschiedenen Druckern zuordnen"?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 16260
Registriert: Di, 29. Nov 2005 17:58
Wohnort: Kreis Wesel

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Wolfgang Ciriack » Do, 05. Mai 2016 19:25

Du kannst im Creator diverse Drucker anlegen und denen jeweils ein anderes Profil zuordnen.
So z.B. einen, der ein PDF erzeugt und das gleich in einen spezifizierten Ordner ablegt ohne das PDF anzuzeigen, oder einen Drucker, der das gleich an eine Mail anhängt, oder... oder... oder.
Ich benutze für die Ausgaben, die nicht über L&L gehen einen Drucker "Vorschau", der erzeugt PDF und zeigt es an und einen Archiv-Drucker, der mir die Ausgaben als PDF in einen TMP-Ordner ablegt, dann verarbeite ich das PDF weiter (per Mail versenden, ins Dokumentenarchiv o.ä.).
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2235
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon brandelh » Fr, 06. Mai 2016 6:18

Manfred hat geschrieben:
Wolfgang Ciriack hat geschrieben:Ich benutze PDFCreator, dort kannst du Profile mit verschiedenen Aktionen anlegen und diese dann verschiedenen Druckern zuordnen.

wie darf ich das verstehen, "verschiedenen Druckern zuordnen"?


Das haben wir schon früher gemacht, einem tatsächlichen Drucker mehrere Druckertreiber (Warteschlangen) zugeordnet.
So konnte man über die Auswahl des Windowsdruckertreibers ohne weitere Einstellungen im Programm z.B. beide Seiten bedrucken, Querformat etc. einstellen

Beim PDF Druckertreiber geht das genauo, bei einem Druckertreiberobjekt wird eingestellt (unter Druckereigenschaften), dass automatisch gespeichert wird ... wobei meine eben immer den Dateinamen abfragt (was für mich wichtig ist).
Wolfgang kann das bei seinem fest einstellen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13390
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon Manfred » Fr, 06. Mai 2016 7:28

also eigentlich nur immer wieder den PDF Creator, aber mit unterschiedlichen Ergebnissen und unter anderen Namen!?

Oder kann man den PDF Creator mit Eigenschaften/Parametern eines bestimmten Druckers versehen? Ich frage deshalb, weil mir aufgefallen ist, dass die Laserdrucker einen Rand haben, aber der PDF Creator hat keinen. Wenn man da jetzt zu Testzwecken munter einen Ausdruck generiert, aber den nicht vorhandenen Rand unbeachtet läßt, dann müßte das Ergebnis doch später, wenn es mal auf einen Drucker geht, anders aussehen?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 16260
Registriert: Di, 29. Nov 2005 17:58
Wohnort: Kreis Wesel

Re: Drucken im Allgemeinen, PDF im Besonderen

Beitragvon brandelh » Fr, 06. Mai 2016 7:32

Kein mir bekannter PDF Drucker hat einen hardware Rand
Wie sollte er auch wissen auf was du ausdruckst ;-)

Beim Acrobat Reader muss man beim drucken dann einstellen, dass er die Größe nicht verändern darf ("Tatsächliche Größe"), somit wird "leer" auf die Ränder gedruckt und alles stimmt.
Es liegt dann an dir Ränder einzuhalten, die jeder Drucker erfüllen kann.
Vermutlich würden dir aber die 5mm Seitenrand ach beim "Übergroße Seiten zurechtschneiden" der geringe Unterschied gar nicht auffallen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13390
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim


Zurück zu Drucken und Export

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste