Модератор: Модераторы

*** odfproc.pas   2011-11-09 21:39:08.522435327 +0300
--- odfproc.pas.1   2011-11-09 21:33:21.000000000 +0300
***************
*** 482,492 ****
    exe_path:=ExtractFilePath(Application.ExeName);
  
    {$IFDEF Linux}
!   templ_path:=exe_path+'template/';
!   GenerateDocument(templ_path,'doc','');
    try
      Proc:=TProcess.Create(nil);
!     Proc.CommandLine:='ooffice -writer '+templ_path+'doc.odt';
      Proc.Options:=[poWaitOnExit];
      Proc.ShowWindow:=swoShowMaximized;
      Proc.Execute;
--- 482,492 ----
    exe_path:=ExtractFilePath(Application.ExeName);
  
    {$IFDEF Linux}
!   templ_path:=exe_path+'temp/';
!   GenerateDocument(templ_path,'doc.odt','');
    try
      Proc:=TProcess.Create(nil);
!     Proc.CommandLine:='xdg-open '+templ_path+'doc.odt';
      Proc.Options:=[poWaitOnExit];
      Proc.ShowWindow:=swoShowMaximized;
      Proc.Execute;

v-t-l писал(а):Кстати, для открытия сгенерированного документа программой по умолчанию можно использовать кроссплатформенную (win,unix,mac) функцию OpenDocument из модуля LCLIntf!

leo_bsv писал(а):v-t-l писал(а):Кстати, для открытия сгенерированного документа программой по умолчанию можно использовать кроссплатформенную (win,unix,mac) функцию OpenDocument из модуля LCLIntf!
Спасибо, добавлено как задание по оптимизации на SF! Рассмотрим!
procedure TOdt.ShowDocument(n_path,name_doc:String);//жесткий путь запуска и имя док-та
var exe_path, templ_path, sh: string; //если n_path='' или name_doc='' то запуск или имя по умолчанию
    f_name: string = 'doc.odt';
    Proc: TProcess;
begin
  exe_path:=ExtractFilePath(Application.ExeName);
  {$IFDEF Linux}
  templ_path:=IncludeTrailingPathDelimiter(exe_path+'temp');
  if Trim(name_doc)<>'' then f_name:=name_doc+'.odt';
  GenerateDocument(templ_path,f_name,''); 
  try
    Proc:=TProcess.Create(nil);
    if Trim(n_path)<>'' then
    Proc.CommandLine:=Trim(n_path)+' '+templ_path+f_name
    else
    Proc.CommandLine:='xdg-open '+templ_path+f_name; 
    Proc.Options:=[poWaitOnExit];
    Proc.ShowWindow:=swoShowMaximized;
    Proc.Execute;
  finally
      sleep(2000);//пару сек ждем - иногда приложение по умолчанию не успевает запуститься
     if Proc.WaitOnExit then begin
      Proc.CommandLine:='rm '+templ_path+' -r';
      Proc.Execute;
      Proc.Free;
    end;
  end;
  {$ENDIF}
end;
leo_bsv писал(а):volodya25, спасибо за участие, изменения внесены.
procedure TOdtTable.AppendRow(TextStyle: string);
var Root, Node: TDOMNode;
    i:integer;
begin
  Node:=FDocument.CreateElement('table:table-row');
  Root:=RootNode.AppendChild(Node);//Root = table:table-row
   for i:=1 to Cols do
    begin
       Node:=FDocument.CreateElement('table:table-cell');
        TDOMElement(Node).SetAttribute('table:style-name',DefoultCellStyle);
        TDOMElement(Node).SetAttribute('office:value-type','string');
      Root:=Root.AppendChild(Node);//root = table:table-cell
      Node:=FDocument.CreateElement('text:p');
        if length(TextStyle)>0 then
          TDOMElement(Node).SetAttribute('text:style-name',TextStyle)
        else
          TDOMElement(Node).SetAttribute('text:style-name',DefTextStyle);
      Root.AppendChild(Node);
      Root:=Root.ParentNode;//Root = table:table-row
    end;
end; Владимир писал(а):Table.RemoveEmptyRow('bla-bla');- не работает (вешает все)

Владимир писал(а):Приложил код доработанной процедуры ShowDocument к своему сообщению от 08.12

ShowDocument сделана перегружаемой, теперь может запускаться как с параметрами, так и без, если не сложно - проведите тестирование.
ODT:=TOdt.Create;
  ODT.LoadTemplate('/arch/shop/template/cennik.odt');
  ODT.ShowDocument(' ',' ');//ошибка чтения /temp
 // ODT.ShowDocument(' ','ddd.odt');//нет запуска по умолчанию
 //ODT.ShowDocument('/opt/openoffice.org3/program/swriter','ddd.odt');//работает
 //ODT.ShowDocument('/opt/openoffice.org3/program/swriter',' ');//открывает док и валится
  Odt.Destroy; 

  str_0,str_1:String;
begin
str_0:='     ';  str_1:='     ';
  ODT:=TOdt.Create;
  ODT.LoadTemplate('/arch/shop/template/cennik.odt');
  //ODT.ShowDocument; //ERROR
  // ODT.ShowDocument(str_0,str_1);//ничего не происходит
  //ODT.ShowDocument(str_0,'ddd.odt');/ничего не происходит
 //ODT.ShowDocument('/opt/openoffice.org3/program/swriter','ddd.odt');//работает
 //ODT.ShowDocument('/opt/openoffice.org3/program/swriter',str_0);//открывает док и валится
  Odt.Destroy; 

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1