Autor |
Beitrag |
HotCoffee
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: So 25.07.10 14:53
Hallo,
ich arbeite grade an nem kleinen Progrämmchen, ich hab nicht sonderlich viel Ahnung, daher hoffe ich, dass ihr mir hier mal ein bischen helfen könnt...
Also Folgendes:
Ich hab hier einige Daten und diese in ner Datei Gespeichert, ich möchte jetzt gerne die einzelnen Verbundvariablen auslesen und deren Daten in nem PDF-Dokument ausgeben. Meine Idee bis jetzt war, die Daten in ein Image zu schreiben und das dann via PowerPDF zu speichern.
Beispiel:
In der Datei steht:
Alex; 16;
Maik; 18;
Kai; 36;
Ich lese die einzelnen Daten aus und schreibe nacheinander in ein Image, so dass da steht:
Name | Alter
--------------------
Alex | 16
Maik | 18
Kai | 36
So und das würde ich dann gerne so als PDF ausgeben. Da entsteht Problem Nr.1 ich blicke bei PowerPDF nich durch, daher hab ich mir das Beispiel genommen, wo ein Bild über ein Formular geöffnet wird und als PDF ausgegeben wird und hab die Unit so verändert, dass nurnoch das Image geöffnet wird, an das Dok angehängt und speichert. Dummerweise funktioniert es nichtmehr. Es wär sehr lieb, wenn mir hier mal jemand zeigen könnte, wie man das richtig macht, also Image ans PDF anhängen und speichern.
Zu Problem Nr.2, es wär natürlich schöner, wenn das was ja Text ist im PDF auch hinter noch Text ist und nicht Bild. Also wenn jemand da ne Idee hat und die möglichst ohne irgendwelche externen Programme geht und ohne Ausgabe über Drucker... etc... würd ich mich sehr freuen
LG
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 28.07.10 10:44
Guckst du hier:
www.est.hi-ho.ne.jp/...eshi_kanno/powerpdf/
In dem Downloadarchiv (.zip) gibt es einen Ordner mit Beispielen. Dort müsste sich sicher was finden lassen (FontDemo z.B). Konnte es nicht ausprobieren, er meckert hier wieder um "Klasse nicht gefunden" obwohl die Unit eingebunden ist, in der die Klasse ist.
Komponenten in Delphi installieren  und dann auch noch die Bug-Version von 2005  Muss ich jetzt nicht haben, ich denke mal dort findest du schon selbst was du brauchst.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Mi 28.07.10 11:54
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
erstmal Danke,
wie ich oben bei mir schon erwähnt habe, ich habe PowerPdf schon und habe auch die Beispiele schon gesehen. Ein Beispiel erzeugt ein Formular, mit welchem man ein Bild laden kann und speichert das als PDF ab. Das Problem ist, ich verstehe nicht, wie es das tut. Wenn ich versuche, aus dem Beispiel eine Procedur zu basteln, die nachdem ein PDF erstellt wurde ein Bild als neue Seite anhängt und man es danach speichern kann, klappt das leider garnicht... und da wär es nett, wenn jemand, der da mehr durchblickt - und davon gibt es hier ja ne menge - mir helfen könnte.
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 28.07.10 12:26
Kannst du den entsprechenden Teil des Sourcecodes von dir und vom Beispiel hier zeigen? Hat sicherlich nicht jeder Lust, sich irgendwelche Kompos runterzuladen und zu installieren...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Mi 28.07.10 18:57
Also, momentan erstelle ich aus den Daten ein Bild und versuche das dann über folgende Unit in ein PDF zu verwandeln, was aber nicht klappt, das PDF wird mit der richtigen Seitenanzahl erstellt, leider sind alle Seiten leer.
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75:
| unit mImgToPdf;
interface
uses SysUtils, Classes, PReport, ExtCtrls, StdCtrls, Buttons, PRJpegImage, PdfDoc, ShellApi, Graphics;
type TImgToPdf=class(TComponent)
private PRPage: TPRPage; PRLayoutPanel: TPRLayoutPanel; PRJpegImage: TPRJpegImage; PReport: TPReport; public constructor Init; function AddPage (APicture : TPicture) : Boolean; procedure PRPagePrintPage(Sender: TObject; ACanvas: TPRCanvas); destructor SaveClose(FileName: String);
end; VAR Owner : TImgToPdf;
implementation
constructor TImgToPdf.Init; begin PReport := TPReport.Create(Owner); PRPage := TPRPage.Create(Owner); PRLayOutPanel := TPRLayoutpanel.Create(PRPage); PRJpegImage := TPRJpegImage.Create(PRLayoutPanel); PRJpegImage.Stretch:=True; PReport.BeginDoc; PRPage.OnPrintPage:=PRPagePrintPage;
end;
procedure TImgToPdf.PRPagePrintPage(Sender: TObject; ACanvas: TPRCanvas); VAR Dest: TPRDestination; begin
Dest := PReport.CreateDestination; with Dest do begin DestinationType := dtXYZ; Left := -10; Top := -10; Zoom := 1; end; PReport.OpenAction := Dest;
end;
function TImgToPdf.AddPage (APicture : TPicture) : Boolean; begin try
PRJpegImage.Picture:=APicture; PrJpegImage.Repaint; PReport.Print(PRPage); result:=True; except result:=False; end; end; destructor TImgToPdf.SaveClose(FileName: String); begin PReport.FileName:=Filename; PReport.EndDoc; end;
end. |
Die Beispiel-Unit von PowerPDF sieht so aus: popcomp.no-ip.info:6...ageExample/Unit1.pas
Zuletzt bearbeitet von HotCoffee am Mi 28.07.10 18:59, insgesamt 1-mal bearbeitet
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 28.07.10 18:59
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Mi 28.07.10 19:53
... eher nicht, da ich ja unabhängig von irgendwelchen externen Programmen sein möchte.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 29.07.10 09:30
Hallo,
zur Erstellung von PDFs direkt aus meinen Delphi-Programmen(auch D 3) nutze ich Tnpdf um Text als Text und Bilder in PDFs zu speichern.
tnpdf ist nicht sehr umfangreich aber gerade das ist ja manchmal ein Vorteil.
Das Arbeiten mit tnpdf ist ähnlich der Druckausgabe mit Printer, ein Demo-Beispiel gibt es auch dazu.
Link zu tnpdf: Nishita's PDF Creation VCL
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 29.07.10 10:04
HotCoffee hat folgendes geschrieben : | Ein Beispiel erzeugt ein Formular, mit welchem man ein Bild laden kann und speichert das als PDF ab. |
Aso, ja, das hatte ich mal bei nem Reportgenerator. Der hat alles auf ein Canvas gemalt, aber als PDF gedruckt war es dann doch wieder Schrift (und kein Bild).
HotCoffee hat folgendes geschrieben : | Also, momentan erstelle ich aus den Daten ein Bild und versuche das dann über folgende Unit in ein PDF zu verwandeln, was aber nicht klappt, das PDF wird mit der richtigen Seitenanzahl erstellt, leider sind alle Seiten leer. |
Das ist logisch (denk ich zumindest).
Edit: Jetzt find ichs nichtmehr so logisch nachdem ich deinen Code nochmal angeguckt hab  Ich hab mal die ganze Sülze die ich geschrieben hatte wieder gelöscht
Also:
PowerPDFRef.pdf hat folgendes geschrieben: | TPRJpegImage properties
property Align: TAlign;
Determines how the control aligns within its container (or parent control).
property Printable: boolean;
Determines whether the control will be printed or not.
property Picture: TPicture;
Specifies the image that appears on the control. Only TJpegImage is allowed |
Ist printable auf true? Vermutlich.
Aber: Du verwendest TPicture statt TJPEGImage. Ob das ne Auswirkung hat, keine Ahnung, aber wenns schon so da steht. Jetzt ist TJPEGImage glaub ich kein TPicture...hmm, TGraphic. Guck einfach nochmal ob du auch nen JPG verwendest
Aber: da gibts auch tolle Sachen wie TPRLabel und TPRText, ist vielleicht besser für deine Variablen. Probiers mal damit.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Sa 31.07.10 02:42
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Sa 31.07.10 11:49
HotCoffee hat folgendes geschrieben : |
... ja, ist ein JPG...
|
... aber ist auch ein TJpegImage?!?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Sa 31.07.10 14:01
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 31.07.10 18:01
Jo, klingt logisch.
Funktioniert denn die angehängte Beispielunit von dir? Dann würd ich gaaaanz langsam einfach eins nach dem andern ändern und gucken, ab wann es nichtmehr geht. Dort liegt dann das Problem. Zu der Unit gehört übrigens noch eine .dfm Datei mit den Daten, was auf der Form liegt.
Wenn du dann erstmal die Stelle hast wo der Fehler auftritt (bzw ab dem es nicht mehr funktioniert), dann können wir vermutlich eher weiterhelfen. Notfalls müsste man sich dann mal den SourceCode der Komponente an der Stelle angucken.
HotCoffee hat folgendes geschrieben : |
Xion hat folgendes geschrieben : |
Aber: da gibts auch tolle Sachen wie TPRLabel und TPRText
|
...dummerweise wird die ganze Kiste dadurch dann nurnoch komplizierter. |
Ja...vielleicht. Aber du könntest damit mal gucken, ob ein Label gedruckt wird. Wenn das Label angezeigt wird aber das Bild nicht, wäre man schon wieder schlauer. Außerdem ist bei dem Bild das Problem, dass es gedruckt ne miese Qualität geben wird und die pdf-Datei auch unnötig groß ist.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Sa 31.07.10 18:36
Xion hat folgendes geschrieben : | Jo, klingt logisch.
Aber du könntest damit mal gucken, ob ein Label gedruckt wird. |
Auch ein Label wird nicht gedruckt. Grade das Formular ist ja das Problem, wenn ich alles was in der Beispielunit in einzelnen Diensten getan wird auch in dieser zu einem zusammenfasse, dann klappt alles noch. Wenn ich dann aber alles genauso in einer anderen Unit mache und diese dann wieder in ein Programm einbinde, dann funktioniert es nichtmehr.
Die Sache ist ja, ich will die Reports, Labels und Images nicht auf einem Formular haben, sondern ich will nur die Funktionen nutzen, also PDF erzeugen, Bild als Seite anhängen und abspeichern.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 31.07.10 20:27
Poste mal die dfm Datei zu der Beispielunit.
Der Code in der Datei sieht ungefähr so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| object Label2: TLabel Left = 104 Top = 584 Width = 164 Height = 13 Anchors = [akLeft, akBottom] end |
Daraus könnte man dann erkennen, welche Werte du bei der dynamischen Erstellung angeben musst.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
HotCoffee 
Hält's aus hier
Beiträge: 14
Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,
|
Verfasst: Sa 31.07.10 20:52
Ich weiß schon wie die aussieht
Die .dfm Datei ist auf der gleichen Seite zu finden, wie oben schon erwähnt:
Moderiert von Narses: Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 31.07.10 22:03
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: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| object ScrollBox1: TScrollBox Left = 0 Top = 29 Width = 760 Height = 575 Align = alClient Color = clGray ParentColor = False TabOrder = 1 object PRPage1: TPRPage Left = 14 Top = 14 Width = 700 Height = 873 OnPrintPage = PRPage1PrintPage MarginTop = 32 MarginLeft = 32 MarginRight = 32 MarginBottom = 20 object PRLayoutPanel1: TPRLayoutPanel Left = 33 Top = 55 Width = 634 Height = 797 Align = alClient object PRJpegImage1: TPRJpegImage Left = 16 Top = 6 Width = 603 Height = 780 SharedImage = True end end end end object PReport1: TPReport FileName = 'JpegImageExample.pdf' Author = 'Takeshi Kanno' CreationDate = 37085.524204004630000000 Creator = 'JpegImageExample' UseOutlines = False Left = 386 Top = 6 end |
Was du machst:
Delphi-Quelltext 1: 2: 3: 4: 5:
| PRLayOutPanel := TPRLayoutpanel.Create(PRPage); PRJpegImage := TPRJpegImage.Create(PRLayoutPanel); PRJpegImage.Stretch:=True; PReport.BeginDoc; PRPage.OnPrintPage:=PRPagePrintPage; |
Ich hab ehrlich gesagt nicht ganz so den Durchblick wo der Haken ist. Ich hätte noch als Vermutung, dass deine Page ne größe von 0/0 hat...(eher abwegig)
Edit:
Ich bin auf jeden Fall dafür, dass du mal versucht ein Label zu drucken, damit man rauskriegt obs am Image oder am Drucken liegt. Danach würde ich schrittweise anfangen, die ganzen Werte wie sie in der DFM stehen auch beim dynamischen erstellen anzugeben, so sinnlos sie auch scheinen mögen. Auch das Teil mal auf ne ScrollBox platzieren. Vielleicht müsste auch das OnPrintPage VOR dem BeginDoc zugewiesen werden
Edit2:
Wenn dus noch nicht gemacht hast: Mach deine Funktion AddPage so, dass sie als Parameter den Dateinamen bekommt und dann in das Image über LoadfromFile reinläd.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|