Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.537 Beiträge
 
Delphi 11 Alexandria
 
#13

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

  Alt 31. Okt 2014, 00: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).
Miniaturansicht angehängter Grafiken
bildkopie1.jpg  
  Mit Zitat antworten Zitat