Форум

Работа с RTF файлами

Uncle_ed: Подскажите, как прочитать кусок информации из RTF файла и вывести его в окне ? Смотрел пример с RichEdit - он вроде читает файлы RTF, но только текст без графики. Я хотел разработать новую версию своего старого экзаменатора т.к. ни один из существующих не подходит(заморочки с протоколами). Т.е. читаю вопрос из файла, вывожу его в окне и прошу ответить на него. Но если раньше это был просто текст, то теперь хочу текст красивый с картинками и схемами. Идея простенькая, и не хотелось бы ради этого изучать формат RTF.

Ответов - 30, стр: 1 2 All

Pasha: С rtf можно работать через ole word точно так же, как и с doc Этот способ конечно немного более медленный, чем через richedit Для ответа можно предусмотреть в документе некоторую область, и затем так же через ole читать текст в этой области

ММЛ: Uncle_ed пишет: Смотрел пример с RichEdit - он вроде читает файлы RTF, но только текст без графики. В FiveWin'е с графикой

Uncle_ed: Подскажите, где почитать о функциях OLE , не разу им не пользовался. Единственный пример только выводит информацию в Word - где все остальное глянуть ? Как взять страничку из Word и показать ее в окне без вордовских кнопочек ? FiveWin разве не Клипперная библиотека ? Её можно использовать в xHarbour ?


Dima: Uncle_ed пишет: FiveWin разве не Клипперная библиотека ? Её можно использовать в xHarbour ? Подробнее тута :) http://www.fivetechsoft.com/english/index.html

Pasha: Uncle_ed пишет: Подскажите, где почитать о функциях OLE , не разу им не пользовался. Единственный пример только выводит информацию в Word - где все остальное глянуть ? Лучше всего посмотреть справку VBA по Word и Excel: VBAWD10.CHM и VBAXL10.CHM Как взять страничку из Word и показать ее в окне без вордовских кнопочек ? Вот это не знаю. Я в незапамятные времена в Delphi так делал, а как средствами харбора - это не понадобилось. И не встречал чтобы кто-нибудь так делал. В отдельном окне - пожалуйста FiveWin разве не Клипперная библиотека ? Её можно использовать в xHarbour ? fw во-первых существует для разных компиляторов: Clipper, [x]Harbour, Alaska xBase, C3, и во-вторых - для разных платформ: Windows, Unix. Был даже FiveDos ! Ну а класс для fw (RichText к примеру) в принципе можно адаптировать скажем к minigui, сырцы ведь есть. Адаптировали же TSBrowse, что намного сложнее

Uncle_ed: Спасибо, будем читать и пробовать.

Uncle_ed: Не смог найти fw для xHarbour. B вообще все ссылки на него пустые. Где хотябы взять сырцы RichText ? Ole меня не впечатлил. А может я вообще зря стараюсь ? Может все-таки планируется доработать RichEdit до полноценного состояния ?

Pasha: Uncle_ed пишет: Не смог найти fw для xHarbour. B вообще все ссылки на него пустые. Где хотябы взять сырцы RichText ? fw во всех вариантах платный, поэтому в свободном доступе его нет Что касается richtext, то у меня есть версия 0.90 за 2000-й год Могу выслать Хотя конечно у Михаила наверняка есть посвежее А может я вообще зря стараюсь ? Может все-таки планируется доработать RichEdit до полноценного состояния ? Кто знает, какие планы у автора: Tom Marchione, и занимается ли он сейчас этим классом

Петр: Uncle_ed Но если раньше это был просто текст, то теперь хочу текст красивый с картинками и схемами. Идея простенькая, и не хотелось бы ради этого изучать формат RTF. А почему ты решил, что RTF - единственный путь организовать "красоту"? Не поддерживает - ну и пускай. HTM страницы тоже довольно красивые можно сверстать и рассматривать с помощью qhtm.dll. Пример в Samples\Advanced\Qhtm. Страницы можно генерировать и динамически, говорят Да и другие решения возможны.

Pasha: Проще всего сделать красивую форму средствами самого минигуи Шрифт, размер, цвет, фон, рисование рамок - все это делается несложно Главное - фантазия Набросать в качестве образца красивую форму в ворд, а затем нарисовать такую же средствами минигуи обычными командами Window, Frame, Labe, TextBox и т.д

