Autor |
Beitrag |
Oliver Maas
      
Beiträge: 55
|
Verfasst: Mi 21.11.12 18:11
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; r.Bottom := 1500; Printer.Canvas.TextRect(r,1,1,s); DrawTextEx(Printer.Canvas.Handle, Pchar(s), Length(s), r, 16, nil); 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 Martok: Code- durch Delphi-Tags ersetzt
|
|
Megamuckel
Hält's aus hier
Beiträge: 1
Erhaltene Danke: 1
|
Verfasst: Mi 21.11.12 18:40
Dein aktiver Drucker ist "PDFCreator" ??
Für diesen Beitrag haben gedankt: Oliver Maas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 55
|
Verfasst: Do 22.11.12 18:08
jaenicke hat folgendes geschrieben : | 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 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 23.11.12 11:56
Oliver Maas hat folgendes geschrieben : | Wie müsste ich das machen, wenn ich 2 oder mehr Seiten pro pdf bräuchte?! |
Eigentlich nur an passender Stelle Printer.NewPage aufrufen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Oliver Maas 
      
Beiträge: 55
|
Verfasst: 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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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  klickst.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Für diesen Beitrag haben gedankt: Oliver Maas
|
|
Oliver Maas 
      
Beiträge: 55
|
Verfasst: Mo 26.11.12 13:01
Hm, irgendwie bin ich zu blöd, diesen Smiley-Button zu finden... 
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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:
www.entwickler-ecke....itprofile&page=2
Für diesen Beitrag haben gedankt: Oliver Maas
|
|
Serbsis
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 11.12.12 10:52
Der Smiley-Button war vor mir anfangs auch versteckt...
|
|
|