Работа с uOpenOffice
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Лицензия LGPL предполагает, что ограничения копилефта не распространяются на производные программы, только в случае связывания (считается что динамического, хотя в тексте LGPL тип связывания не уточняется). При использовании исходного LGPL кода напрямую - все GPL ограничения должны вступать в силу (хотя судебных дел ещё не было). Modified означает модифицированная и в случае с FCL и LCL эта модификация как раз позволяет и статическое связывание на уровне исходного кода. Как-то так ^_^
Лично меня всегда несколько настораживала эта приставка modified ^_^ Есть кошерная лицензия Apache, ведущая себя фактически так же, как и эта самая modified LGPL. Так что я всё что публикую - публикую под Apache ^_^ Она вполне совместима и с LGPL (модифицированным и нет) и пропиетарным кодом.
Лично меня всегда несколько настораживала эта приставка modified ^_^ Есть кошерная лицензия Apache, ведущая себя фактически так же, как и эта самая modified LGPL. Так что я всё что публикую - публикую под Apache ^_^ Она вполне совместима и с LGPL (модифицированным и нет) и пропиетарным кодом.
Согласен! У самого давно в голове такие идеи крутятся. Нужно не создавать из кода документ, а парсить шаблон, выискивая теги. Что-то вроде:Brainenjii писал(а):По планам: cоздание документа/таблиц прямо из кода считаю излишним.
{r:[Table1]} - размножить строку таблицы документа, в которой находится этот тег, для всех записей набора данных "Table1" (заменяя вложенные теги);
{f:[Table1.Field1]:%5.2d} - вставить значение поля с именем "Field1" текущей записи набора данных "Table1" (":%5.2d"-опциональная строка формата);
{f:VarDate1:mmm yyyy г.} - вставить значение переменной/параметра отчета с именем "VarDate1";
{p:[Table1]} - размножить параграф;
{s:[Table1]} - размножить раздел.
ODT позволяет вложенные таблицы, т.е. повторять строку таблицы для записей "Master", в которую (в строку) вложена таблица с размножаемыми строками для записей набора "Detail".Brainenjii писал(а):В ближайших мечтах - добавить возможность построения Master/Detail и Cross отчетов...
Для крос-отчетов что-то вроде:
{c:[Table1]} - размножить ячейки помеченного этим тегом столбца во всех строках таблицы документа для всех записей набора данных "Table1" (заменяя вложенные теги).
Нужен компонент TDBWorkspace (возможно на базе TDataModule), умеющий читать из файла/потока/строки конфигурацию и создающий рабочее окружение для отчета (необходимые наборы данных и связи между ними).Brainenjii писал(а):В мечтах чуть отдалённей - связывание таблиц и каких-нибудь DataSet'ов...
Brainenjii писал(а):для преобразования в html использую xsltproc
Правда, удастся ли запустить libreoffice без иксов, не уверен.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.
Последний раз редактировалось v-t-l 07.06.2012 20:30:29, всего редактировалось 3 раза.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
По поводу тегов - пока в голове все-таки работа с таблицами и повторяющимися строками из кода. Если введем такого рода шаблоны - кроме программистов никто такой шаблон построить не сможет.
Про вложенные таблицы - беда в том, что как потом находить "скопированные" таблицы. Сейчас обращение идет по имени. Хотя проблема, безусловно, решаемая.
По поводу преобразования - тягать громадину libreoffice ради преобразования?! Ненене ^_^ xsltproc гораздо менее прожорливая игрушка. Попиксельной точности HTML, конечно, не даст, но печать вообще должна осуществляться у клиента - а там и иксы, и OOo, и в pdf преобразования и т.д.
Про вложенные таблицы - беда в том, что как потом находить "скопированные" таблицы. Сейчас обращение идет по имени. Хотя проблема, безусловно, решаемая.
По поводу преобразования - тягать громадину libreoffice ради преобразования?! Ненене ^_^ xsltproc гораздо менее прожорливая игрушка. Попиксельной точности HTML, конечно, не даст, но печать вообще должна осуществляться у клиента - а там и иксы, и OOo, и в pdf преобразования и т.д.
Brainenjii писал(а):По поводу тегов - пока в голове все-таки работа с таблицами и повторяющимися строками из кода. Если введем такого рода шаблоны - кроме программистов никто такой шаблон построить не сможет.
В одном окне - офис с открытым для правки шаблоном, в другом окне - отдельное приложение - визуальный помощник, позволяющий настроить рабочее пространство отчета и генерировать теги для вставки в шаблон отчета (через буфер обмена или drag&drop).
Их не нужно находитьBrainenjii писал(а):Про вложенные таблицы - беда в том, что как потом находить "скопированные" таблицы.
Добавлено спустя 5 минут 48 секунд:
при этом подходе DOM не нужен и даже вреден (по крайней мере, на этапе генерации результата)
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
v-t-l писал(а):распарсить шаблон отчета на дерево строковых кусков-секций, найдя с учетом вложенности открывающие и закрывающие xml-тэги для для размножаемых элементов
прям какой-то DOM-2
а вообще идея с тэгами - пища для размышления. Вполне себе ничего было бы управлять поведением шаблона из самого шаблона...
Без-DOM-ные операции теоретически позволят работать не только с XML-шаблонами, но и плоским текстом или даже binary.
Народ.
Так я и бьюсь как муха об стекло.
Ну не могу я запустить банальный "Hello, world"
Lazarus+Win7+OO
Стоп происходит в odfproc.pas
Процедура TOdt.GenerateDocument
Самая первая строка после бегина уже не проходит:
Ошибка выскакивает такая: Access violation
При этом в сообщениях ошибок компиляции нет.
В самой программе на кнопку стоит такой код:
Бьюсь реально как муха об стекло... Уже что только не перевертел.
ОГРОМНЕЙШАЯ ПРОСЬБА выложить рабочий "Hello, World" с рабочим модулем.
Мне достаточно просто запуск OO и генерация в нем минимального контента (текс+таблица). Конкретно - формирование товарного чека.
Так я и бьюсь как муха об стекло.
Ну не могу я запустить банальный "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 и генерация в нем минимального контента (текс+таблица). Конкретно - формирование товарного чека.
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
Arkano, для начала попробуйте использовать такую конструкцию:
Код: Выделить всё
Odt:=TOdt.Create;
if Odt.LoadTemplate('blank.odt') then Odt.ShowDocument('','blank.odt')
else ShowMessage('шаблон не загрузился, возможно я не правильно указал путь к шаблону, а может быть функция загрузки модуля ODFProc LoadTemplate не работает под w7 и требует доработки...');
Odt.Destroy;
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.
Получаем следующее:
- Вложения
-
- Untitled-1.gif (8.94 КБ) 42869 просмотров
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
путь должен быть указан полностью, кроме того, для проверки существования шаблона можно воспользоваться функцией FileExists()...
ничего волшебного - просто try прерывается при попытке протестировать архив... по видимому архиватор на этой строке впервые реально обращается к файлу, но из-за неправильного пути идёт лесом
Каким-то волшебным образом выпдают из выполнения "строки" с 7 по 14.
ничего волшебного - просто try прерывается при попытке протестировать архив... по видимому архиватор на этой строке впервые реально обращается к файлу, но из-за неправильного пути идёт лесом
leo_bsv, а путь как верно указывать целиком?
Чего только не встречал для лазаруса, но "своего" случая не видел. Путаница с / и \, а так же местами // и т.п.
Указываю "обычным" для себя способом, а именно так:
Дело в том, что на лазарус перехожу с делфи.
По сути перекидываю готовый проект, который под делфи у меня работает отлично, но те модули для работы с ОО написанные для делфи в лазарусе уже не катят. А лазарус, уже заметил, имеет свои "особенности".
Как-то что-то припоминаю пробовал с какой-то там перекодировкой UTF8 для указания пути, но никак не встречу ничего подобного. С этим UTF8 вроде работало, правда не уверен, что я для пути это применял. Я уже в хлам запутался. Времени нормально уделить проекту не могу. То там 5 минут вырву, то тут 10, вот "память" моя и "рвется"...
Спасибо за помощь.
Чего только не встречал для лазаруса, но "своего" случая не видел. Путаница с / и \, а так же местами // и т.п.
Указываю "обычным" для себя способом, а именно так:
Код: Выделить всё
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, вот "память" моя и "рвется"...
Спасибо за помощь.
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
вообще-то путь указывается с \ для виндоус и / для линдоус...
вообще в вашем последнем посте вроде всё правильно написано... код приведённый вами работает? или с правильным полным путём к файлу шаблона - всё-равно не работает? Если нет - ошибки в студию.
про UTF8 возможно имелась ввиду функция UTF8ToSys? это надо уже спрашивать у тех кто под винду пишет... к сожалению ничем тут помочь не могу. в наличии только линукс, винды нет на машинах...
вообще в вашем последнем посте вроде всё правильно написано... код приведённый вами работает? или с правильным полным путём к файлу шаблона - всё-равно не работает? Если нет - ошибки в студию.
про UTF8 возможно имелась ввиду функция UTF8ToSys? это надо уже спрашивать у тех кто под винду пишет... к сожалению ничем тут помочь не могу. в наличии только линукс, винды нет на машинах...
leo_bsv, срабатывает ветка "иначе" Вашего кода, и выскакивает мессага, про неверный путь или невозможность работы функции в W7. Сегодня проверю еще этот же код на XP.
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
Arkano писал(а):leo_bsv, срабатывает ветка "иначе" Вашего кода, и выскакивает мессага, про неверный путь или невозможность работы функции в W7. Сегодня проверю еще этот же код на XP.
если предположить что путь корректный - то значит проблема в функции загрузки шаблона, вообще говоря никто и не обещал что всё будет работать в винде