Uncle_ed: Я знаю что есть и другие варианты, но у мня специфика. Я работаю в учебном центре крупного промышленного предприятия. Мы обучаем и аттестуем десятки тысяч человек ежегодно по более чем 100 различным направлениям. Сдача экзаменов и различных правил у нас поставлена на поток. За долгие годы работы я испытал целую кучу экзаменаторов ,но самый лучший пришлось создавать самому. Он работает с 1993 года верой и правдой, но настало время создать новый. Экзаменационные вопросы создают самые разные специалисты, а любимый их редактор Word. Ему мы научили всех. Штатных программистов у нас после перестройки не стало, да и вообще людей не хватает. Поэтому хотелось бы без дополнительных заморочек вопросы сразу после утверждения засовывать в экзаменатор и вперед. HTML ни кто кроме меня не знает, формат DOC от версии к версии все время меняется, а вот RTF остается стабильным. Вот выбор на него и упал. Вставлять закладки в документ тоже ни кто не будет - значит остается оперировать страницами или ориентироваться по спец.меткам в тексте, которые можно расставить по тексту быстро. Работа с распространнеными документами была-бы очень полезной для популяризации xHarbour. Есть же у нас библиотеки, которые поддерживают все известные виды баз данных. Когда-то это стало одной из причин популярности Clipper. Сейчас времена изменились и данные лежат не только в базах данных, но и в огромных архивах с документами DOC, XLS, RTF ...... Может моя идея кому-нибудь понравится и xHarbour перестанет быть просто повторением Clippera. Нужна библиотека, которая одинаково просто работает с разными видами документов. Работа с ними должна на мой взгляд быть похожа на работу с базами данных. Вставить страничку (строчку) , считать страницу (строчку), перейти на страницу с номером N (строчку),вывести на экран отформатированную страничку...... Жаль времени нет и в программировании я поотстал изрядно, а то бы сам взялся !

ММК: Pasha пишет: Хотя конечно у Михаила наверняка есть посвежее Да, конечно, если надо могу выложить richtext

ММК: Uncle_ed пишет: по спец.меткам в тексте, которые можно расставить по тексту быстро. А как выглядят эти спецметки?

Pasha: Uncle_ed пишет: формат DOC от версии к версии все время меняется, а вот RTF остается стабильным Неверное утверждение. Никому ведь не приходит в голову читать *.doc побайтно А используя средства ole, я одинаковыми командами работаю и с Word 97, и с Word 2003. Доступ через ole инвариантен к версии Office Uncle_ed пишет: Работа с распространнеными документами была-бы очень полезной для популяризации xHarbour. Есть же у нас библиотеки, которые поддерживают все известные виды баз данных. Когда-то это стало одной из причин популярности Clipper. Сейчас времена изменились и данные лежат не только в базах данных, но и в огромных архивах с документами DOC, XLS, RTF ...... Может моя идея кому-нибудь понравится и xHarbour перестанет быть просто повторением Clippera. Нужна библиотека, которая одинаково просто работает с разными видами документов. Работа с ними должна на мой взгляд быть похожа на работу с базами данных. Вставить страничку (строчку) , считать страницу (строчку), перейти на страницу с номером N (строчку),вывести на экран отформатированную страничку...... Можно конечно даже сделать подобный rdd, только смысла в этом никакого, в унификации доступа к документам самого разного типа Сводить работу даже с doc выборкой по номеру строки - это уж очень сильно ограничивать себя А для того чтобы использовать документы полноценно и существуют команды ole, которые разные для разных типов документов, но дают доступ ко всем возможностям Uncle_ed пишет: Вставлять закладки в документ тоже ни кто не будет - значит остается оперировать страницами или ориентироваться по спец.меткам в тексте, которые можно расставить по тексту быстро. Метки как я понимаю это те же закладки для неискушенного юзера, которые визуально видимы. И с такими метками можно работать, пользуясь простыми командами поиска

Uncle_ed: ММК пишет: Да, конечно, если надо могу выложить richtext Да, очень нужно. ММК пишет: А как выглядят эти спецметки? например так: ? 5,2 вопрос 1

