AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Quickreport und Windows-Pdf-Printer
Thema durchsuchen
Ansicht
Themen-Optionen

Quickreport und Windows-Pdf-Printer

Ein Thema von FrankJ28 · begonnen am 1. Dez 2020 · letzter Beitrag vom 8. Dez 2021
 
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
112 Beiträge
 
Delphi 12 Athens
 
#3

AW: Quickreport und Windows-Pdf-Printer

  Alt 1. Dez 2020, 14:21
hat jemand eine Idee, wie ich einem Quickreport bei der Ausgabe über den Windows PDF-Printer den Dateinamen mitgeben kann?
Ich vermute mal, Du willst den Drucker "Microsoft Print to PDF" per QuickRep.Print() nutzen, ohne den von tshubaka erwähnten QRExport-Filter.

Ohne tiefe Eingriffe in den Code von QuickReport wird das kaum möglich sein. Das Windows-API bietet zwar eine Möglichkeit, den Ausgabe-Dateinamen beim Start des Druckjobs mitzugeben, aber leider ist dies in Vcl.Printers.pas so verkapselt, dass man da nicht dran kommt:
Code:
procedure TPrinter.BeginDoc;
var
  DocInfo : TDocInfo;
begin
...
  FillChar(DocInfo, SizeOf(DocInfo), 0);
  with DocInfo do
  begin
    cbSize := SizeOf(DocInfo);
    lpszDocName := PChar(Title);
    lpszOutput := PChar(OutFileName); // diese neue Zeile wäre erforderlich!
  end;
...
  if StartDoc(DC, DocInfo) <= 0 then...
TPrinter.BeginDoc() ist leider nicht virtuell, kann also nicht mit eigenem Code überschrieben werden. Es gibt seit Jahren einen QP-Eintrag zu diesem Thema, aber da passiert nix:RSP-13430. Mein Vorschlag wäre entweder ein Property "OutFileName" einzubauen, oder ein OnBeginDoc-Event, in welchem man den DocInfo-Record nochmal anpassen kann.

Ein anderer Weg ist hier beschrieben:
Code:
var
  DeviceMode: THandle;
  Device, Driver, Port: array[0..80] of Char;
begin
  Printer.PrinterIndex := Printer.Printers.IndexOf('Microsoft Print to PDF');
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, 'C:\Temp\Test.pdf', 0);

  Printer.BeginDoc;
  Printer.Canvas.TextOut(100, 100, 'Test');
  Printer.EndDoc;
end;
Aber QuickReport versteckt die Verwendung von TPrinter in seiner eigenen Klasse TQRPrinter, also müsste man das auch aufbohren.
Achim
  Mit Zitat antworten Zitat
 


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 08:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz