Re: PDF-Dokumente aus Delphi drucken
Hallo,
kann man diese PDF Dokumente auch ausdrucken ohne sie öffnen zu müssen?? Danke, skorsi |
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:
In einem Demo projekt hab eich es ohne Thread probiert, da geht es. Ich poste hie rmal meinen Code: Thread:
Delphi-Quellcode:
Start des Thread:
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;
Delphi-Quellcode:
Ach so und noch was: printAll oder nur Print geht auch nicht.
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; |
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);
|
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. |
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. |
AW: PDF-Dokumente aus Delphi drucken
Zitat:
Zitat:
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 |
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. |
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