Uncle_ed: Pasha пишет: А для того чтобы использовать документы полноценно и существуют команды ole, которые разные для разных типов документов, но дают доступ ко всем возможностям Ole - это что-то типа встроеного языка у WORD или EXEL. При этом наличие данных программ обязательно. К тому же подгружаются их ресурсы. Работая напрямую из своей программы я не буду зависить от Word и загружать зря ресурсы компьютера. Кроме того, OLE черезчур навороченное и больше предназначено для автоматизации документа. В жизни же часто бывает что нужно лишь автоматически вытащить из документа кусок информации. Например организовать из своей программы поиск нужного текста. Можно даже не заморачиваться функциями записи пока - может они ни кому и не понадобятся. Pasha пишет: Метки как я понимаю это те же закладки для неискушенного юзера, которые визуально видимы. И с такими метками можно работать, пользуясь простыми командами поиска Так-то оно так , но расставлять закладки в большом количестве слишком муторно, да и не все пользователи умеют. Кроме того они все разные получаются. Мои метки растаскиваются пользователем обычным копированием без привлечения большого интелекта. При этом гораздо легче обрабатываются программно.

ММК: Pasha пишет: А для того чтобы использовать документы полноценно и существуют команды ole Паша , а можешь ты сделать такую штуку : Вордовский документ и в нем та-та-та... плюс табличка. К примеру - [tabnom] [fio] [oklad] [address] Здесь нарисовать у меня не получилось :)) Ну это табличка из четырех( не суть важно) колонок. В каждой вот по такой метке ( см.выше) . Т.е. четыре колонки, четыре метки, одна строка. Ну , а дальше берем файлик с данными и в зависимости от числа записей подставляем значения одноименных полей. На выходе должен получится вордовский документ с таблицей содержащей число строк ... ну это уже неважно :) Важно , чтоб таблица растянулось под нас:)))

ММК: Uncle_ed пишет: Да, очень нужно. Куда? ММК пишет: цитата: А как выглядят эти спецметки? например так: ? 5,2 вопрос 1 Ну и чтоб мне стало яснее - как это расшифровать? :))

Pasha: дык давай свой адрес - получишь класс RichText

