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

Re: Работа с uOpenOffice

СообщениеДобавлено: 24.10.2011 16:17:23
leo_bsv
leo_bsv писал(а): frost_asm писал(а):Может ти бы выложил код на SourceForge или Google Code.


Эмм... модуль то не я писал... ) товарищч с webdelphi.ru... напишу ему письмецо =)

Владислав, разработчик модуля, не против чтобы мы выложили исходник и организовали поддержку.
Вообщем давайте выложим - вопрос - куда? SourceForge или Google Code?
Если у кого-то есть желание и опыт работы с такими ресурсами - милости просим.
Если не найдётся подходящей кондидатуры - это сделаю я :D только чур ногами не пинать - ни разу такими вещами не занимался.

Добавлено спустя 8 часов 9 минут 9 секунд:
Есть мысль дать модулю более независимое название - для последующей публикации на Google Code или SourceForge :) автор не против.
Что думаете по этому поводу? Варианты?
Куда бум выкладывать? Google Code или SourceForge? Что лучше?

Re: Работа с uOpenOffice

СообщениеДобавлено: 25.10.2011 23:15:23
frost_asm
leo_bsv выкладывай куда тебе удобнее)
а насчет названия у меня что то совсем нет идей.

Re: Работа с uOpenOffice

СообщениеДобавлено: 26.10.2011 02:53:32
leo_bsv
frost_asm писал(а):а насчет названия у меня что то совсем нет идей.

может быть назвать его ODF или ODFproc раз он с этими документами работает... :?:
вообще говоря этот формат реализован не только в OOo и Libre...
это ли не очередная реализация Open Document Format :?:
не знаю есть среди паскальных модулей модуль с названием odf.pas или нет... :?:

Re: Работа с uOpenOffice

СообщениеДобавлено: 27.10.2011 21:05:34
Владимир
На вскидку накидал вот что :idea:
Код: Выделить всё
// удаление пустых строк из таблицы
procedure TTable.RemoveEmptyRow(Prefix: string);
var Node, SuicideNode: TDOMNode;
begin
  Node:=RootNode.FirstChild;
  while Assigned(Node) do begin
    //обработаем объединенные ячейки
    if Node.NodeName='table:covered-table-cell' then begin
      Node:=Node.NextSibling;
      continue;
    end;
    if (Node.FirstChild.NodeName='text:p') and
      (UTF8Pos(Prefix,Node.FirstChild.TextContent)>0) then begin
      SuicideNode:=Node;
      Node:=Node.NextSibling;
      SuicideNode.Destroy;
    end;
  end;
end;


Валится на if (Node.FirstChild.NodeName='text:p') and
(UTF8Pos(Prefix,Node.FirstChild.TextContent)>0) then begin

Если возможно, помогите! Сам не разберусь. Спасиб!

Re: Работа с uOpenOffice

СообщениеДобавлено: 27.10.2011 22:03:09
Sergei I. Gorelkin
Уместно было бы проверять Node.FirstChild<>nil, перед тем как пытаться прочитать TextContent...

Re: Работа с uOpenOffice

СообщениеДобавлено: 28.10.2011 09:43:30
v-t-l
Несколько идей по улучшению uOpenOffice

1. В функции TOoWriter.FindAndReplace необходимы изменения. По крайней мере с fpc 2.4.4, а может быть и раньше, TDOMNode.TextContent объявлен как DOMString, а DOMString = WideString. Поэтому происходит перекодировка в WideString из строки в кодировке UTF-8, как из AnsiString.
Что-то вроде :oops:
Код: Выделить всё
{$IFDEF FPC_VER 2.4.4} // ифдефы нужно переписать на проверку ВЕРСИИ fpc, сейчас не вспомню как :) !!!!
    txtcontent:=UTF8Encode(Node.TextContent);
{$ELSE}
    txtcontent:=Node.TextContent;
{$ENDIF}
    // делаем замену при розвращении по дереву
    if pos(Search,txtcontent)>0 then
        begin
{$IFDEF  FPC_VER 2.4.4}
           node.TextContent := UTF8Decode(ReplaceAllSubString(txtcontent,Search,Replace));
{$ELSE}
           node.TextContent := ReplaceAllSubString(txtcontent,Search,Replace);
{$ENDIF}

2. TTable желательно переименовать в TOoWriterTable или хотя бы TOoTable, чтобы не было путаницы с потомком TDataset.
3. При выполнении TOoWriter.LoadTemplate желательно запоминать весь набор файлов, входящих в шаблон, и при TOoWriter.GenerateDocument их добавлять в новый документ также. Иначе могут исчезнуть вставленные изображения, объекты и т.п.

Re: Работа с uOpenOffice

