Entwickler-Ecke

Sonstiges (Delphi) - pdf erstellen mit eigenem Dateinamen


Oliver Maas - Mi 21.11.12 18:11
Titel: pdf erstellen mit eigenem Dateinamen
Hallo allerseits

ich erzeuge ein pdf File mit rein textuellem Inhalt. Und zwar so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 
procedure TForm1.Button1Click(Sender: TObject);
var
r:TRect;
s:String;
begin
s := Memo1.Text;
r := Memo1.ClientRect;
if PrintDialog1.Execute then
   begin
   Printer.Begindoc;
   Printer.Title := 'TITEL';
   Printer.Canvas.Font.Size := 12;
   Printer.Canvas.Font.Name := 'Verdana';
   s := Memo1.Text;
   r := Memo1.ClientRect;
   r.Right  := 1500// muss sein, ansonsten zu kleine Fläche!
   r.Bottom := 1500;
   Printer.Canvas.TextRect(r,1,1,s);
   DrawTextEx(Printer.Canvas.Handle, Pchar(s), Length(s), r, 16nil);
   Printer.Enddoc;
   end;
end;


Das funktioniert, ich bekomme ein pdf mit Inhalt (Text aus einem Memo), aber der Dateiname ist immer unknown.pdf, unknown1.pdf, unknown2.pdf usw.
Weiß jemand, wie ich auf diese Art und Weise den Dateinamen festlegen kann?

vielen Dank
Olli

Moderiert von user profile iconMartok: Code- durch Delphi-Tags ersetzt


Megamuckel - Mi 21.11.12 18:40

Dein aktiver Drucker ist "PDFCreator" ??


jaenicke - Mi 21.11.12 21:57

Vermutlich gar nicht, für diesen Zweck brauchst du eine PDF-Komponente, auf die du dann zugreifen kannst. So druckst du einfach irgendwo hin, je nach Einstellung deines PDF-Druckers. Du kannst höchstens schauen, ob du auf dessen Einstellungen zugreifen kannst, ob der eine API hat oder so.


Oliver Maas - Do 22.11.12 18:08

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Vermutlich gar nicht, für diesen Zweck brauchst du eine PDF-Komponente, auf die du dann zugreifen kannst. So druckst du einfach irgendwo hin, je nach Einstellung deines PDF-Druckers. Du kannst höchstens schauen, ob du auf dessen Einstellungen zugreifen kannst, ob der eine API hat oder so.


Danke. So in etwa dachte ich mir das schon. ;)
Inzwischen hab ich folgendes gefunden: wenn ich nun ohne den TPrinterDialog drucke, und zwar so:
Zitat:

Printer.SetPrinter(PAnsiChar(PrinterName),PAnsiChar(Driver),PAnsiChar(Port),Devmode);

macht er folgende Files: unknown.pdf, dann aber TITEL.pdf, TITEL1.pdf usw.
Das ist zwar nicht perfekt, aber schon viel besser als vorher.

Olli


Oliver Maas - Fr 23.11.12 11:52

Hmm, noch eine Frage hätte ich dazu. Wenn ich nur eine Seite erstelle, funktioniert das prima (inzwischen nehme ich den PDFCreator, nun
ist auch der Dateiname gar kein Problem mehr).

Wie müsste ich das machen, wenn ich 2 oder mehr Seiten pro pdf bräuchte?!

viele Grüße
Olli


Nersgatt - Fr 23.11.12 11:56

user profile iconOliver Maas hat folgendes geschrieben Zum zitierten Posting springen:
Wie müsste ich das machen, wenn ich 2 oder mehr Seiten pro pdf bräuchte?!

Eigentlich nur an passender Stelle Printer.NewPage aufrufen.


Oliver Maas - Fr 23.11.12 18:02

Stimmt. Danke. So, nun gehen Dateiname und auch 2./3. (usw.) Seite korrekt.
Jetzt ist fast alles perfekt, bis auf eine Kleinigkeit: jede erste Zeile auf der pdf-Seite hat zwar
vorne den korrekten Inhalt, hintendran erscheint aber (von 2 Quadraten getrennt) der Inhalt der 2.Zeile (überflüssigerweise).

Sieht also so aus:
Zeile1 (Quadrat) (Quadrat) Zeile2
Zeile2
Zeile3

In meinem Memo ist das aber nicht so, nur im pdf...
Wenn ich ein 2-seitiges pdf mache, ist die erste Zeile der 2.Seite auch so komisch.

Olli

PS: wie kann ich "Danke" verteilen (Forumssoftware-Bedienung)?!


Nersgatt - Fr 23.11.12 18:10

Ich vermute, dass da in Deinem Text noch Sonderzeichen drin sind, die als Quadrat dargestellt werden. Vermutlich ein Carrige Return + Line Feed. Die kannst Du abschneiden (siehe Hilfe: Copy).

Ein Danke verteilst Du, indem Du unter dem Beitrag, für den Du Dich bedanken möchtest, auf :zustimm: klickst.


Oliver Maas - Mo 26.11.12 13:01

Hm, irgendwie bin ich zu blöd, diesen Smiley-Button zu finden... :?


jaenicke - Mo 26.11.12 13:38

Du musst in den Einstellungen AJAX aktiviert haben. (Wie auch für ein paar andere nette Sachen. ;-))
Hier in den erweiterten Einstellungen ganz unten:
http://www.entwickler-ecke.de/profile.php?mode=editprofile&page=2


Serbsis - Di 11.12.12 10:52

Der Smiley-Button war vor mir anfangs auch versteckt...