Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Quickreport nach PDF Delphi 7 (https://www.delphipraxis.net/205555-quickreport-nach-pdf-delphi-7-a.html)

KlausV 24. Sep 2020 08:18

AW: Quickreport nach PDF Delphi 7
 
Guten Morgen und Danke für die Tipps,
Einen PDF Drucker Treiber zu installieren und zu nutzen ist sicherlich eine Option, aber sehe ich es richtig, dass ich den Treiber nur mit einigem Aufwand von Delphi aus bedienen kann, sprich Dateinamen und Verzeichnis mitgeben (Registry auslesen, etc.)? Muss der Druckerreiber dann als Standard Drucketreiber definiert werden? Wenn ja, dann gibt es Probleme auf dem Rechner, weil von diesem Rechner auch auf normalen Druckern gedruckt werden soll.

Wie schon geschrieben, wird QR benutzt und daraus soll eine PDF Datei direkt erzeugt werden.

Dieser Code Schnipsel taucht immer wieder auf:
Wie könnte ich das eventuell für meinen Quick-Report verwenden?
Delphi-Quellcode:
var
DeviceMode: THandle;
Device, Driver, Port: array[0..80] of Char;
begin
Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF'); // drucker
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
Printer.SetPrinter(Device, Driver, 'Test.pdf', 0); // dateiname
Printer.BeginDoc;
Printer.Canvas.TextOut(100, 100, 'Test'); // pdf inhalt
Printer.EndDoc;
end;


Zusätzlich habe ich den Vertrieb von Quickreport kontaktiert. Ich habe die QR Standard Version installiert und in der PRO Version kann ich wohl direkt das PDF erzeugen.

Das wäre dann der Code, den ich direkt nutzen könnte:
Report.ExportToFilter(TQRPDFDocumentFilter.Create( TempFile));

Danke und Gruß

himitsu 24. Sep 2020 10:40

AW: Quickreport nach PDF Delphi 7
 
Es muß nicht der Standard-Drucker sein ... du kannst ja in der Report-Engine sagen wo du drucken willst.

Einige der Drucker-Treiber nutzen die Description des Druckauftrags, um daraus den Dateinamen zusammenzusetzen.
Verzeichnis und Dergleichen muß vorher im Treiber eingerichtet werden.
* Registry oder INI, bzw. über den Eigenschaftendialog in der Druckerverwaltung
* Ein Druckertreiber kann auch mehrmals installiert werden, also der selbe Drucker, aber mit unterschiedlichem "Namen" und unterschiedlichen Default-Einstellungen.
* * So kann man, ohne etwas umstellen zu müssen, mit unterschiedlichen Ausgaben arbeiten (Papierformat, Druckqualität, Farbe/Schwarzweiß, Speicherpfad, ...)

KlausV 24. Sep 2020 12:20

AW: Quickreport nach PDF Delphi 7
 
Hallo,
Danke.
ich habe es nun hinbekommen, dass das Dokument über den Microsoft PDF Druckertreiber funktioniert. Das PDF wird erzeugt, jedoch obwohl ich den Dateinamen setze, geht ein Dialog hoch und verlangt den Dateinamen.

Ich mache es so:
report.title:= 'Test';
Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF'); // drucker
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
Printer.SetPrinter(Device, Driver, 'C:\Test.pdf', 0);

Report.print;

Was mache ich hier falsch?

Habe noch etwas gefunden um den promopt zu umgehen:
var
hprinter : THandle;
sdevice,
sdriver,
sport : array[0..80] of Char;
oprinter : TGIS_Printer ;
oprintman: TGIS_PrintManager ;
begin
Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF');
Printer.GetPrinter( sdevice, sdriver, sport, hprinter ) ;
Printer.SetPrinter( sdevice, sdriver, 'C:\Temp\myfile.pdf', 0);

oprintman := TGIS_PrintManager.Create ;
try
oprinter := TGIS_Printer.Create( Printer ) ;
try
oprintman.Print( GIS, oprinter ) ;
finally
oprinter .Free ;
end;
finally
oprintman.Free ;
end ;
end;

Nur, wie bekomme ich hier meinen Druck da rein;

Danke.

einbeliebigername 24. Sep 2020 13:12

AW: Quickreport nach PDF Delphi 7
 
Hallo,

benutze mal die Suchmaschine deines Vertrauens mit synpdf quickreport. Synpdf ist opensource (https://github.com/synopse/SynPDF). In einem Projekt, wo ich mitarbeite, wird das auch eingesetzt um Quickreporte direkt in PDF umzuwandeln.

Zitat:

Zitat von himitsu (Beitrag 1474090)
Du kannst natürlich auch mit deinem Report als JPEG/PNG/... exportieren und anschließend daraus eine PDF erzeugen.

Das ist absolut keine gute Idee. Die PDF's werden riesig, es lässt sich der Text nicht herauskopieren und die Qualität ist mitunter auch bescheiden.

HolgerX 24. Sep 2020 14:35

AW: Quickreport nach PDF Delphi 7
 
Hmm..

mal zum PDF-Druck zusammengefasst:

- Bei Verwendung eines PDF-Druckertreibers wird der 'normale' Druck deiner Applikation verwendet, dies funktioniert auch mit jedem beliebigen anderen Programm was 'drucken' kann. es sind 'keine' Änderungen am deinem Programm nötig, Du musst nur diesen PDF-Drucker als 'Ziel' deines Druckens definieren. Dies kann durch einen Auswahldialog oben links bei der Vorschau des QuickReports geschehen, oder indem Du diesen Drucker als 'Standard' unter Windows festlegst.

- Bei fast allen dieser Druckertreiber (Microsoft PDF Druckertreiber, FreeXP, PDFCreator...) wird standardmäßig ein Dialog (von dieser Software, nicht deiner App) geniert, damit Du das Ziel (eventuell den Dateinamen) der Ablage angeben kannst.

- Bei einigen kann der Treiber (hierzu zählt nicht Microsoft PDF Druckertreiber) kann ein 'festes' Verzeichnis angegeben werden, in dem 'automatisch' die PDFs abgelegt werden. Es kommt dann 'kein' Dialog. Teilweise kann hier auch eine Formatvorlage für die automatische Benennung der PDF-Datei eingestellt werden.

- Generell nutzen diese Druckertreiber meistens den 'Titel' (printer.Title) als Dateiname für das PDF-Dokument.


Alternativen:
- Vergiss den alten Delphi Quickreport, besorge Dir eine Reportkomponente, welche 'selber' PDFs erzeugen kann und tausche in deiner Applikation deine Quickreports gegen diese aus.

- Nutze andere Komponenten wie z.B. synpdf (habe ich nicht mit QuickReport zusammen getestet). Aber hier musst Du ggf. einen Dialog in deine Applikation einbauen, damit die Benennung oder der Ablageort angegeben werden kann.

KlausV 25. Sep 2020 06:58

AW: Quickreport nach PDF Delphi 7
 
Hallo Holger,
Danke für die Zusammenfassung.
Aktuell kommt es nicht in Frage die Berichte durch RAVE oder Fastreport zu ersetzen. Ich habe es so geändert, dass über den PDF Drucker eine Dialog für den Anwender hochkommt. Der Dateiname und Ablageort ist schon angepasst und der User muss nur noch bestätigen. Ist nicht die beste Variante, aber alles Andere ist aktuell zu aufwendig.

Gruß

kschit 25. Sep 2020 08:48

AW: Quickreport nach PDF Delphi 7
 
Ich würde von Synpdf verwenden, schon ein paar mal überlegt, jetzt umgesetzt, funktioniert wirklich super, und es ist noch Support mit delphi 7

QuickAndDirty 25. Sep 2020 11:27

AW: Quickreport nach PDF Delphi 7
 
Zitat:

Zitat von himitsu (Beitrag 1474173)
Es muß nicht der Standard-Drucker sein ... du kannst ja in der Report-Engine sagen wo du drucken willst.

Einige der Drucker-Treiber nutzen die Description des Druckauftrags, um daraus den Dateinamen zusammenzusetzen.
Verzeichnis und Dergleichen muß vorher im Treiber eingerichtet werden.
* Registry oder INI, bzw. über den Eigenschaftendialog in der Druckerverwaltung
* Ein Druckertreiber kann auch mehrmals installiert werden, also der selbe Drucker, aber mit unterschiedlichem "Namen" und unterschiedlichen Default-Einstellungen.
* * So kann man, ohne etwas umstellen zu müssen, mit unterschiedlichen Ausgaben arbeiten (Papierformat, Druckqualität, Farbe/Schwarzweiß, Speicherpfad, ...)

Es gab in QR einen bug, der dafür gesorgt hat dass die richtigen Schachtnummern nur vom Standard Drucker aus gelesen und verwendet werden konnten.
Deswegen hatte ich tatsächlich mal einen Code genutzt der den ausgewählten Drucker zum standard Drucker macht....
Das problem dabei war, dass leider die funktion die einen Refresh der Registry auslöst nicht bei allen Kundenrechnern zurrückkehrte....


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz