Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PDF-Dokumente aus Delphi drucken (https://www.delphipraxis.net/6729-pdf-dokumente-aus-delphi-drucken.html)

skorsi 9. Mär 2004 09:26

Re: PDF-Dokumente aus Delphi drucken
 
Hallo,

kann man diese PDF Dokumente auch ausdrucken ohne sie öffnen zu müssen??

Danke, skorsi

Luckie 12. Jun 2004 22:02

Re: PDF-Dokumente aus Delphi drucken
 
Ich will mich mal hier dranhängen. Ich versuche auch ein PDF mit dem ActiveX Control auszudrucken. Klappt eigentlich ganz gut, nun ja mehr schlecht als recht. Nur wenn ich es aus einem Thread versuche bekomme ich folgende fehlermeldung zu sehen:
Zitat:

---------------------------
Acrobat plug-in.
---------------------------
Could not find Acrobat External Window Handler.
---------------------------
OK
---------------------------
Gebe ich zusätzlich vorher als src die Datei an bevor ich sie lade, dann kommt keine Fehlermeldung aber es tut sich nichts.

In einem Demo projekt hab eich es ohne Thread probiert, da geht es. Ich poste hie rmal meinen Code:
Thread:
Delphi-Quellcode:
function Thread(p: Pointer): Integer;
var
  Loop: Cardinal;
  MemStream: TMemoryStream;
  URL: string;
  PN: string;
  StartPage, MaxPages: Cardinal;
  SB: TStatusbar;
  IdHTTP: TIdHTTP;
  FileExt: string;
  PDF: TPdf;
  bPrint: Boolean;
  Dir: string;
  btnDownload, btnCancel: TButton;
  Filename: String;
begin
  Result := 0;
  Loop := 0;
  URL := PThreadParams(p)^.URL;
  PN := PThreadparams(p)^.PN;
  StartPage := PThreadParams(p)^.StartPage;
  MaxPages := PThreadParams(p)^.MaxPages;
  SB := PThreadParams(p)^.SB;
  IdHTTP := PThreadParams(p)^.IdHTTP;
  FileExt := PThreadParams(p)^.FileExt;
  Pdf := PThreadParams(p)^.PDF;
  bPrint := PThreadParams(p)^.bPrint;
  Dir := PThreadParams(p)^.Dir;
  btnDownload := PThreadParams(p)^.btnDownload;
  btnCancel := PThreadParams(p)^.btnCancel;
  Filename := Dir + PN + '_' + IntToStr(Loop) + '.' + FileExt;
  for Loop := StartPage to MaxPages do
  begin
    if bCancel = 1 then
      break;
    MemStream := TMemoryStream.Create;
    try
      SB.Panels[0].Text := 'Seite: ' + IntToStr(Loop);
      SB.Refresh;
      try
        IdHTTP.Get(URL + IntToStr(Loop), MemStream);
      except
        on E: Exception do
        begin
          Messagebox(0, Pointer(e.Message), APPNAME, MB_ICONSTOP);
          break;
        end;
      end;
      MemStream.SaveToFile(Filename);
    finally
      FreeAndNil(MemStream);
    end;
    if bPrint then
    begin
      //Form1.Pdf1.src := Filename;
      Form1.Pdf1.LoadFile(Filename);
      //PDF.printWithDialog;
    end;
  end;
  SB.Panels[0].Text := 'Seiten:';
  SB.Panels[1].Text := 'Fortschritt:';
  btnDownload.Enabled := True;
  btnCancel.Enabled := False;
  FreeMem(p, sizeof(TThreadParams));
end;
Start des Thread:
Delphi-Quellcode:
procedure TForm1.DownloadEspacenet;
var
  URL: string;
  ThreadParams: PThreadParams;
  hThread: THandle;
  ThreadID: Cardinal;
begin
  GetMem(ThreadParams, sizeof(TThreadParams));
  if Assigned(ThreadParams) then
  begin
    URL := ESPACENETURL + '?PN=' + edtPN.Text + '&ID=' + edtID.Text + '&PG=';
    ThreadParams.URL := URL;
    ThreadParams.PN := edtPN.Text;
    ThreadParams.StartPage := StrToInt(edtPagesStart.Text);
    ThreadParams.MaxPages := StrToInt(edtPages.Text);
    ThreadParams.SB := Statusbar1;
    ThreadParams.IdHTTP := IdHTTP1;
    ThreadParams.FileExt := 'pdf';
    ThreadParams.Dir := edtDir.Text;
    ThreadParams.btnDownload := btnDownload;
    ThreadParams.btnCancel := btnCancel;
    ThreadParams.PDF := PDF1;
    ThreadParams.bPrint := chkPrint.Checked;
    hThread := BeginThread(nil, 0, Thread, ThreadParams, 0, ThreadID);
    if hThread <> 0 then
    begin
      btnDownload.Enabled := False;
      btnCancel.Enabled := True;
    end;
  end;
end;
Ach so und noch was: printAll oder nur Print geht auch nicht.

Luckie 12. Jun 2004 22:17

Re: PDF-Dokumente aus Delphi drucken
 
Ich noch mal. Qick and dirty Lösung:
Delphi-Quellcode:
ShellExecute(0, 'open', 'acrord32', PChar('/p /h ' + Filename), nil, SW_HIDE);

Thomas Feichtner 7. Jul 2020 14:38

AW: PDF-Dokumente aus Delphi drucken
 
Hallo, ich zeige mir die PDF-Dateien über ActiveX an. Das funktioniert soweit auch.
Jedoch funktioniert hier das Drucken nicht. Der Button ist Enabled.

Ich verwende derzeit den Acrobat Reader DC 2020.009.20074 Mit einer alten Version funktioniert das Drucken ebenfalls.

Rein über den Acrobat Reader funktioniert der Druck-Button.

himitsu 7. Jul 2020 15:00

AW: PDF-Dokumente aus Delphi drucken
 
DevExpress hat auch eine PDF-Komponente, die kann man zur Anzeige verwenden und deren TPdfDocument auch auch einzeln intern zum Drucken.

Sowie zum Bearbeiten von PDFs.
https://docs.devexpress.com/OfficeFi...f-document-api


Die setzen wir inzwischen vermehrt ein (seitdem sie auch bissl scheller wurde),
da es immer wieder Probleme mit Acrobat bei den Kunden gab,
womit es somit keine externen Abhängigkeiten mehr gibt, die urplötzlich kaputt gehn können.

aber Achtung
* es wird nicht alles Unterstützt, was der Acrobat kann
* und es ist auch "bissl" langsamer, beim Laden und Anzeigen/Verarbeiten von PDFs
* aber da wird ständig dran weiterentwickelt und es bessert sich

z.B. nervt es auch ständig, dass ständig die SideBar von Acrobat auftaucht (weil da mal wieder dran rumgepfuscht wurde), wenn wir PDFs eingebettet als Vorschau anzeigen wollen
und auch im Konflikt mit MS Office gab es schon Probleme, sodass die Anzeige des Acrobat nicht funktionierte.

Wenn man da dann das Drucken vom DevExpress über Delphis TPrinter vornimmt, dann hat man auch sämtliche Freiheiten, was z.B. Papierformat, Ausrichtung und Druckerschacht betrifft.



Ansonsten wäre meine Idee mal zu schauen wie man PDF.js im Delphi nutzen kann,
als quelloffene Alternative zum Acrobat, ohne pervese Programminstallationen.

Bernhard Geyer 7. Jul 2020 15:22

AW: PDF-Dokumente aus Delphi drucken
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1469036)
Hallo, ich zeige mir die PDF-Dateien über ActiveX an. Das funktioniert soweit auch.