СообщениеДобавлено: 28.10.2011 18:32:09
leo_bsv
Sergei I. Gorelkin писал(а):Уместно было бы проверять Node.FirstChild<>nil, перед тем как пытаться прочитать TextContent...

+1 или Node.HasChildren
2 v-t-l угу :!: ценные рекомендации :!:

Re: Работа с uOpenOffice

СообщениеДобавлено: 28.10.2011 18:36:09
Sergei I. Gorelkin
Модуль DOM использовал DOMString=WideString с момента создания, и это никогда не менялось.

Re: Работа с uOpenOffice

СообщениеДобавлено: 28.10.2011 22:11:49
leo_bsv
v-t-l писал(а):1. В функции TOoWriter.FindAndReplace необходимы изменения. По крайней мере с fpc 2.4.4, а может быть и раньше, TDOMNode.TextContent объявлен как DOMString, а DOMString = WideString. Поэтому происходит перекодировка в WideString из строки в кодировке UTF-8, как из AnsiString.

Не ясен мотив такого наворота... при использовании русских идентификаторов и вообще русских символов в исходном тексте я обычно пишу UTF8ToSys('мой_текст') и всё работает,.. а что - что-то не работало? Я вообще говоря не замечал... где искать? :)

Re: Работа с uOpenOffice

СообщениеДобавлено: 29.10.2011 11:26:40
v-t-l
Писать каждый раз Utf8ToSys несколько не удобно, мне кажется :D

Re: Работа с uOpenOffice

СообщениеДобавлено: 29.10.2011 21:43:38
leo_bsv
v-t-l писал(а):Писать каждый раз Utf8ToSys несколько не удобно, мне кажется :D

мне тоже так кажется :wink: зато работает всё ))))
создавай аккаунт на SourceForge.net и скажи мне username созданного аккаунта - добавлю тебя в девелоперы.

Добавлено спустя 1 час 39 минут 23 секунды:
Файл модуля доступен из репозитория svn://svn.code.sf.net/p/odfproc/code/trunk,
терминальная команда lin:
Код: Выделить всё
svn checkout svn://svn.code.sf.net/p/odfproc/code/trunk odfproc-code

страница ODFProc.pas на SF: https://sourceforge.net/p/odfproc/

Re: Работа с uOpenOffice

СообщениеДобавлено: 31.10.2011 00:42:50
leo_bsv
v-t-l писал(а): При выполнении TOoWriter.LoadTemplate желательно запоминать весь набор файлов, входящих в шаблон, и при TOoWriter.GenerateDocument их добавлять в новый документ также. Иначе могут исчезнуть вставленные изображения, объекты и т.п.

Кстати использование внешних архиваторов решает проблему - просто архивируется всё содержимое папки. Как это сделать с помощью zipper пока не знаю.

Добавлено спустя 1 час 58 минут 6 секунд:
Проблема архивации успешно решена с помощью zipper'a )

Re: Работа с uOpenOffice

СообщениеДобавлено: 06.11.2011 14:25:07
volodya25
Скачал файл модуля из репозитория, создал пустой проект, бросил кнопку на форму
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var oowriter: todt;
begin
   OoWriter:=TOdt.Create; 


Получаю ошибку Project project1 raised exception class `EDOError` with message: EDOMError in DOMDocument.CreateAttribute
Код: Выделить всё
procedure TOdt.GenerateStyles;
var Root, Node: TDOMNode;
begin
FreeAndNil(FStyles);
FStyles:=TXMLDocument.Create;
Root:=FStyles.CreateElement('office:document-styles');
  InsertXMLNS(TDOMElement(Root));  // Здесь появляется сообщение об ошибке


Возможно ошибка из-за того что в файле odfproc.pas изменил строку
Код: Выделить всё
uses main,Zipper;

на
Код: Выделить всё
uses Zipper;

Модуль main у меня отсутствует.
Поскажите пожалуйста что я делаю не так.
Ubuntu 11.10/Lazarus 0.9.30/FPC 2.4.4

Re: Работа с uOpenOffice

СообщениеДобавлено: 06.11.2011 21:22:50
leo_bsv
Косяк появился после внесения изменений, исправляю... main никак не влияет.

Добавлено спустя 12 минут 19 секунд:
Ошибка устранена.
Модуль не тестировался, об ошибках можете сообщать сюда или на страницу на SourceForge
Теоритически сейчас всё доложно работать :)

Re: Работа с uOpenOffice

СообщениеДобавлено: 09.11.2011 11:29:39
volodya25
Заработало.
TZipper на выходе формирует .zip а не .odt, из-за чего Writer потом не находит сформированный файл. Вылечил.
Если используется Libre Office то запуск редактора не через ooffice а через soffice.
Куда слать патч?