![]() |
Print ToFile
Hallo,
ich schreibe direkt mit Printer.BeginDoc;... auf das Canvas vom Drucker. Das tut auch. Nur wenn der Drucker auf die File-Schnittstelle geht, möchte ich gern den Dateinamen im Programm spezifizieren bzw. ich möchte gleich direkt in die Datei drucken, egal welcher Anschluss eingestellt ist. Im Moment kommt halt von Windows die Abfrage nach dem Dateinamen... Hat jemand eine Idee, wie man das umsetzen kann? |
Re: Print ToFile
Hallo Mario,
es geht zum Beispiel so... Eine neue Unit anlegen MyPrinters.pas mit folgendem Inhalt...
Delphi-Quellcode:
Die Printers.pas in dein Programmverzeichnis kopieren und eine kleiner Änderung machen...
unit MyPrinters;
interface var FPrintToFile:string; implementation initialization FPrintToFile:=''; end.
Delphi-Quellcode:
In die Unit, in der du druckst muss dann MyPrinter.pas und Printers.pas eingebunden werden. Dann kannst du über FPrintFile den Dateinamen angeben und dann normal drucken.
procedure TPrinter.BeginDoc;
: begin : with DocInfo do begin : if FPrintToFile<>'' then lpszOutput:=PChar(FPrintToFile); end; : end; Gruss Thorsten |
Re: Print ToFile
Danke für die Antwort. Sieht nach einer praktikablen Lösung aus!
Der Vollständigkeit halber hier noch eine andere Variante, die ich gestern abend noch gefunden habe:
Delphi-Quellcode:
Intern wird einfach SetPrinter mit dem neuen Port aufgerufen.
uses JclPrint;
... var printSet:TJclPrintSet; ... printSet := TJclPrintSet.Create; try printSet.PrinterPort := 'c:\test.ps'; // Hier Ausdruck finally printSet.Free; end; ... |
Re: Print ToFile
Hallo.
Bei mir funktioniert das hier:
Delphi-Quellcode:
Um die Ausgabe in die Datei zu beenden muss einfach ein leerer String als Dateiname übergeben werden.
uses
Printers; procedure PrintToFile(fn: TFileName); var PrtDevice: array [Byte] of Char; PrtDriver: array [Byte] of Char; PrtPort: array [Byte] of Char; // keep filenames small PrtDeviceMode: Cardinal; begin with Printer do begin GetPrinter(PrtDevice, PrtDriver, PrtPort, PrtDeviceMode); if fn = '' then PrtPort[0] := #0 else Move(fn[1], PrtPort, Succ(Length(fn))); SetPrinter(PrtDevice, PrtDriver, PrtPort, PrtDeviceMode); end; end; Grüße vom marabu |
Re: Print ToFile
Ich hab' da auch mal eine Lösung für geschrieben:
![]() |
Re: Print ToFile
Hallo Omata,
habe Deine Lösung aufgegriffen und gleich ein paar Fragen an Dich. 1. Heisst Deine Unit MyPrinter oder MyPrinters ? In Deinem Text sind verschiedene Schreibweisen. 2. In Deiner Unit MyPrinters hast Du Var FPrintToFile erklärt. Nun entspricht die Schreibweise der Deklaration einer privaten Feldvariablen einer Klasse. Ich finde keine offenlegenden procedures und properties. Ist der UnitCode komplett so? 3. Die veränderte Unit Printers.pas im lokalen Programmverzeichnis wird bei den eingefügten Zeilen bei FPrintToFile vom Compiler angemeckert. Unbekannter Bezeichner. Muß ich da MyPrinters ebenfalls in die Usus Clausel schreiben ? 4. Wie und wo wird nun der FileName im Delphiprogramm eingetragen? Danke EB. |
Re: Print ToFile
Zitat:
Zitat:
Zitat:
Zitat:
Hoffe, dass hilft dir weiter... |
Re: Print ToFile
Danke Omata,
habe das so programmiert und es läuft, zwar nicht ganz wie es sollte aber és liess sich erstellen. Mein Problem, was blieb, war folgendes: Es werden zwei pdf-Files angelegt! Einerseits übergebe ich in FPrintToFile den vollständigen Pfadnamen und den DatewiNamen (*\*.pdf) Andererseits benutze ich eine TDirectoryListBox (in dem nur der Pfad steht), um ein Verzeichnis zu wählen, aus dem ich mit SysUtils.FindFirst, ..FindNext Files einlese. Im QuickReport habe ich Acrobat PDFWriter als StandardDrucker angegeben. Nun legt das Programm je ein PDF-File im Wunschverzeichnis von FPrintToFile ohne Inhalt (0 kByte) und ein PDF-File im falschen Verzeichnis von TDirectoryListBox mit Inhalt (9300 kByte) an. Irgendwie gibt es eine Wechselwirkung von TDirectoryListbox und PDF Writer ?!? Ist doch komisch! Habe zwar durch eigenen WirrCode die richtige Funktion hergestellt, bin aber nicht zufrieden. Vielen Dank für weitere Hilfe. EB |
Re: Print ToFile
Das ist ja wirklich sehr mysteriöse.
Was passiert, wenn du FPrintToFile leer läßt? Geht dann ein Fenster auf, der dich nach dem Dateinamen fragt? Wenn du da jetzt den richtigen Pfad mal von Hand einsetzt, funktioniert dann alles oder hast du das selbe Verhalten? |
Re: Print ToFile
Ja, so dachte ich auch, war richtig verwundert,
Hatte dann mal mit verschiedener Verzeichniswahl in TDirectoryListBox versucht, tatsächlich schreibt er das 9300 kByte pdf immer dhin wie ich es der TDirectoryListBox sage. Querverbindungen von Pfadnamen habe ich im Programm nicht gefunden. Habe auch die Variablennamen für die Pfadbezeichnung umbenannt, hat aber alles nicht geholfen. Wundersam vorallem ist, über Dein FPrintToFile gebe ich ihm PfadNamen + Dateinamen, über TDirectoryListBox bekommt er nur PfadNamen1 und das richtige 9300 kByte PDF schreibt er in PfadNamen1 + Dateinamen. (in PfadNamen + Dateinamen steht nur die 0 kByte Variante. ) Probiere ich heute abend Deine '' Variante aus, muss leider gerade etwas anderes tun. Danke und Grüße EB. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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