Pasha: ММК пишет: Паша , а можешь ты сделать такую штуку : Вордовский документ и в нем та-та-та... плюс табличка. К примеру - [tabnom] [fio] [oklad] [address] Здесь нарисовать у меня не получилось :)) Ну это табличка из четырех( не суть важно) колонок. В каждой вот по такой метке ( см.выше) . Т.е. четыре колонки, четыре метки, одна строка. Ну , а дальше берем файлик с данными и в зависимости от числа записей подставляем значения одноименных полей. На выходе должен получится вордовский документ с таблицей содержащей число строк ... ну это уже неважно :) Важно , чтоб таблица растянулось под нас:))) Дык есть примерно такая функция - экспорт обьекта Browse в таблицу Word Даю как есть Function BrwToTab(oB, aH, aF) // ------------------------------------------------------------- // Экспорт обьекта или строки в таблицу Word // ------------------------------------------------------------- Local oWord, oDoc, oSel, x, oTable, oRow, ser Local nRow, oCol, oCell, cGrid WaitPush() oWord := NewOle( "Word.Application" ) if oWord # nil Begin sequence oWord:Documents:Add() oDoc := oWord:Get('ActiveDocument') oSel := oWord:Get('Selection') oSel:Font:Name := 'Arial' oSel:Font:Size := 12 if aH # nil oSel:Get('ParagraphFormat'):Alignment := 1 // wdAlignParagraphCenter for ser := 1 to len(aH) if aH[ser] # nil oSel:Invoke('InsertAfter', OEMToAnsi(aH[ser])+Chr(13)+Chr(10)) endif next oSel:Invoke('EndKey', 6) endif oDoc:Tables:Invoke('Add', oSel:Range, 1, oB:ColCount) #ifndef __HARBOUR__ oTable := oDoc:Tables:Invoke('Item', 1) #else oTable := oDoc:Tables[1] #endif for nRow := 1 TO oB:nLinesHdr oRow := oTable:Rows:Last for ser := 1 TO oB:ColCount oCol := oB:GetColumn(ser) #ifndef __HARBOUR__ oCell := oRow:Cells:Invoke('Item', ser) #else oCell := oRow:Cells[ser] #endif if ! Empty(oCol:oHeader:aTitles[nRow]) oCell:Select() oSel:Invoke('InsertAfter', oCol:oHeader:aTitles[nRow]) endif if oCol:oHeader:aGrids # nil cGrid := oCol:oHeader:aGrids[nRow] // if At('N', cGrid) = 0 // wdCellBorder(oCell, -1) // endif if At('S', cGrid) = 0 .and. nRow # oB:nLinesHdr wdCellBorder(oCell, -3) endif // if At('E', cGrid) = 0 // wdCellBorder(oCell, -2) // endif if At('W', cGrid) = 0 .and. ser # oB:ColCount wdCellBorder(oCell, -4) endif endif next oTable:Rows:Add() next for ser := 1 to oB:ColCount x := Eval(oB:GetColumn(ser):Block) if ValType(x) == 'N' .or. oB:GetColumn(ser):nAjuste = 38 #ifndef __HARBOUR__ oTable:Columns:Invoke('Item', ser):Select() #else oTable:Columns[ser]:Select() #endif oSel:Get('ParagraphFormat'):Alignment := 2 // wdAlignParagraphRight endif next oB:GoTop() while ! oB:HitBottom oRow := oTable:Rows:Last for ser := 1 to oB:ColCount x := Eval(oB:GetColumn(ser):Block) #ifndef __HARBOUR__ oRow:Cells:Invoke('Item', ser):Select() oSel:Invoke('InsertAfter', xToSt(x)) #else oRow:Cells[ser]:Select() oSel:InsertAfter(xToSt(x)) #endif next oB:Down() if ! oB:HitBottom oTable:Rows:Add() endif SysRefresh() enddo #ifndef _tsbrw if oB:lFoots #else if oB:lFooting #endif oTable:Rows:Add() oRow := oTable:Rows:Last for ser := 1 to oB:ColCount #ifndef _tsbrw x := oB:GetColumn(ser):footing #else x := oB:aColumns[ser]:cFooting #endif if ! Empty(x) #ifndef __HARBOUR__ oRow:Cells:Invoke('Item', ser):Select() oSel:Invoke('InsertAfter', xToSt(x)) #else oRow:Cells[ser]:Select() oSel:InsertAfter(xToSt(x)) #endif endif next endif oTable:Columns:Invoke('AutoFit') if aF # nil oSel:Invoke('EndKey', 6) // Unit:=wdStory for ser := 1 to len(aF) if aF[ser] # nil oSel:Invoke('InsertAfter', OEMToAnsi(aF[ser])+Chr(13)+Chr(10)) endif next endif oSel:Invoke('HomeKey', 6) oWord:Visible := .T. #ifndef __HARBOUR__ oSel:End() oDoc:End() oWord:End() #endif end endif WaitPop() Return nil

ММК: Pasha пишет: дык давай свой адрес - получишь класс RichText Ну да:)) Именно это я и хотел сказать дядюшке Эду ! Только ответ с вопросом того... Вопрос для него остается, впрочем , как и ответ :))

ММК: Pasha пишет: Дык есть примерно такая функция - экспорт обьекта Browse в таблицу Word Даю как есть Спасибо ,Паша :)) Для Rtf с классом RichText я такое сделал , а вот с вордом интересно будет попробовать.

Uncle_ed: ММК пишет: Ну и чтоб мне стало яснее - как это расшифровать? :)) ? 5,2 Вопрос 1 [0,1,0.5,0,0] <picture.pcx> текст вопроса 1. вариант ответа 2. вариант ответа 3. вариант ответа ...... {пункт №..... правил таких-то ......} Знак вопроса в начале строки означает что начинается новый вопрос. цифра 5 означает что в нем будет 5 вариантов ответа из которых номер 2 верный. Дальше следует наименование вопроса и могут быть другие данные, в случе если правильных ответов много или нужно показать еще и картинку. Картинка в старой программе вызывалась по функциональной клавише, а теперь я хочу чтобы она вставлялась прямо в текст вопроса. В конце вопроса в фигурных скобках размещаются пояснения к правильному ответу, которые можно получить только в режиме обучения.

Петр: Uncle_ed пишет: ? 5,2 Вопрос 1 [0,1,0.5,0,0] <picture.pcx> Для разбора таких строк существуют функции работы с регулярными выражениями.

