Как сделать таблицу в rtf формате
Как сделать таблицу в rtf формате
← →
Курдль © ( 2004-04-27 20:25 ) [1]
← →
evvcom © ( 2004-04-28 01:05 ) [2]
Сделай что надо в Word и сохрани как rtf.
← →
evvcom © ( 2004-04-28 10:07 ) [4]
Блин! Все разжевывать надо? Сохранишь из Word, потом откроешь и посмотришь, как это получилось. По аналогии напишешь программно.
2 evvcom, прошу прошения, может плохо сформулировал. То что ты предлагал, я сделал в первую очередь, посмотрел, если разбираться голову сломать можно. А меня время сильно жмет, я диплом дописываю, хотелось бы уж сразу описание заиметь.
← →
Курдль © ( 2004-04-28 14:09 ) [6]
> Блин! Все разжевывать надо?
Я попробовал в Яндексе поискать по фразе «Формат Rich Text (RTF)».
Вывалилось 3276 документов, первый же из которых оказался тем, что надо: «http://blackman.wp-club.net/docum/rtf.php»
Это что, сверхзадача, которую самому проделать нельзя? 🙁
Сделай программно через Word, примеры ищи в MSDN.
← →
Курдль © ( 2004-04-28 15:15 ) [8]
> Сделай программно через Word
И как это должно выгдядеть?
В MSDN или воспользуйся поиском в интернете. Слова: Delphi, Word.Application, CreateOleObject.
и так далее, ищи примеры.
> Сделай программно через Word
> wa := CreateOleObject(«Word.Application»);
Вы бы хоть добавляли к своим категоричным советам нечто навроде «а не попробовать ли. » или «возможно я ошибаюсь, но сделать можно и так. «! Особенно когда всерьез советуете человеку удалять гланды через ж. елудок! 🙁
«evvcom © (28.04.04 01:05) [2]
Сделай что надо в Word и сохрани как rtf.»
Всё что можно сделать в Word ручками, можно сделать и программно. Но нужно разбираться, там много объектов. Поэтому нужно найти наиболее подходящий пример и от него плясать.
например (на СИ):
открытие Doc файла и сохранение в HTML
BOOL DocToHtml(char* fIn, char* fOut) <
// Convenient values declared as ColeVariants.
COleVariant covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// Get the IDispatch pointer and attach it to the objWord object.
_Application objWord;
if (!objWord.CreateDispatch(«Word.Application»))
<
return ERR_WORD_RUN;
>
Documents docs(objWord.GetDocuments());
_Document doc;
doc.AttachDispatch(docs.Open(
COleVariant(fIn,VT_BSTR),
covFalse, // Confirm Conversion.
covTrue, // ReadOnly.
covFalse, // AddToRecentFiles.
covOptional, // PasswordDocument.
covOptional, // PasswordTemplate.
covFalse, // Revert.
covOptional, // WritePasswordDocument.
covOptional, // WritePasswordTemplate.
covOptional, // Format. // Last argument for Word 97
covOptional, // Encoding // New for Word 2000/2002
covTrue // Visible
) // Close Open parameters
); // Close AttachDispatch(Е)
doc.SaveAs(COleVariant(fOut,VT_BSTR), COleVariant((short)8),
covOptional, covOptional, covFalse,
covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional);
objWord.Quit(covFalse, covOptional, covOptional);
return OK;
>
← →
Курдль © ( 2004-04-28 16:37 ) [12]
> Всё что можно сделать в Word ручками, можно сделать и программно.
ЗАЧЕМ? Если Вам понадобится в программе посчитать 2*2=4, вы что, по OLE полезете к Calculator.exe? А если Ворда на компе нет?
Требуется не 2*2 посчитать, а таблицы создать и сохранить в RTF.
Это посерьёзнее будет.
← →
Курдль © ( 2004-04-28 17:35 ) [14]
> Требуется не 2*2 посчитать, а таблицы создать и сохранить
> в RTF.
> Это посерьёзнее будет.
У меня этот код занял
Привели бы код в таком случае. Вместо вопроса зачем.
← →
Курдль © ( 2004-04-28 17:53 ) [16]
uses Classes, Windows, Forms, SysUtils;
function CreateRTF(StringList: TStringList; colCount: Integer): Boolean;
resourcestring
filePrefix = » <\rtf1\ansi\ansicpg1251\deff0\deflang1049<\fonttbl<\f0\froman"+
«\fcharset204<\*\fname Times New Roman;>Times New Roman CYR;> <"+
«\f1\froman\fcharset0 Times New Roman;>>»#13#10″\viewkind4\uc1″#13#10;
rowPrefix = «\trowd\trgaph108\trleft-108»;
sArraySizeError = «Размер массива меньше количества колонок»;
sDivisionError = «Размер массива не делится на количество колонок»;
sError = «Ошибка»;
← →
evvcom © ( 2004-04-28 23:38 ) [17]
Ну вы, блин, даете! Я про Word заикнулся только для того, чтобы посмотреть на результат. Как Word в rtf сгенерит таблицы. Перечитайте вопрос! Я совсем не намекал на то, чтобы через OLE лезть в Word, рисовать таблицы, а потом заставлять его все это сохранять в rtf, после чего этот rtf грузить в ReachEdit. Действительно так получается «удаление гланд через ж. елудок».
Повторяю еще раз, Word использовать только для того, чтобы увидеть какие именно и в каком порядке он сгенерирует тэги, о которых было упомянуто в [1] ответе.
Используйте для изучения готовые инструменты. Чего велосипеды изобретать?
← →
Курдль © ( 2004-04-29 10:18 ) [18]
> Повторяю еще раз, Word использовать только для того, чтобы
> увидеть какие именно и в каком порядке он сгенерирует тэги,
> о которых было упомянуто в [1] ответе.
> Используйте для изучения готовые инструменты. Чего велосипеды
> изобретать?
Согласен! Но это когда не хватает документации.
А здесь же налицо готовая спецификация по формату RTF! Чего же боле?
← →
evvcom © ( 2004-04-29 11:47 ) [19]
Как сделать таблицу в WordPad
Многие считают, что самым известным текстовым редактором является WordPad. На самом же деле, это далеко не так. Но время ему уделить всё-таки нужно, ведь именно он предустановлен практически в любой версии операционной системы Windows. Следовательно, ВордПад действительно один из самых востребованных редакторов. По крайней мере, среди тех пользователей, которым хватает его функционала. Возможно, Вы увидитесь, но сегодня мы обсудим с Вами одну весьма интересную тему: из этой статьи Вы узнаете, как сделать таблицу в WordPad. К счастью, это действительно реально и если Вам не нужны изыски работы с Microsoft Office Word, то можете продолжать пользоваться данным софтом.
Создание таблицы с помощью ВордПад
Разумеется, для начала нам нужно запустить саму программу. Сделать это можно следующим способом:
Отлично, окно программы запустилось. А значит, мы можем продолжить с ним работу.
Собственно, это единственный способ хоть как-то сделать таблицу в ВордПад. Дальше Вы сами решайте, хотите ли Вы каждый раз так заморачивать или всё-таки установите более продвинутый текстовый редактор от Microsoft в лице Word. Мы советует второй вариант.
Впрочем, стоит помнить, что заточен под работу с таблицами именно Excel – у него и функционал соответствующий, поэтому если тип будущего документа позволяет, лучше сразу создавайте таблицы в нём.
Файлы RTF – как открывать, редактировать и конвертировать
RTF-файлы полезны, потому что многие программы их поддерживают. Это означает, что вы можете создать файл RTF в одной программе в конкретной операционной системе, такой как macOS, а затем открыть тот же файл RTF в Windows или Linux, и он будет выглядеть, в основном, одинаково.
Как открыть файл RTF
Самый простой способ открыть файл RTF в Windows – это использовать WordPad, так как он предварительно установлен. Однако, другие текстовые редакторы и текстовые процессоры также прекрасно справятся с задачей, например, LibreOffice, OpenOffice, AbleWord, Jarte, AbiWord, WPS Office и SoftMaker FreeOffice.
Zoho Docs и Google Docs – это два способа открывать и редактировать файлы RTF онлайн.
Если вы используете Документы Google для редактирования файла RTF, сначала необходимо загрузить его в свою учетную запись Google Диска с помощью меню «Создать» → «Загрузка файла». Затем щелкните файл правой кнопкой мыши и выберите «Открыть с помощью» → «Документы Google».
Важно понимать, что не каждая программа, поддерживающая файлы RTF, будет отображать файл одинаково. Это связано с тем, что некоторые программы не поддерживают более новые спецификации формата RTF.
Некоторые другие, «платные» способы открытия RTF-файлов включают использование Microsoft Word или Corel WordPerfect.
Некоторые из этих редакторов Windows RTF также работают с Linux и Mac. Если вы работаете в macOS, вы также можете использовать Apple TextEdit или Apple Pages, чтобы открыть файл RTF.
Если ваш RTF-файл открывается в программе, с которой вы не хотите его использовать, изучите тему «Как изменить программу по умолчанию для определенного расширения файла в Windows». Например, внесение этого изменения было бы полезно, если вы хотите отредактировать файл RTF в Блокноте, вместо OpenOffice Writer.
Как конвертировать файл RTF
Самый быстрый способ конвертировать файлы RTF – использовать онлайн-конвертер RTF, например, FileZigZag. Вы можете сохранить RTF как файл DOC, PDF, TXT, ODT или HTML. Другой способ конвертировать RTF в PDF онлайн или в PNG, PCX или PS – это использовать Zamzar.
Doxillion – это ещё один бесплатный конвертер файлов документов, который может конвертировать RTF в DOCX и множество других форматов документов.
Другой способ конвертировать файл RTF – использовать один из стандартных редакторов RTF (описанных выше). Когда файл уже открыт, используйте меню «Файл» или опцию «Экспорт», чтобы сохранить RTF-файл в другом формате.
Больше информации о формате RTF
Формат RTF был впервые использован в 1987 году, но в 2008 году Microsoft перестала его обновлять. С тех пор в этот формат были внесены некоторые изменения. Это определяет, будет ли один редактор документов отображать файл RTF таким же образом, как и другой, который его создал, зависит от того, какая версия RTF используется.
Например, хотя вы можете вставить изображение в файл RTF, не все ридеры знают, как его отобразить, потому что не все они обновлены до последней спецификации RTF.
Файлы RTF когда-то использовались для файлов справки Windows, но с тех пор были заменены файлами справки Microsoft Compiled HTML, использующими расширение файла CHM.
Первая версия RTF была выпущена в 1987 году и использовалась MS Word 3. С 1989 по 2006 годы были выпущены версии 1.1-1.91, причем последняя версия RTF поддерживала такие вещи, как разметка XML, пользовательские теги XML, защита паролем и математические элементы.
Поскольку формат RTF основан на XML, а не двоичен, вы можете фактически прочитать содержимое, открыв файл в текстовом редакторе, таком как Блокнот.
Как сделать таблицу в rtf формате
Dim objWord As Word.Application
Dim objDoc As Word.Document
Dim objTable As Word.Table
‘ открываем файл шаблона
Set objDoc = objWord.Documents.Open (Pth)
‘ делаем его активным
objDoc.Activate
‘ связывам объект с таблицей
Set objTable = objWord.ActiveDocument.Tables (1)
‘ выделяем 2-ю строку таблицы в шаблоне
objTable.Cell (2, 1).Range.Select
‘ для каждой строки в каждую ячейку вставляем нужные
‘ данные из массива
For i = 1 To NumStr
For j = 1 To 5
objTable.Cell (i + 1, j).Range.Text = NewData (j, i)
Next j
Next i
В то же время существует целый ряд бесплатных и достаточно полнофункциональных офисных пакетов: OpenOffice, StarOffice, EasyOffice и др. Для большинства операций, выполняемых обычно с документами, их возможностей вполне достаточно. Но возможна ли их простая и эффективная интеграция в прикладное программное обеспечение?
Решением этой проблемы может быть использование RTF-файлов. Этот формат, предложенный Microsoft как стандарт для обмена данными между текстовыми редакторами, поддерживается абсолютным большинством офисных пакетов. Сама Microsoft использует его в качестве формата, в котором данные передаются через буфер обмена между различными приложениями Windows.
Кратко об RTF
В формате RTF используются только коды, представляемые символами из наборов ASCII, MAC и PC. Помимо текста, RTF-файл содержит команды управления в читаемой форме. Документ состоит преимущественно из команд управления настройкой программы чтения. Эти команды можно разделить на управляющие слова и управляющие символы.
Управляющее слово представляет собой последовательность символов с разделителем в конце. Например, фрагмент:
соответствует началу закладки ndoc.
Для задания управляющей последовательности в RTF-формате используются буквы от А до Z и от а до z, а также цифры от 0 до 9. Национальные символы к управляющей информации не относятся.
В качестве управляющих символов используются отдельные буквы. Перед каждым управляющим символом вводится обратная косая черта (\). Например, фрагмент:
устанавливает шрифт № 1 размером в 20 единиц.
Фрагмент RTF-файла приведен ниже. Структура его, как можно видеть, напоминает структуру HTML-документа:
\intbl\phmrg\posy371\dxfrtext180\dfrmtxtx180\dfrmtxty0\nowrap
\aspalpha\aspnum\faauto\adjustright\rin0\lin0\f1\fs20\lang1049
\langfe1049\cgrid\langnp1049\langfenp1049<\lang1033\langfe1049
\langnp1033 11\cell 12\cell 13\cell> \pard \ql \li0\ri0\widctlpar\intbl
\aspalpha\aspnum\faauto\adjustright\rin0\lin0
В RTF-формате существует возможность объединять отдельные последовательности в группы при помощи скобок:
Такие группы создаются, например, при описании сносок, колонтитулов, закладок и т.п.
Поскольку нас интересуют только определенные задачи, знания приведенных выше управляющих слов и символов вполне достаточно. Условимся для простоты называть управляющие слова и символы тегами.
А теперь рассмотрим алгоритмы решения трех основных задач, возникающих при создании документации.
Вставка строки на месте закладки
Пример такой закладки:
Добавление строк в таблицу
Следует отметить, что недостатком предложенного алгоритма является то, что он может копировать любую строку таблицы, кроме первой. Но в большинстве случаев первая строка является «шапкой» документа и копировать ее нет необходимости.
Заполнение ячейки таблицы
Представим, что требуется найти k-ю ячейку в m-й строке n-й таблицы и вставить в нее текстовую строку данных. Пример таких ячеек:
Программа на VisualBasic, демонстрирующая применение такой технологии и функционально идентичная программе, приведенной в начале этой статьи, выглядит так:
Dim res As Boolean ‘ результат выполнения функций
res = In_Zakl1(pth, «ndoc», Str_ndoc)
res = In_Zakl1(pth, «name», Str_name)
‘ для каждой строки в каждую ячейку вставляем
‘ нужные данные из массива
For i = 1 To NumStr
For j = 1 To 5
res = In_Tcell1(pth, 1, i + 1, j, NewData (j, i))
Next j
Next i
res = In_Tcell1(pth, 1, NumStr + 2, 5, Itog)
‘ проставляем сумму «Всего»
Заключение
Текст любой ценой: RTF
Что ж продолжим наши изыскания на предмет получения текста из различных форматов данных. Не так давно мы с вами научились вытаскивать текст из zipped-xml-based файлов (odt и docx), а также, в начале этой недели, из pdf. Сегодня мы продолжим с обещанным rtf.
Rich Text Format (он же rtf), вы могли бы подумать, достаточно забытый, хотя и не очень сложный формат представления текстовых данных. Что ж, относительно несложный для получения текста, но за свою историю: от своей первой версии до текущей 1.9.1 — он приобрёл под 300 страниц официально документации и огромное количество надстроек, которые в большей степени нам будут мешать при получении plain text’а. Попробуем их обойти.
А что там внутри?
Как уж повелось давайте заглянем вовнутрь rtf-файла и посмотрим, что там внутри:
Что мы видим? Я вижу наше любимое стихотворение «Парус». Мы видим изначально текстовый 8-битный формат данных. Это уже радует — когда в исходных данных текст, понимать, что происходит, гораздо проще. Теперь давайте разберёмся, как эти самые данные прочитать. Для этого я расскажу немного теории по теме.
Будем считать, что rtf состоит из управляющих слов, которые могут быть сгруппированы во вложенные множества. Управляющие слово начинается на обратный слэш ( \ ), группа обёрнута в фигурные скобки ( < и >).
Управляющие слово состоит из последовательности букв английского алфавита (от a до z ) и может быть завершено численным параметром (возможно отрицательным). Как вариант, слово может содержать один не цифро-буквенный ascii-символ. Всё, что не подпадает под эти правила, не является частью управляющего слова. Таким образом, последовательность вида \rtf1\ansi\ansicpg1251 без проблем делится на три слова rtf с параметром 1 (major-версия формата), ansi (текущая кодировка) и ansicpg с параметром 1251 (текущая кодовая страница под номером 1251 — т.е. Windows-1251).
Группированные множества определяют область действия управляющих слов. Таким образом, управляющие слова описанные внутри фигурных скобок работают только внутри них и всех дочерних подмножеств. Для того, чтобы правильно отработать какие слова имеют место сейчас — требуется вести стек управляющих слов. При открытии фигурной скобки создавать новый элемент-массив в стеке, в который сразу же добавлять данные предыдущего слоя стека, при закрытии скобки — удалять самый верхний слой.
Откуда брать текст?
С устройством нового для нас формата мы познакомились, теперь зададимся вопросом, а где брать текст. Тут всё не так сложно, как может показаться — текст надо брать там, где текущая последовательность не идентифицируется, как управляющее слово. С парой исключений, естественно.
Во-первых, стоит отметить, что исходная кодировка rtf-файла — это ANSI, поэтому без всякий изысков сохранится только, английский текст. Нас же интересует, как минимум, русский текст, а ещё лучше Unicode, не так ли? Что правда, то правда — rtf хоть и старый формат, но сгодится на сохранение и того и другого.
Ну и второй, более интересный вариант, это unicode-кодированные данные. Для них в формат включено лаконично короткое ключевое слово \uABCD с цифровым параметром ABCD. ABCD в данном случае код unicode-символа в десятичной системе счисления. Всё опять просто, как вы могли заметить.
Давайте почитаем!
Похоже, что накопленных нами данных будет достаточно, чтобы прочитать наши первые rtf-файлы. Поехали:
Код с комментариями вы можете получить на GitHub’е.
Заключение
Что дальше? Дальше я бы хотел затронуть форматы электронных книг, такие как fb2, epub и подобные им. В связи с этим, я хотел бы обратиться за помощью к читателям: во-первых, какие ещё форматы электронных книг стоит посмотреть, а во-вторых, где можно найти побольше файлов, указанных вами форматов. Заранее спасибо 🙂