Страница 3 из 13
Re: Работа с uOpenOffice
Добавлено: 25.10.2011 00:26:32
leo_bsv
leo_bsv писал(а): frost_asm писал(а):Может ти бы выложил код на SourceForge или Google Code.
Эмм... модуль то не я писал... ) товарищч с webdelphi.ru... напишу ему письмецо =)
Владислав, разработчик модуля, не против чтобы мы выложили исходник и организовали поддержку.
Вообщем давайте выложим - вопрос - куда? SourceForge или Google Code?
Если у кого-то есть желание и опыт работы с такими ресурсами - милости просим.
Если не найдётся подходящей кондидатуры - это сделаю я

только чур ногами не пинать - ни разу такими вещами не занимался.
Добавлено спустя 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
Владимир
На вскидку накидал вот что
Код: Выделить всё
// удаление пустых строк из таблицы
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.
Что-то вроде
Код: Выделить всё
{$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 несколько не удобно, мне кажется

Re: Работа с uOpenOffice
Добавлено: 29.10.2011 23:23:01
leo_bsv
v-t-l писал(а):Писать каждый раз Utf8ToSys несколько не удобно, мне кажется

мне тоже так кажется

зато работает всё ))))
создавай аккаунт на 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 02:40:56
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 изменил строку
на
Модуль main у меня отсутствует.
Поскажите пожалуйста что я делаю не так.
Ubuntu 11.10/Lazarus 0.9.30/FPC 2.4.4
Re: Работа с uOpenOffice
Добавлено: 06.11.2011 21:35:09
leo_bsv
Косяк появился после внесения изменений, исправляю... main никак не влияет.
Добавлено спустя 12 минут 19 секунд:Ошибка устранена.
Модуль не тестировался, об ошибках можете сообщать сюда или на
страницу на SourceForgeТеоритически сейчас всё доложно работать

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