AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal FreePascal Äquivalent für ShellExecute ("print", Filename) unter Linux
Thema durchsuchen
Ansicht
Themen-Optionen

Äquivalent für ShellExecute ("print", Filename) unter Linux

Ein Thema von Harry Stahl · begonnen am 29. Okt 2014 · letzter Beitrag vom 6. Nov 2014
Antwort Antwort
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
558 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 30. Okt 2014, 15:01
PostScript, PDF, Text und Bilder wird von CUPS direkt verstanden.

http://www.eecs.utk.edu/resources/it...x-command-line

https://people.gnome.org/~alexl/pres...6-printing.pdf

Wie weit das nützlich ist ....

So etwas wie Shell_Execute und anzeigen wäre gnome_url_show().

Die meisten formatierten Ausdrucke laufen über PDF und PDF/A.

Wobei Dokument einfach auf den Drucker schicken.


Unter Windows kann ich mit

ShellExecute (0, 'print', DocumentName, ...); eine bestimmte Dokumentdatei automatisch vom richtigen Programm öffnen und drucken lassen.

Aber wie geht das mit FreePascal/Lazarus unter Linux? Die Möglichkeit mit TProcess eine Datei ausführen zu können kenne ich, aber dann wird die Datei nur vom zugehörigen Programm geöffnet, ich will Sie aber direkt auch drucken. Gibt es evtl. dafür unter Linux einen bestimmten (Konsolen-) Befehl?
  Mit Zitat antworten Zitat
creed steiger

Registriert seit: 2. Dez 2009
116 Beiträge
 
#2

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 30. Okt 2014, 17:41
Was für Dokumente sind es genau?

xdg gibt sowas leider nicht her, aber evtl findet sich eine andere Lösung.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.932 Beiträge
 
Delphi 12 Athens
 
#3

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 30. Okt 2014, 18:41
Es geht ja wie er schon oben geschrieben hat um keine bestimmten Dateien, sondern um beliebige Dateien. Und dafür gibt es nun einmal unter Linux keine Lösung wie unter Windows.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
creed steiger

Registriert seit: 2. Dez 2009
116 Beiträge
 
#4

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 30. Okt 2014, 19:04
Es geht ja wie er schon oben geschrieben hat um keine bestimmten Dateien, sondern um beliebige Dateien. Und dafür gibt es nun einmal unter Linux keine Lösung wie unter Windows.
Beliebig? (Das funktioniert unter Windows auch nicht ohne die entsprechende Anwendungen)
Hab ich jetzt nicht so aus der Fragestellung herausgelesen.
Darum dir Frage nach den Formaten.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#5

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 30. Okt 2014, 21:36
Ja, es ging mir schon um "beliebige" Dateien. Und klar, unterstellt wie bei Windows, dass dafür Anwendungen auf dem PC bereit stehen, die sich im System zum Öffnen und Drucken für den Dateityp registriert haben.

Aber wenn es sowas unter Linux nicht gibt, werde ich es dann wohl doch so machen, wie hier vorgeschlagen, dass ich zumindest für die wichtigsten Dateitypen prüfen werde, ob dafür Programme zum Öffnen auf dem System installiert sind und diese dann direkt mit einem richtigen Startparameter beim Start des Programms (bei Libre Writer z.B. "-p {Dateiname}") auf dem Drucker ausgebe.

Geändert von Harry Stahl (30. Okt 2014 um 22:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#6

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 30. Okt 2014, 23:17
So, ich habe das jetzt erst mal so gelöst, dass eine Reihe von Standard-Dokumententypen einfach mit den Programmen des Libre-Office-Pakets gedruckt werden, die ja eigentlich bei jeder größeren Linux-Distro mit dabei sind.

Delphi-Quellcode:

procedure ExecACommand (cmd: string);
var
  WrkProcess:TProcess;
begin
  WrkProcess:=TProcess.Create(nil);
  WrkProcess.Options:=[poNoConsole];
  WrkProcess.CommandLine:=Cmd;
  WrkProcess.Execute;
  WrkProcess.Free;
end;

procedure PrintOutThisFile (fn: String);
var
  ext: string;
begin
  ext := lowercase (ExtractFileExt (fn));

  if pos (ext, '.odt.txt.doc.rtf.docx.pas.dfm') <> 0 then begin
    ExecACommand ('soffice --writer -p "' + fn + '"');
  end;

  if pos (ext, '.ods.xls.xlsx.csv') <> 0 then begin
    ExecACommand ('soffice --calc -p "' + fn + '"');
  end;

  if pos (ext, '.ppt.pptx') <> 0 then begin
    ExecACommand ('soffice --impress -p "' + fn + '"');
  end;

  if pos (ext, '.bmp') <> 0 then begin
    ExecACommand ('soffice --draw -p "' + fn + '"');
  end;
end;

procedure Tf_PrintFiles.bnPrintAllClick(Sender: TObject);
var
  L: Integer;
  pa: string;
begin
  for L := 0 to lbPrint.Count -1 do begin
    if lbPrint.checked[L] then begin
      PrintOutThisFile (lbPrint.items[L]);
      lbPrint.checked[L] := false;
    end;
  end;
end;
Gedacht ist diese Funktion z.B. wenn mann mehrere Dateien per Mail erhält (Textdokument, XLS und Powerpoint-Dateien), dann kann man die gewünschten Dateien auswählen und auf einmal zum Drucker schicken, man muss nicht jede einzelne Datei öffnen und die Druckfunktion aufrufen. Eine ungemeine Arbeitserleichterung (vgl. auch anl. Screenshot).
Angehängte Grafiken
Dateityp: jpg Bildkopie1.jpg (70,7 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 5. Nov 2014, 06:37
Du solltest vielleicht noch sicherstellen, dass du eventuelle Exceptions von TProcess abfängst, die zum Beispiel kommen, wenn soffice nämlich nicht installiert ist, denn wenn auch jede Distro LibreOffice im jeweiligen PacketManager hat, so muss es nicht auf jeder Benutzerinstallation auch vorhanden sein (einer meiner beiden ArchLinux Rechner hat zum Beispiel kein LibreOffice installiert).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#8

AW: Äquivalent für ShellExecute ("print", Filename) unter Linux

  Alt 5. Nov 2014, 20:00
Delphi-Quellcode:
ext := lowercase (ExtractFileExt (fn));
  if pos (ext, '.odt.txt.doc.rtf.docx.pas.dfm') <> 0 then begin
Mit POS kannst du, dank der Mobilen Plattformen schnell mal stolpern,
denn neuerdings sind String 0-basierend.

Darum würde ich dir eher zu den neueren und ganz neuen Features raten.
z.B. Delphi-Referenz durchsuchenContainsText(X, S), Delphi-Referenz durchsuchenMatchText(S, [X, X, ...]), S.ToLower.LastIndexOf(X)>=0
Vorallem die Record-Helper sind immer 0-basierend und arbeiten somit überall gleich, auch im Windows.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz