Delphi-PRAXiS

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 23. Sep 2020 08:04

Quickreport nach PDF Delphi 7
 
Hallo Zusammen,
ich habe ein Projekt geerbt und vor einer Ewigkeit in Delphi entwickelt.

Entwicklungsumgebung : Delphi 7
Quickreport wird benutzt um die Rechnungen und andere Berichte zu erzeugen

Was ich bisher gefunden habe:
- www.pragnaan.com - da gibt es eine Komponente PsQRFilters, aber die Homepage gibt es wohl nicht mehr

- ExportToFilter(TQRPDFDocumentFilter). Dafür wird aber QR 3.62 benötigt und ich weiß nicht welche Version aktuell installiert ist.

- was gibt es noch? (Sollte so einfach wie möglich sein)

So, nun meine Fragen:
- welche Variante würdet Ihr empfehlen, bzw. welche einfachen Möglichkeiten gibt es?
- in der Preview Anzeige gibt es diverse Export Möglichkeiten, leider kein PDF. Wie bekommt man hier das PDF dazu?

Wäre super, wenn Ihr helfen könntet.

Danke.
Klaus

hoika 23. Sep 2020 08:14

AW: Quickreport nach PDF Delphi 7
 
Hallo,
pragmatisch würde ich sagen:
"PDF-Drucker installieren" oder "Microsoft Print to PDF" benutzen.

Aufwand=0

KlausV 23. Sep 2020 08:48

AW: Quickreport nach PDF Delphi 7
 
Danke Dir für die schnelle Auskunft. Das hatte ich auch schon gedacht zumal auch FreePDF installiert ist. Es soll so sein, dass kein Preview hochkommt, sondern direkt der Report als PDF in ein Verzeichnis mit einem bestimmtem Dateinamen gestellt werden soll.

hoika 23. Sep 2020 08:53

AW: Quickreport nach PDF Delphi 7
 
Hallo,
das lässt sich meines Wissens so einstellen.

KlausV 23. Sep 2020 09:07

AW: Quickreport nach PDF Delphi 7
 
Hallo,
hast du zufällig den Programmcode, wie ich den Drucker anspreche und wie ich dem dann einen eigenen Namen mitgeben kann?
Das wäre perfekt.
Danke.

hoika 23. Sep 2020 09:36

AW: Quickreport nach PDF Delphi 7
 
Hallo,
das geht mit FreePDF meines Wissens nicht.

Kostenpflichtig wäre eDocPrintPro, der hat u.a. eine COM-Schnittstelle.

KlausV 23. Sep 2020 09:45

AW: Quickreport nach PDF Delphi 7
 
Hallo,
wenn es mit dem Microsoft PDF Treiber geht, wäre das auch perfekt.

Habe hierzu etwas gefunden:
https://stackoverflow.com/questions/...elphi/45620791

Nur wie binde ich meinen Report hier ein?


Danke.

Klaus

himitsu 23. Sep 2020 10:32

AW: Quickreport nach PDF Delphi 7
 
Du kannst natürlich auch mit deinem Report als JPEG/PNG/... exportieren und anschließend daraus eine PDF erzeugen.
* mit einem Consolen-Tool
* einer Delphi-PDF-Komponente
* oder selbst über TPrinter die Bilder auf Printer.Canvas malen (mit SetPrinter den Dateinamen setzen)
*** https://stackoverflow.com/questions/...elphi/45620791
* QuickReport nutzt ja beim Drucken auch die DruckAPI, und vermutlich direkt TPrinter
*** diese Stelle müsstest du suchen und schauen, wie du dort das SetPrinter einfügst (entweder in den Code oder du hast Glück und dort gibt es ein Event)

Aber idealer ist es, wenn die Reportkomponente den PDF-Export selbst macht, ohne eine Bild-Datei dazwischen,
damit in der PDF der Text selektierbar/durchsuchbar/kopiertbar bleibt, und nicht alles nur ein großes Bild pro Seite wird.
[EDIT] mit EMF/WMF als Zwischenformat könnte es auch gehen, wenn in der MetaFile die Texte auch als Text und nicht als Bild drin sind.


Der "Print to PDF"-Treiber kann auch aus der Caption/Title des Druckauftrages den Dateinamen generieren.
Kannst du bei QuickReport den Title des Druckauftrags setzen? (das, was auch in der Druckerwarteschlange angezeigt wird)
> Auto-name Files > Include Dokument Title
https://www.win2pdf.com/doc/how-to-a...nt-to-pdf.html

Das was hier eingestellt wird, wird bestimmt auch irgendwo in der Registry stehen.
Wenn der Treiber das bei jedem Druck neu ausließt, könnte man den "Dateinamen" vorher auch in diese Registry schreiben,
also ohne die Include und den Namen in "File name Start" oder "User Defined".

jziersch 23. Sep 2020 10:34

AW: Quickreport nach PDF Delphi 7
 
wPDF (www.wpcubed.com) kann für den PDF export verwendet werden.

Delphi 7 bis Delphi 10.4 wird unterstützt.

Intern ist wPDF ein EMF (metafile) nach PDF Konverter und unterstützt daher eine Vielzahl von report Komponenten. Es können auch Daten aus verschiedenen Quellen in eine PDF Datei kombiniert werden.

HolgerX 24. Sep 2020 06:54

AW: Quickreport nach PDF Delphi 7
 
Hmm..

irgendwie kommt mir das ganze hier (PDF-Erzeugung) bekannt vor...
Da gab es einen Thema hier im Forum,bei dem es auch um PDFs automatisch zu erzeugen ging.

Die einfachste Option ist hier:

PDFCreator (Druckertreiber für PDF)

Diese ist Kostenfrei und kann so eingerichtet werden, dass kein Dialog kommt und der Ausdruck direkt als PDF in einem definierten Verzeichnis abgelegt wird.

Alternativ kann auch direkt RedMon mit GhostScript verwendet werden.
Damit kann das auch gemacht werden, denn so (nur mit zusätzlichem Dialog) hat es in Vergangenheit FreePDF gemacht.
Dort (FreePDF) gab es auf der HP auch mal eine Anleitung, welche jedoch nicht mehr existiert..

Hierdurch sind keine Änderungen an deinem Programm notwendig, nur beim Drucken den richtigen PDF-Drucker auswählen.

Nachtrag:
Hier der Link (Weiter Hintern kommen die PDF-Drucker)
https://www.delphipraxis.net/203511-...ines-pdfs.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 14:54 Uhr.

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