Das Funktioniert noch - Glück gehabt. Adobe garantiert nur entweder den direkten Start oder Anzeige im IE

Zitat:

Zitat von Thomas Feichtner (Beitrag 1469036)
Jedoch funktioniert hier das Drucken nicht. Der Button ist Enabled.
Ich verwende derzeit den Acrobat Reader DC 2020.009.20074 Mit einer alten Version funktioniert das Drucken ebenfalls.

Wie oben geschrieben. Die Nutzung des Reader über ActiveX ist Adobe sch*** egal.
Wenn was nicht geht, dann geht es halt nicht. Mussten schon bei Adobe einige "broken Features" miterleben


Alternative sind
- Lade das PDF im TWebbrowser und steuere den Druck über die API an (OLECMDID_PRINT)
- Lade das PDF im Chromium(CEF4) und Drucke darüber
- Lade das PDF über Edge Chromium (D10.4 nötig) und Drucke darüber

Frickler 8. Jul 2020 09:16

AW: PDF-Dokumente aus Delphi drucken
 
In einem der Firebird-Seminare (vom 5.6.20; etwa ab 01:27:00) von Holger Klemt wurde gezeigt, wie man den Standalone PDF Viewer "Sumatra PDF" in Delphi- und Lazarus-Programme einbettet: Indem man ihn mit Parameter "-plugin" aufruft und das Handle eines TPanels übergibt, auf dem der Viewer dann angezeigt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz