Страница 10 из 13

Re: Работа с uOpenOffice

СообщениеДобавлено: 05.06.2012 23:04:35
Brainenjii
Лицензия LGPL предполагает, что ограничения копилефта не распространяются на производные программы, только в случае связывания (считается что динамического, хотя в тексте LGPL тип связывания не уточняется). При использовании исходного LGPL кода напрямую - все GPL ограничения должны вступать в силу (хотя судебных дел ещё не было). Modified означает модифицированная и в случае с FCL и LCL эта модификация как раз позволяет и статическое связывание на уровне исходного кода. Как-то так ^_^
Лично меня всегда несколько настораживала эта приставка modified ^_^ Есть кошерная лицензия Apache, ведущая себя фактически так же, как и эта самая modified LGPL. Так что я всё что публикую - публикую под Apache ^_^ Она вполне совместима и с LGPL (модифицированным и нет) и пропиетарным кодом.

Re: Работа с uOpenOffice

СообщениеДобавлено: 06.06.2012 00:03:19
leo_bsv
нужно будет связаться с автором - согласовать.

Re: Работа с uOpenOffice

СообщениеДобавлено: 06.06.2012 10:08:13
v-t-l
Brainenjii писал(а):По планам: cоздание документа/таблиц прямо из кода считаю излишним.
Согласен! У самого давно в голове такие идеи крутятся. Нужно не создавать из кода документ, а парсить шаблон, выискивая теги. Что-то вроде:

{r:[Table1]} - размножить строку таблицы документа, в которой находится этот тег, для всех записей набора данных "Table1" (заменяя вложенные теги);
{f:[Table1.Field1]:%5.2d} - вставить значение поля с именем "Field1" текущей записи набора данных "Table1" (":%5.2d"-опциональная строка формата);
{f:VarDate1:mmm yyyy г.} - вставить значение переменной/параметра отчета с именем "VarDate1";
{p:[Table1]} - размножить параграф;
{s:[Table1]} - размножить раздел.

Brainenjii писал(а):В ближайших мечтах - добавить возможность построения Master/Detail и Cross отчетов...
ODT позволяет вложенные таблицы, т.е. повторять строку таблицы для записей "Master", в которую (в строку) вложена таблица с размножаемыми строками для записей набора "Detail".
Для крос-отчетов что-то вроде:
{c:[Table1]} - размножить ячейки помеченного этим тегом столбца во всех строках таблицы документа для всех записей набора данных "Table1" (заменяя вложенные теги).

Brainenjii писал(а):В мечтах чуть отдалённей - связывание таблиц и каких-нибудь DataSet'ов...
Нужен компонент TDBWorkspace (возможно на базе TDataModule), умеющий читать из файла/потока/строки конфигурацию и создающий рабочее окружение для отчета (необходимые наборы данных и связи между ними).

Brainenjii писал(а):для преобразования в html использую xsltproc
man libreoffice писал(а): --convert-to output_file_extension[:output_filter_name] [--outdir output_dir] file...
Batch converts files. If --outdir is not specified then the current working directory is used as the output directory for the converted files.

Examples:

--convert-to pdf *.doc

Converts all .doc files to PDFs.

--convert-to pdf:writer_pdf_Export --outdir /home/user *.doc

Converts all .doc files to PDFs using the settings in the Writer PDF export dialog and saving them in /home/user.
Правда, удастся ли запустить libreoffice без иксов, не уверен.

Re: Работа с uOpenOffice

СообщениеДобавлено: 06.06.2012 10:25:19
Brainenjii
По поводу тегов - пока в голове все-таки работа с таблицами и повторяющимися строками из кода. Если введем такого рода шаблоны - кроме программистов никто такой шаблон построить не сможет.
Про вложенные таблицы - беда в том, что как потом находить "скопированные" таблицы. Сейчас обращение идет по имени. Хотя проблема, безусловно, решаемая.
По поводу преобразования - тягать громадину libreoffice ради преобразования?! Ненене ^_^ xsltproc гораздо менее прожорливая игрушка. Попиксельной точности HTML, конечно, не даст, но печать вообще должна осуществляться у клиента - а там и иксы, и OOo, и в pdf преобразования и т.д.

Re: Работа с uOpenOffice

СообщениеДобавлено: 06.06.2012 11:05:01
v-t-l
Brainenjii писал(а):По поводу тегов - пока в голове все-таки работа с таблицами и повторяющимися строками из кода. Если введем такого рода шаблоны - кроме программистов никто такой шаблон построить не сможет.

В одном окне - офис с открытым для правки шаблоном, в другом окне - отдельное приложение - визуальный помощник, позволяющий настроить рабочее пространство отчета и генерировать теги для вставки в шаблон отчета (через буфер обмена или drag&drop).
Brainenjii писал(а):Про вложенные таблицы - беда в том, что как потом находить "скопированные" таблицы.
Их не нужно находить :D, нужно распарсить шаблон отчета на дерево строковых кусков-секций, найдя с учетом вложенности открывающие и закрывающие xml-тэги для для размножаемых элементов (даже, возможно, без использования DOM), а после выводить секции, обрабатывая их и все вложенные секции рекурсивно.

Добавлено спустя 5 минут 48 секунд:
при этом подходе DOM не нужен и даже вреден (по крайней мере, на этапе генерации результата) :D .

Re: Работа с uOpenOffice

СообщениеДобавлено: 07.06.2012 03:15:11
leo_bsv
v-t-l писал(а):распарсить шаблон отчета на дерево строковых кусков-секций, найдя с учетом вложенности открывающие и закрывающие xml-тэги для для размножаемых элементов

прям какой-то DOM-2 :wink: чем DOM плох для подобных операций? всё уже распарсено и в рот положено...
а вообще идея с тэгами - пища для размышления. Вполне себе ничего было бы управлять поведением шаблона из самого шаблона...

Re: Работа с uOpenOffice

СообщениеДобавлено: 07.06.2012 20:28:18
v-t-l
Без-DOM-ные операции теоретически позволят работать не только с XML-шаблонами, но и плоским текстом или даже binary.

Re: Работа с uOpenOffice

СообщениеДобавлено: 12.06.2012 15:10:41
Arkano
Народ.
Так я и бьюсь как муха об стекло.
Ну не могу я запустить банальный "Hello, world"
Lazarus+Win7+OO

Стоп происходит в odfproc.pas
Процедура TOdt.GenerateDocument
Самая первая строка после бегина уже не проходит:
Код: Выделить всё
if (Not Assigned(FManifest)) or (FManifest.ChildNodes.Count=0) then


Ошибка выскакивает такая: Access violation

При этом в сообщениях ошибок компиляции нет.

В самой программе на кнопку стоит такой код:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
begin
  Odt:=TOdt.Create;
  Odt.LoadTemplate('blank.odt');
  Odt.ShowDocument('','blank.odt');
  Odt.Destroy;
end;


Бьюсь реально как муха об стекло... Уже что только не перевертел.
ОГРОМНЕЙШАЯ ПРОСЬБА выложить рабочий "Hello, World" с рабочим модулем.
Мне достаточно просто запуск OO и генерация в нем минимального контента (текс+таблица). Конкретно - формирование товарного чека.

Re: Работа с uOpenOffice

СообщениеДобавлено: 12.06.2012 21:21:53
leo_bsv
Arkano, для начала попробуйте использовать такую конструкцию:
Код: Выделить всё
  Odt:=TOdt.Create;
  if Odt.LoadTemplate('blank.odt') then Odt.ShowDocument('','blank.odt')
  else ShowMessage('шаблон не загрузился, возможно я не правильно указал путь к шаблону, а может быть функция загрузки модуля ODFProc LoadTemplate не работает под w7 и требует доработки...');
  Odt.Destroy;

Re: Работа с uOpenOffice

СообщениеДобавлено: 12.06.2012 22:27:51
Arkano
leo_bsv писал(а):Arkano, для начала попробуйте использовать такую конструкцию:
Код: Выделить всё
  Odt:=TOdt.Create;
  if Odt.LoadTemplate('blank.odt') then Odt.ShowDocument('','blank.odt')
  else ShowMessage('шаблон не загрузился, возможно я не правильно указал путь к шаблону, а может быть функция загрузки модуля ODFProc LoadTemplate не работает под w7 и требует доработки...');
  Odt.Destroy;

Ну в моем случае не удивительно даже: 'шаблон не загрузился, возможно я не правильно указал путь к шаблону, а может быть функция загрузки модуля ODFProc LoadTemplate не работает под w7 и требует доработки...'
Может я и путь не верно указал, как его указать верно?
Пробовал и так:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);

begin
  Odt:=TOdt.Create;
  if Odt.LoadTemplate('')
  then Odt.ShowDocument('','')
  else ShowMessage('шаблон не загрузился, возможно я не правильно указал путь к шаблону, а может быть функция загрузки модуля ODFProc LoadTemplate не работает под w7 и требует доработки...');
  Odt.Destroy;
end;

Так же выскакивает та же мессага.

Изменил функцию так:
Код: Выделить всё
function TOdt.LoadTemplate(FileName: string):boolean;
var
    UnZipper: TUnZipper;
