Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - pdf-Datei erstellen und speichern


C++arsten - Fr 22.07.11 09:53
Titel: pdf-Datei erstellen und speichern
Hallo,

ich starte mit Printer.BeginDoc, dann wird der Drucker "gefüllt", es endet mit Printer.EndDoc. Drucken funktioniert, sogar mit xps-Drucker. Ich möchte nun aber die Datei nicht drucken, sondern als pdf speichern. Hat jemand dazu einen Rat? Danke!

MfG
Carsten


uko - Fr 22.07.11 11:28

virtuellen PDF Drucker installieren und auf den drucken (z.B. FreePDF). Oder mal die diversen PDF Komponenten (QuickPDF, Gnostice, ...) ausprobieren.


C++arsten - Sa 23.07.11 09:52

ich probiers mal und melde mich, danke.


Kawa - Sa 23.07.11 18:00

Hallo,
aus Memo oder Richedit Datei willst du als PDF Speichern!


C++arsten - So 24.07.11 09:58

Hallo, pdfcreator scheint das Problem zu lösen.
Ich melde mich, wenn das Problem abschließend gelöst ist.

MfG Carsten


C++arsten - So 24.07.11 17:06

pdfcreator läuft. Danke erst einmal für die Antworten.

Nun habe ich noch eine Frage. Das Drucken soll im Hintergrund erfolgen, d. h. der user soll nicht über den Druckerdialog gehen müssen. Mir würde ein Codeschnipsel reichen, wie ich eine Seite mehrfach als pdf in einem gegebenen Verzeichnis (soll programmseitig festgelegt werden) abspeichern kann.

Hat jemand einen Rat?


Kawa - So 24.07.11 22:42

man kann auch so lösen ohne Komponente und Drucker Dialog!

die Units einfügen in "uses"

Delphi-Quelltext
1:
SynCommons, SynPdf, SQLite3Pages,Fastmm4                    



direkt Speichern

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
   begin
 with TGDIPages.Create(self) do
  try            
   BeginDoc;      
    Font.Size := 9;
    AppendRichEdit(RichEdit.Handle);
   EndDoc;       

    ExportPDF(ChangeFileExt(paramstr(0),'test.pdf'),true,false);
    finally     
      Free;
 end;
 end;

---------------------------
mit SaveDialog Speichern


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:
procedure TForm1.Button2Click(Sender: TObject);
   var
  dateiname:String;
BEGIN
  if SaveDialog1.Execute then
          begin
 with TGDIPages.Create(self) do
  try              
   BeginDoc;      
    Font.Size := 9;
    AppendRichEdit(RichEdit.Handle);
   EndDoc;       

               if TFileName(SaveDialog1.FileName) = '*.pdf' then
                    case SaveDialog1.FilterIndex of
          0:  dateiName := ChangeFileExt(SaveDialog1.FileName,'.pdf');
          end
          else
           SaveDialog1.FileName :=ChangeFileExt(SaveDialog1.FileName,'.pdf');
           dateiName :=ChangeFileExt(SaveDialog1.FileName,'.pdf');
           ExportPDF(TFileName(SaveDialog1.FileName),true,false);
          finally      
      Free;
   end;
    END;
   END;


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


C++arsten - Mo 25.07.11 21:59

Hallo Kawa,

danke für die Antwort. Doch wo holst du denn das her: SynCommons, SynPdf, SQLite3Pages,Fastmm4?


Kawa - Mo 25.07.11 23:48

user profile iconC++arsten hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Kawa,

danke für die Antwort. Doch wo holst du denn das her: SynCommons, SynPdf, SQLite3Pages,Fastmm4?


wenn ich schaffe gucke ich morgen (26.07.11) nach!


uko - Di 26.07.11 06:02

FastMM4 kannst Du erst mal vergessen (ist der Delphi Speichermanager), die beiden Syn... Units brauchst Du wohl: das sollte von SynopsePDF sein, die PDF Komponente, die in dem Code verwendet wird (nur so viel zum Thema "ohne Komponente"): http://blog.synopse.info/category/Open-Source-Projects/Synopse-PDF-engine
SQLite3Pages stammt auch aus dem Synopse Umfeld. Mußt schauen, ob Du sie brauchst oder ob sie nicht schon bei der PDF Engine dabei ist.


Kawa - Di 26.07.11 21:59

ok,

gehe mal bitte die Seite: http://synopse.info/fossil/vinfo?name=fc78674c20bfb24e18009320457a69760e0b2789

dann " ZIP archive" (5mb) herunterladen!,da sind auch Beispiele drin.