Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PDF Printer Name vom Ausgabefile (https://www.delphipraxis.net/207866-pdf-printer-name-vom-ausgabefile.html)

juniorA 10. Mai 2021 17:47

PDF Printer Name vom Ausgabefile
 
Besteht die Chance beim Drucken über einen PDF Drucker an den Namen (mit Pfad) des Ausgabefiles zu kommen, bzw. diesen schon vorher zu setzen?

Incocnito 11. Mai 2021 07:26

AW: PDF Printer Name vom Ausgabefile
 
Hi,

das kommt natürlich immer auf den PDF-Drucker an.
Wir hatten (weit vor der einführung des Standard-PDF-Druckers von Windows) eDocPrintPro eingesetzt,
wodurch wir auch eigene "Drucker" registrieren konnten. Das war ganz nützlich, weil man über die
Registry sagen konnte in welchem Verzeichnis ein Drucker speichern soll und es gab keine
Aufforderung an den Benutzer sich ein Verzeichnis und einen Dateinamen zu überlegen.
Leider weiß ich nicht, wie komplex jetzt das Lizenzsystem von eDocPrintPro (geworden) ist,
oder ob es das überhaubt noch gibt.
Vielleicht kann dir jemand anderes helfen, wenn du dein Problem etwas detailierter beschreibst.
Wozu brauchst du das? Vielleicht gibt es andere Wege.
Bist du an einen speziellen Druckertreiber gebunden? Vielleicht kennt sich damit jemand aus.

Liebe Grüße
Incocnito

juniorA 11. Mai 2021 08:44

AW: PDF Printer Name vom Ausgabefile
 
Liste der Anhänge anzeigen (Anzahl: 1)
Welches Problem habe ich konkret.
Ich habe eine Funktion mit der Bilder an den Drucker ausgeben will.
Wenn ich den Drucken mit Printer.BeginDoc starte, meldet sich der Dialog meines Standarddrucker.
In diesem Fall ist es Microsoft Print to PDF.
Wie bekomme ich zum einen den Pad und den Dateinamen wo die Druckausgabe hin gehen schon voreingestellt und
wie bekomme ich im Nachgang den Pfad und den Dateinamen ausgelesen.
So wie es aussieht, scheint Windows sich das ja zu merken, denn wenn ich das nächste Mal den Dialog aufrufe, stehen da ja die letzten Einstellungen. Auf welche Variablen muss ich da zu greifen???.

himitsu 11. Mai 2021 09:27

AW: PDF Printer Name vom Ausgabefile
 
Du kannst in .Fielename vor dem Execute auch etwas reinschreiben. (mit oder ohne Pfad)


[edit]
Mist, das ist ja kein Dialog vom Programm.

Incocnito 11. Mai 2021 09:39

AW: PDF Printer Name vom Ausgabefile
 
Ich befürchte nur, dass dann der Anwender das trotzdem noch ändern kann,
was ihm dann ja wieder nicht hilft.
Ich weiß nicht, ob man den zuletzt verwendeten Pfad/Dateinamen aus Windows auslesen kann.
Wäre für mich dann aber sowieso eher Quick-and-Dirty ...
Kann man FastReport nicht kostenlos nutzen? Wie sieht das Lizenztechnisch aus?
Der hat doch sicher auch einen PDF-Export. Dann wird der Anwender gar nicht mehr gefragt.
Vielleicht ist das ein Ansatz.

LG Incocnito

himitsu 11. Mai 2021 09:50

AW: PDF Printer Name vom Ausgabefile
 
Mist, das war ja kein "eigener" Dialog.

Aber irgendwie kann man oftmals dennoch den AusgabePfad übergeben. (hängt vom Treiber/Software ab)


Versuch mal einen Dateinamen+Pfad in den Title des Druckauftrags zu schreiben.


Systemverwaltung > Eigenschaften des Druckers, da kann man oft Ausgabepfad und Muster für Dateiname vorgeben.
Wird man bestimmt auch irgendwo in der Registry vorher ändern können.

Und mindestens für "MS Print to PDF" gibt es wohl auch paar Lösungen.
Bei Google suchenpdf-printer filename



Jo, oder eine Report- bzw. PDF-Komponente und dann programmintern.
Wir machen das über FastReport,
bzw. nur Bild(er) in PDF mit ImageEn.

juniorA 11. Mai 2021 10:55

AW: PDF Printer Name vom Ausgabefile
 
Werde leider nicht so glücklich mit den angegeben Link.
Wenn ich den Druckdialog starte, müssen ja irgendwoher die Voreinstellungen kommen. Es sind ja immer die letzten Einstellungen. Wenn alle Stränge reißen, besteht dann nicht die Möglichkeit automatisch ein PDF zu erstellen und dieses im Nachgang dann über einen eigen Dialog umzubenennen. Gibt es dazu einen PDF-Drucker?

noisy_master 11. Mai 2021 11:43

AW: PDF Printer Name vom Ausgabefile
 
Alternativ könntest du auch den PDFCreator (PDFForge.org) nutzen.
Dort kannst du Filenames, Pfade etc entweder im ConfigDialog oder dynamisch von deiner SW aus in der Registry einstellen(und natürlich auch auslesen).

himitsu 11. Mai 2021 12:15

AW: PDF Printer Name vom Ausgabefile
 
Ja, die Drucker-Voreinstellungen kommen doch aus den Einstellungen des Treibers.
[Win] Drucker -> Drucker & Scanner -> Drucker anklicken -> Verwalten -> Druckereigenschaften

juniorA 11. Mai 2021 12:42

AW: PDF Printer Name vom Ausgabefile
 
Habe es mit den PDF-Creator versucht. Da klappt es zumindest, dass schon einmal der Dateiname (aus Printer.titel) übernommen wird. Den Pfad voreinzustellen habe ich nicht hinbekommen. Dort nimmt er immer den von der letzten Ausgabepfad.
Welche Möglichkeiten habe ich eigentlich die Einstellung aus den Treiber auszulesen.
Das eigentlich Grundproblem, was ich habe, ist ein PDF von einen Canvas zu erzeugen und dieses eine vorgegebene Stelle zu speichern. Als BMP oder JPG kann man diesen ja speichern. Gibt es auch ein Lösung welche dieses automatisch als PDF macht oder muss man immer den Drucker zwischenschalten?

Frühe schien alles besser gewesen zu sein. Bin eben auf folgenden Artikel gestoßen
https://www.pcwelt.de/tipps/Textvera...n-1285463.html
In der Aktuellen Version 4.1.3 sehe ich die Möglichkeit der Automatik leider nicht mehr :-((

himitsu 11. Mai 2021 12:45

AW: PDF Printer Name vom Ausgabefile
 
Zitat:

Zitat von himitsu (Beitrag 1489125)
Jo, oder eine Report- bzw. PDF-Komponente und dann programmintern.
Wir machen das über FastReport,
bzw. nur Bild(er) in PDF mit ImageEn.

?


Bei Google suchendelphi pdf komponente

Jumpy 11. Mai 2021 12:54

AW: PDF Printer Name vom Ausgabefile
 
Zitat:

Zitat von juniorA (Beitrag 1489140)
Habe es mit den PDF-Creator versucht. Da klappt es zumindest, dass schon einmal der Dateiname (aus Printer.titel) übernommen wird. Den Pfad voreinzustellen habe ich nicht hinbekommen. Dort nimmt er immer den von der letzten Ausgabepfad.
Welche Möglichkeiten habe ich eigentlich die Einstellung aus den Treiber auszulesen.
Das eigentlich Grundproblem, was ich habe, ist ein PDF von einen Canvas zu erzeugen und dieses eine vorgegebene Stelle zu speichern. Als BMP oder JPG kann man diesen ja speichern. Gibt es auch ein Lösung welche dieses automatisch als PDF macht oder muss man immer den Drucker zwischenschalten?

Der PDFCreator hat doch eine API. Mit der kann man komplett ohne Userinteraktion/Dialog an einen vorgegebenen Ort speichern.

Michael II 11. Mai 2021 13:59

AW: PDF Printer Name vom Ausgabefile
 
Zitat:

Zitat von juniorA (Beitrag 1489115)
Welches Problem habe ich konkret.
Ich habe eine Funktion mit der Bilder an den Drucker ausgeben will.
Wenn ich den Drucken mit Printer.BeginDoc starte, meldet sich der Dialog meines Standarddrucker.
In diesem Fall ist es Microsoft Print to PDF.
Wie bekomme ich zum einen den Pad und den Dateinamen wo die Druckausgabe hin gehen schon voreingestellt und
wie bekomme ich im Nachgang den Pfad und den Dateinamen ausgelesen.
So wie es aussieht, scheint Windows sich das ja zu merken, denn wenn ich das nächste Mal den Dialog aufrufe, stehen da ja die letzten Einstellungen. Auf welche Variablen muss ich da zu greifen???.

Wenn ich dich richtig verstehe, willst du Bilder als PDF drucken und dabei direkt in deinem Programm den Filenamen des PDFs und den Drucker festlegen ohne dass der Benutzer Dialoge (Drucker/Speichern) angezeigt erhält.

Das Beispiel von stackoverflow (Code unten rein kopiert, damit dieser nicht verloren geht, wenn stackoverflow eingestellt werden sollte) hilft dir nicht?

Drucker festlegen, Zielfile festlegen und dann mit Begindoc loslegen...(Code unten)
Bei meinem Windows 10.0.19043.964 wird so kein Dialog angezeigt - und das Speichern funktioniert.

Delphi-Quellcode:
procedure TForm89.Button1Click(Sender: TObject);
var
    PrtIndex  : Integer;
    DeviceMode : THandle;
    Device,
    Driver,
    Port      : array [0..255] of Char;
begin
    // Warning: The printer name is case sensitive
    PrtIndex := Printer.Printers.IndexOf('Microsoft Print to PDF');
    if PrtIndex < 0 then
        raise Exception.Create('Printer not found');
    Printer.PrinterIndex := PrtIndex;
    Printer.GetPrinter(Device, Driver, Port, DeviceMode);
    Printer.SetPrinter(Device, Driver, 'C:\Users\micha\Desktop\TestPrintToPdf.pdf', 0);
    Printer.BeginDoc;
    Printer.Canvas.TextOut(100, 100, 'Hallo delphipraxis.net');
    Printer.EndDoc;
end;

bcvs 11. Mai 2021 14:50

AW: PDF Printer Name vom Ausgabefile
 
Zitat:

Ich habe eine Funktion mit der Bilder an den Drucker ausgeben will.
Oder schau dir mal SynPDF an:
https://github.com/synopse/SynPDF

Damit kannst du auf den Canvas des PDFs schreiben und malen und direkt ein PDF erzeugen, ohne irgendwelche Druckertreiber.

juniorA 11. Mai 2021 15:29

AW: PDF Printer Name vom Ausgabefile
 
Bin jetzt wieder bei Microsoft Print to PDF gelandet. Das Beispiel von Michael Funktioniert.:-D
Die Folgende Variante mit SynPDF hat auch so seinen Charm aber dafür bedarf es einen ausgeschlafenen Kopf den ich hoffentlich morgen wieder habe :wink:

noisy_master 12. Mai 2021 06:45

AW: PDF Printer Name vom Ausgabefile
 
Den Pfad kannst du doch einstellen: In dem von dir Verlinkten Artikel ist es sogar erläutert.
Ansonsten kannst du es von deinem Programm aus in der Registry einstellen/auslesen: (Ist allerdings das Setting von PDFCreator 2.4 und ich kann gerade nicht kontrollieren, ob sich das mit neuen Versionen geändert hat):
HKEY_CURRENT_USER\Software\PDFCreator\Program\Last SaveDirectory bzw. AutoSaveDirectory.

Wenn du keinen Drucker "dazwischenschalten" möchtest kannst du auch z.B. synPDF aus dem Moromot Package nehemen. https://www.youtube.com/watch?v=IJSVD-x9mpM zeigt dir, wie du eine "Grafik" auf einen "SynPDF Canvas" einfügst und das PDF speicherst.

Gruß

juniorA 12. Mai 2021 08:28

AW: PDF Printer Name vom Ausgabefile
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der Tipp mit der Registry klingt vielversprechend aber kann beider aktuelle Version leider den Pfad, den Namen und das Autosave nicht finden. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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