AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Quickreport nach PDF Delphi 7
Thema durchsuchen
Ansicht
Themen-Optionen

Quickreport nach PDF Delphi 7

Ein Thema von KlausV · begonnen am 23. Sep 2020 · letzter Beitrag vom 25. Sep 2020
Antwort Antwort
Seite 2 von 2     12   
KlausV

Registriert seit: 29. Aug 2017
Ort: 68809 Neulußheim
84 Beiträge
 
Delphi 7 Professional
 
#11

AW: Quickreport nach PDF Delphi 7

  Alt 24. Sep 2020, 09:18
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ß
----------------------------------------------
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#12

AW: Quickreport nach PDF Delphi 7

  Alt 24. Sep 2020, 11:40
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, ...)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
KlausV

Registriert seit: 29. Aug 2017
Ort: 68809 Neulußheim
84 Beiträge
 
Delphi 7 Professional
 
#13

AW: Quickreport nach PDF Delphi 7

  Alt 24. Sep 2020, 13:20
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.
----------------------------------------------
Klaus

Geändert von KlausV (24. Sep 2020 um 13:24 Uhr)
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#14

AW: Quickreport nach PDF Delphi 7

  Alt 24. Sep 2020, 14:12
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.

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.
Mit freundlichen Grüßen, einbeliebigername.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#15

AW: Quickreport nach PDF Delphi 7

  Alt 24. Sep 2020, 15:35
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.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
KlausV

Registriert seit: 29. Aug 2017
Ort: 68809 Neulußheim
84 Beiträge
 
Delphi 7 Professional
 
#16

AW: Quickreport nach PDF Delphi 7

  Alt 25. Sep 2020, 07:58
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ß
----------------------------------------------
Klaus
  Mit Zitat antworten Zitat
kschit

Registriert seit: 29. Okt 2007
14 Beiträge
 
#17

AW: Quickreport nach PDF Delphi 7

  Alt 25. Sep 2020, 09:48
Ich würde von Synpdf verwenden, schon ein paar mal überlegt, jetzt umgesetzt, funktioniert wirklich super, und es ist noch Support mit delphi 7
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#18

AW: Quickreport nach PDF Delphi 7

  Alt 25. Sep 2020, 12:27
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....
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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