Entwickler-Ecke
Sonstiges (Delphi) - Drucken / PDF erstellem
Silvio - Di 13.03.12 20:11
Titel: Drucken / PDF erstellem
Hallo,
ich habe ein Programm geschrieben, in dem Memofelder und Images sind. Wie kann ich diese im ausdrucken, oder vielleicht sogar als PDF speichern, um es späer ausdrucken zu können.
Ich habe den "PrintDialog" gefunden, weiß jedoch nicht, was ich genau schreiben soll, damit ich das speichern bzw. drucken kann.
Vielen Dank schon mal für eure Hilfe
LG S
bummi - Di 13.03.12 20:23
Zum Druck könntest Du, zu Fuß:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| uses Printers;
..... Printer.Begindoc; Printer.Canvas. Printer.Enddoc; |
verwenden ...
Du könntest per OLE Word fernsteuern
oder Du verwendest einen Reportgenerator, persönlich würde ich FastReport empfehlen ...
Silvio - Mi 14.03.12 08:33
Hi,
vielen Dank für die schnelle Antwort. Leider habe ich keinen Schimmer was du meinst.
Ich habe mir Delphi selbst beigebracht und leider noch nicht alle Sachen und Tools verstanden.
Habe gestern Abend noch das Geschriebene ausprobiert, jedoch leider ohne Erfolg.
Wenn ich das Formular in ein PDF umwandle, geht das mit 2 oder 3 Handgriffen einfacher, bzw. geht das überhaupt??
Ich glaube, dass wäre mir sogar lieber, dann kann jeder Benutzer selbst entscheiden, ob es gedruckt werden soll.
Dank und LG S
bummi - Mi 14.03.12 08:43
Ich habe noch keine Vorstellung was genau Du vor hast.
Wenn Du nur Dein Formular drucken willst, wähle beim Druckerdialog einen PDF-Drucker aus und rufe
auf. Manche Komponenten (z.B. TRichedit) werden hierbei allerdings nicht wie gewünscht dargestellt.
Silvio - Mi 14.03.12 08:53
Also ich wähle im form1 etwas bestimmtes aus und bekomme dann in form 2 untersiedliche Ausschreibungstexte in einem Memofeld angezeigt. Außerdem bekomme ich ebenfalls ein Bild von der ausgewählten Sache zu sehen. Dieses möchte ich dann drucken oder ein PDF von erstellen.
Kann nur leider im Moment nichts ausprobieren, da ich an der Abeit bin.
Danke für deine schnellen Antworten und Hilfestellungen
jaenicke - Mi 14.03.12 09:04
PDFs lassen sich in Delphi leicht mit der Synopse PDF Engine erstellen. ;-)
[url]synopse.info/fossil/wiki?name=Downloads[/url]
Silvio - Do 15.03.12 08:53
Guten Morgen,
das mit "print" hat gut funtioniert, aber leider nicht so wie ich es mir gedacht habe.
Werde am Wochenende noch einmal die anderen Vorschläge ausprobieren.
Vielen Dank
Silvio - Fr 16.03.12 18:07
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var r:TRect; s:String; begin s := Memo1.Text; r:=memo1.ClientRect; Canvas.TextRect(r,s,[tfWordBreak]); Canvas.StretchDraw(Rect(100,100,200,200),Image1.Picture.Graphic); end; |
Hallo, habe das eben ausprobiert. Doch leider kommt ein Fehler bei der eckigen Klammer.
Ich habe keine Ahnung was ich falsch mache.
Moderiert von
Martok: Delphi-Tags hinzugefügt
bummi - Fr 16.03.12 19:14
Du machst nichts falsch, Du hast wahrscheinlich eine alte Delphiversion mit einer anderen Implementierung von TextRect.
Delphi-Quelltext
1: 2: 3:
| DrawTextEx(Canvas.Handle, Pchar(s), Length(s), r, 16, nil); |
der Aufruf in den altern Versionen
Delphi-Quelltext
1:
| Canvas.TextRect(r,0,0,s); |
bringt keinen Zeilenumbruch
Delete - Sa 17.03.12 00:21
Silvio hat folgendes geschrieben : |
Hallo,
ich habe ein Programm geschrieben, in dem Memofelder und Images sind. Wie kann ich diese im ausdrucken, oder vielleicht sogar als PDF speichern, um es späer ausdrucken zu können. |
Viele Wege führen nach Rom. Du könntest dir z.B. einen PDF-Drucker installieren (ich bevorzuge den
PDF-Creator [
http://www.pdfforge.org/]), und druckst dann einfach auf den Canvas des Druckers. Ich hab mal ein kleines Tool gemacht, mit dem man eingescannte Buchseiten in eine Listbox einlesen, entsprechend anordnen (sortieren) und als PDF-Datei ausdrucken konnte. Meine Druckerprozedur sah so aus:
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: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TFormMain.Button_KonvertClick(Sender: TObject); VAR Bild : TImage; i,z : Integer; Datei : String;
begin IF ListBox_Bilder.Count = 0 THEN EXIT;
Bild := TImage.Create(FormMain);
z := ListBox_Bilder.Count -1;
Printer.Title := Edit_Projektname.Text; Printer.BeginDoc;
FOR i := 0 TO z DO BEGIN Datei := ListBox_Bilder.Items[i]; IF FileExists(Datei) THEN BEGIN Bild.Picture.Bitmap.LoadFromFile(Datei); Printer.Canvas.Draw(PixLinks,PixOben,Bild.Picture.Graphic); IF i < z THEN Printer.NewPage;
StatBar.Panels[1].Text := IntToStr(i); Application.ProcessMessages; END; END;
Printer.EndDoc;
FreeAndNil(Bild); StatusBarAktuell; end; |
Fertiges Programm incl. Quellcode und Handbuch herunterladen [
http://www.pcheil.de/Bin/PC-Heil%20BildToPDF%20v1.0.zip]
Silvio - So 18.03.12 15:09
Hallo,
also bei mir funtioniert das drucken zwar, aber es kommt weder ein Bild noch der Text aus dem Memofeld.
Ich weiß nicht wo mein Fehler liegt.
Bitte helft mir!!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm2.Drucken1Click(Sender: TObject); var r:TRect; s:String; begin Printer.Begindoc; Printer.Canvas.Font.Size := 12; Printer.Canvas.Font.Name := 'Verdana'; s := Memo1.Text; r:=memo1.ClientRect; DrawTextEx(Canvas.Handle, Pchar(s), Length(s), r, 16, nil); Canvas.Draw(100,100,Image1.Picture.Bitmap); Printer.Enddoc; end; |
Danke
Moderiert von
Narses: Delphi-Tags hinzugefügt
bummi - So 18.03.12 15:13
Auf Deinem Form müsste jetzt das zu sehen sein was Du malst, es sei denn es ist verdeckt von anderen Controls.
Es fehlt ein Printer. vor Deinem Canvas, so sprichst Du das Canvas Deiner Form an
Delphi-Quelltext
1: 2:
| DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16, nil); |
Silvio - So 18.03.12 15:30
Ja danke,
er druckt jetzt wenigstens schon mal den Anfang, jedoch nur immer 20 Buchstaben hintereinander und dann wieder eine neue Zeile.
Den Printer habe ich doch drin, was meinst du mit Canvas Diner Form?
Moderiert von
Narses: Beiträge zusammengefasstAh, ok. Habe das mit dem Printer verstanden.
Wie kann ich denn dem Bild sagen, an welcher Blattstelle es sein soll, also wenn ich es rechsoben haben möchte beispielsweise??
Silvio - So 18.03.12 15:51
Woran erkenne ich das Rechteck?
Habe die Position jetzt ändern können
Wie kann ich die Größe des Bildes bestimmen?
Unter höhe und breite tut sich gar leider gar nichts
jaenicke - So 18.03.12 15:53
Silvio hat folgendes geschrieben : |
Wie kann ich die Größe des Bildes bestimmen?
Unter höhe und breite tut sich gar leider gar nichts |
Suchst du vielleicht Canvas.StretchDraw oder StretchBlt? ;-)
Silvio - So 18.03.12 16:02
Printer.Canvas.StretchDraw (r,Image1.Picture.Bitmap);
ok danke, bild wird größer, aber bestimmen kann ich es immer noch nicht.
StretchBlt gibt es nicht
jaenicke - So 18.03.12 16:48
Silvio hat folgendes geschrieben : |
StretchBlt gibt es nicht |
Nicht in Canvas, das ist eine einzelne Funktion. Wenn die nicht gefunden wird, fehlt dir die Unit Windows in der uses Klausel.
Silvio - Mo 19.03.12 20:37
DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16, nil);
hallo,
für was steht die 16?
ich habe jetzt einige sachen ausprobiert, er druckt das bild auch groß, aber immer nur an den linken rand, und ich möchte es gerne am rechten rand haben. der text aus dem memofeld soll rechts ausgegeben werden, aber der druckt immer nur drei zeilen und in jeder zeile max 10 buchstaben, an was liegt das??
hier noch mal mein quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm2.Drucken1Click(Sender: TObject); var r:TRect; s:String; begin Printer.Begindoc; Printer.Canvas.Font.Size := 12; Printer.Canvas.Font.Name := 'Verdana'; s := Memo1.Text; r:=memo1.ClientRect; DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16, nil); Printer.Canvas.TextRect(r,50,50,s); Printer.Canvas.Draw(4000,500,Image1.Picture.Bitmap); Printer.Enddoc; |
LG und danke
Moderiert von
Martok: Delphi-Tags hinzugefügt
bummi - Di 20.03.12 00:23
16 >> DT_WORDBREAK = $10;
versuch mal zu verstehen was TRect ist und wofür r hier verwendet wird ...
Jaenicke hatte Dir schon einen Link bzgl. DrawTextEx geschickt.
Hast Du schon einmal F1 gedrückt wenn der Cursor auf dem entsprechenden Wort steht.
Silvio - Di 20.03.12 20:21
das trect ein kasten ist, habe ich schon verstanden...
... jedoch wie ich den kasten an eine von mir ausgewählte stelle setzen kann, nicht!
und wenn F1 mir weiterhelfen würde, würde ich hier in diesem forum keine fragen stellen!
Danke
jaenicke - Di 20.03.12 21:01
Silvio hat folgendes geschrieben : |
... jedoch wie ich den kasten an eine von mir ausgewählte stelle setzen kann, nicht! |
Entweder kannst du die Koordinaten manuell verändern (Rect.Top, Rect.Left, ... setzen) oder OffsetRect benutzen:
http://msdn.microsoft.com/en-us/library/dd162746.aspx
Silvio - Di 20.03.12 22:37
Hallo, dann lassen wir mal die ganze drucken geschichte, funtioniert mit Bild überhaupt nicht.
wie sieht es denn jetzt damit aus, memos und images in ein pdf umzuwandeln.
dann kann ich mir den ganzen quatsch mit dem drucken sparen, oder muss ich hier auch die seite erstellen??
ich bitte um erstgemeinte hilfe mit erklärung für anfänger
Danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!