Seite 1 von 2

Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 05. Feb 2016 15:47
von georg
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?

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 05. Feb 2016 16:53
von Schubi
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 05. Feb 2016 17:39
von georg
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 05. Feb 2016 18:53
von Wolfgang Ciriack
Ich benutze PDFCreator, dort kannst du Profile mit verschiedenen Aktionen anlegen und diese dann verschiedenen Druckern zuordnen.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: So, 07. Feb 2016 22:10
von brandelh
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Mo, 08. Feb 2016 17:39
von Schubi
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

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Mo, 08. Feb 2016 17:55
von georg
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 8:08
von brandelh
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).

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 10:03
von georg
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 ...

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 12:15
von Schubi
Hallo Georg,

device muss 'pdfWrite' sein.
Das sehe ich irgendwie nicht in deinem Quellcode.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 12:56
von georg
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 14:20
von Schubi
Kann leider nicht zum Treffen kommen. Wir haben Messe, aber man sieht sich... :occasion5:

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 14:30
von Jan
... das erste Treffen seit Menschengedenken, an dem Du nicht teilnehmen kannst. Sehr traurig.

Jan

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 14:32
von Martin Altmann
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

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Di, 09. Feb 2016 16:02
von Schubi
Nun weint mal nicht ... :D

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Do, 05. Mai 2016 17:42
von Manfred
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"?

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Do, 05. Mai 2016 19:25
von Wolfgang Ciriack
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.ä.).

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 06. Mai 2016 6:18
von brandelh
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 06. Mai 2016 7:28
von Manfred
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?

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Fr, 06. Mai 2016 7:32
von brandelh
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.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: Do, 14. Sep 2017 8:56
von mini990
Guten Morgen....
Ist jemand fit mit Bullzip?
Der Druck funktioniert bei mir (habe das ganze wie oben beschrieben eingebunden).
Ich möchte die Papiergröße manipulieren (Custom Paper Size)
Geht das auch per Parameterübergabe?

Danke im Voraus

Gruß Stefan

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: So, 29. Mär 2020 10:23
von Muecke
Hat jemand schon mit Bullzip
die Verschlüsselung in PDF vollbracht.

Für Rechnungen ist ein muss die Verschlüsselung

Schöne Grüsse
Thomas

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: So, 29. Mär 2020 18:49
von ramses
Hallo Thomas

das geht über die Configschnittstelle mit den Werten [PDF Security] Settings

aber für E-Rechnungen ist dies nach meinen Erfahrungen gar nicht zwingend nötig.
Viel wichtiger, eigentlich zwingend ist es ein Dokumenttyp "PDF-A" zu erstellen.
Nur so wird das PDF auch Plattformunabhängig korrekt angezeigt.
Für PDF-A ist aber eine kostenpflichtige Professional BullZip Version erfoderlich.
Andernfalls wir jedes Dok mit dem roten Text markiert: TRIAL MODE − a valid license will remove this message. See the keywords property of this PDF for more information.

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: So, 29. Mär 2020 20:18
von Muecke
Hallo Carlo
Danke für die Antwort
Ja das habe ich gesehen.
Ich denke es bleibt mir nichts anderes übrig als zu kaufen.

Hast du mit [PDF Security] Settings schon was gemacht ?

Schöne Grüsse
Thomas

Re: Drucken im Allgemeinen, PDF im Besonderen

Verfasst: So, 29. Mär 2020 21:23
von ramses
Hallo Thomas

ich habe die Security Settings über die Shell mit dem Config Tool von Bull-Zip gesetzt.
z.b. ......\BullZip\PDF Printer\API\EXE\config.exe" OwnerPassword diesespasswort
Das funktioniert einwandfrei. Die Verschlüsselung bringt jedoch nicht viel und lässt sich sehr leicht entfernen.
(Nicht nur bei BullZip)

Wenn du das Dokument vor Veränderungen schützen oder besser diese erkennen können willst müsstest du es signieren.
Aber beides Verschlüsseln oder Signieren ist in unserem Land nicht nötig.
Für elektronische Ablagen gibt es eigentlich nur eine Anforderung: Das Dokument muss auf verlangen elektronisch oder ausgedruckt vorgezeigt werden können. Wie das ganze gemacht wird ist dir überlassen.

Mein Lieblingstool für Ausdrücke ist List&Label ....... ist schnell und hat einen Super-Designer .....