begin
  Unit1.Form1.Memo1.Lines.Add('1');
  try
   Unit1.Form1.Memo1.Lines.Add('2');
   try
     //распаковываем шаблон
      Unit1.Form1.Memo1.Lines.Add('3');
      UnZipper := TUnZipper.Create;
      Unit1.Form1.Memo1.Lines.Add('4');
      UnZipper.FileName := FileName;
      Unit1.Form1.Memo1.Lines.Add('5');
      UnZipper.OutputPath := TempDir;
      Unit1.Form1.Memo1.Lines.Add('6');
      UnZipper.Examine;
      Unit1.Form1.Memo1.Lines.Add('7');
      UnZipper.UnZipAllFiles;
      Unit1.Form1.Memo1.Lines.Add('8');

      //подгружаем данные
      LoadDocument(TempDir+'styles.xml',ftStyles);
      Unit1.Form1.Memo1.Lines.Add('9');
      LoadDocument(TempDir+'content.xml',ftContent);
      Unit1.Form1.Memo1.Lines.Add('10');
      LoadDocument(TempDir+IncludeTrailingPathDelimiter('META-INF')+'manifest.xml',ftManifest);
      Unit1.Form1.Memo1.Lines.Add('11');
      LoadDocument(TempDir+'meta.xml',ftMeta);
      Unit1.Form1.Memo1.Lines.Add('12');
      LoadDocument(TempDir+'settings.xml',ftSettings);
      Unit1.Form1.Memo1.Lines.Add('13');
      Result:=true;
      Unit1.Form1.Memo1.Lines.Add('14');
    except
      Unit1.Form1.Memo1.Lines.Add('15');
      Result:=false;
      Unit1.Form1.Memo1.Lines.Add('16');
    end;
  Unit1.Form1.Memo1.Lines.Add('17');
  finally
     Unit1.Form1.Memo1.Lines.Add('18');
     UnZipper.Free;
     Unit1.Form1.Memo1.Lines.Add('19');
  end;
  Unit1.Form1.Memo1.Lines.Add('Приехали');
end;       

Каким-то волшебным образом выпдают из выполнения "строки" с 7 по 14.
Получаем следующее:

Re: Работа с uOpenOffice

СообщениеДобавлено: 12.06.2012 23:13:52
leo_bsv
путь должен быть указан полностью, кроме того, для проверки существования шаблона можно воспользоваться функцией FileExists()...
Каким-то волшебным образом выпдают из выполнения "строки" с 7 по 14.

ничего волшебного - просто try прерывается при попытке протестировать архив... по видимому архиватор на этой строке впервые реально обращается к файлу, но из-за неправильного пути идёт лесом :shock:

Re: Работа с uOpenOffice

СообщениеДобавлено: 13.06.2012 01:31:18
Arkano
leo_bsv, а путь как верно указывать целиком?
Чего только не встречал для лазаруса, но "своего" случая не видел. Путаница с / и \, а так же местами // и т.п. :)
Указываю "обычным" для себя способом, а именно так:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);

begin
  Odt:=TOdt.Create;
  if Odt.LoadTemplate('C:\uopenoffice(2)\2\blank.odt')
  then Odt.ShowDocument('','C:\uopenoffice(2)\2\blank.odt')
  else ShowMessage('шаблон не загрузился, возможно я не правильно указал путь к шаблону, а может быть функция загрузки модуля ODFProc LoadTemplate не работает под w7 и требует доработки...');
  Odt.Destroy;
end;   

Дело в том, что на лазарус перехожу с делфи.
По сути перекидываю готовый проект, который под делфи у меня работает отлично, но те модули для работы с ОО написанные для делфи в лазарусе уже не катят. А лазарус, уже заметил, имеет свои "особенности".
Как-то что-то припоминаю пробовал с какой-то там перекодировкой UTF8 для указания пути, но никак не встречу ничего подобного. С этим UTF8 вроде работало, правда не уверен, что я для пути это применял. Я уже в хлам запутался. Времени нормально уделить проекту не могу. То там 5 минут вырву, то тут 10, вот "память" моя и "рвется"... :)

Спасибо за помощь.

Re: Работа с uOpenOffice

СообщениеДобавлено: 13.06.2012 02:01:51
leo_bsv
вообще-то путь указывается с \ для виндоус и / для линдоус... :D
вообще в вашем последнем посте вроде всё правильно написано... код приведённый вами работает? или с правильным полным путём к файлу шаблона - всё-равно не работает? Если нет - ошибки в студию.
про UTF8 возможно имелась ввиду функция UTF8ToSys? это надо уже спрашивать у тех кто под винду пишет... к сожалению ничем тут помочь не могу. в наличии только линукс, винды нет на машинах... :shock:

Re: Работа с uOpenOffice

СообщениеДобавлено: 13.06.2012 09:28:24
Arkano
leo_bsv, срабатывает ветка "иначе" Вашего кода, и выскакивает мессага, про неверный путь или невозможность работы функции в W7. Сегодня проверю еще этот же код на XP.

Re: Работа с uOpenOffice

СообщениеДобавлено: 13.06.2012 21:32:24
leo_bsv
Arkano писал(а):leo_bsv, срабатывает ветка "иначе" Вашего кода, и выскакивает мессага, про неверный путь или невозможность работы функции в W7. Сегодня проверю еще этот же код на XP.

если предположить что путь корректный - то значит проблема в функции загрузки шаблона, вообще говоря никто и не обещал что всё будет работать в винде :D , но даже если и не работает - решение очень близко, разберётесь - присылайте патч, исправим сорцы.