Uncle_ed: Петр пишет: Для разбора таких строк существуют функции работы с регулярными выражениями Да обработать их не проблема. Проблема вытащить из файла RTF нужный кусок вместе с оформлением и картинками и после обработки вывести все это в свое окно. А главное все это независимо от наличия Word-а и не загружая им ресурсов. Word сегодня есть , завтра -нет, компьютеры тоже бывают разные, а программа должна работать в любых условиях. Благодаря такому подходу мои программы без проблем работают с 93 года не зависимо от смены операционок и железа.

Петр: Проблема в том, что ты вцепился в RTF как не знаю во-что. Советую внимательно почитать этот пост http://clipper.fastbb.ru/?1-0-0-00000128-000-0-0-1165577851

ММК: Uncle_ed пишет: Да обработать их не проблема В таком виде , как у Вас проблема:) Для Rtf файла Uncle_ed пишет: Проблема вытащить из файла RTF нужный кусок вместе с оформлением и картинками А вот это не проблема:) Но вставлять в свое окно уже неудобно , с учетом наличия схем. Uncle_ed пишет: А главное все это независимо от наличия Word-а и не загружая им ресурсов. Word сегодня есть , завтра -нет, компьютеры тоже бывают разные, а программа должна работать в любых условиях. Благодаря такому подходу мои программы без проблем работают с 93 года не зависимо от смены операционок и железа. Да не главное это , скорее недостаток :( Ворд не только сегодня есть и завтра будет , но был и вчера.. И практически на всех машинах Более того , сегодня его аналоги есть даже на КП и мобилках . Вы уж извините,что я так :) Делал я генератор отчетов с использованием Rtf и задачу приема экзаменов , как Вы говорите "автономную" ;) Т.е. под виндой , но без офиса. Так вот идея все это совместить мне понравилась, только мне не понятна Ваша постановка задачи. Кто готовит материал , как будет проходить тестирование? и т. д. Ну Вы понимаете :))

Uncle_ed: ММК пишет: Так вот идея все это совместить мне понравилась, только мне не понятна Ваша постановка задачи. Кто готовит материал , как будет проходить тестирование? и т. д. Ну Вы понимаете :)) Материалы готовят разные специалисты (механики, технологи, энергетики ......) Печатать в Ворде они умеют, выбират шрифты и вставлять в текст картинки тоже могут, но не более того. А тестируются все подряд - начиная от слесаря заканчивая генеральным директором. Тестирование проходит в компьютерных классах или на рабочих местах, а это тысячи разномастных компьютеров. ММК пишет: Да не главное это , скорее недостаток :( Ворд не только сегодня есть и завтра будет , но был и вчера.. И практически на всех машинах На счет того, что Ворд был, есть и будет не согласен. Точнее что был и местами даже есть это точно, а вот на счет будущего я бы не загадывал. Слышали небось какую войну государство объявило бедным учебным заведениям и учителям. Думаю в такой обстановке многие кинутся на различные бесплатные редакторы. Остается надеятся что формат RTF будет для многих из них связующим звеном.

ММК: Uncle_ed пишет: не согласен. Точнее что был и местами даже есть это точно, а вот на счет будущего я бы не загадывал. Слышали небось какую войну государство объявило бедным учебным заведениям и учителям. Не слышал. Я в Белоруссии живу. У нас со всеми война. Хотя ,судя по Вашему посланию, учебные заведения не такие уж и бедные :) Тысячи разномастных компьютеров.... Короче так ничего не получится. Готовится материал в ворде. Ворда не будет - всему ... Ц! Вот если бы с вордом тогда можно былобы написать две задачи. Одна формирует базу из вордовских документов , а вторая и третья организуют процесс тестирования :)))

Uncle_ed: А у нас для того чтобы получить право на вхождение в ВТО заводят уголовные дела на учителей, в компьютерах которых (школьных или домашних) нашли нелицензионное программное обеспечение. Я вот и про бесплатный Harbour вспомнил в свете последних событий. На счет нашего учебного заведения поясняю - мы учебный центр при крупном промышленном предприятии. Нам конечно живется легче, но бюджет тоже сильно ограниченный и тратить его можно только на строго определенные цели. Тысячи компьютеров это не в учебном центре, а во всей организации (дистанционное обучение). Ворд то если не исчезнет то сильно поубавится, а вот формат RTF останется и тогда готовить текст можно будет на любом редакторе, а потом просто конвертировать.



полная версия страницы