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.