Pull to refresh

Comments 49

Хотелось бы увидеть код для DJVU, есди это возможно.
Зачем? Там ведь только картинки.
там может быть текстовый слой. но это скорее редкость
Да, «текстовое» происхождение у них очень редкое, чаще скан.
Хотя пару раз натыкался на документы, которые были сканом с текстовым слоем из FineReader.

Тут больше любопытство и спортивный интерес :)
Если бы «спортивный интерес» решал бы реальную задачу поискового индексирования, то я бы взялся — а так…
надо только не забывать что чаще всего в DJVU нет текстового слоя, а есть только картинка с текстом — её можно разве что только распознать каким-нибудь FineReader-ом, но это уже совсем другая тема.
Да, Вы правы, я глядел в сторону .djvu, но, «потрогав» несколько файлов, отказался от идеи.
Только хотел написать что RTF напомнил мне по структуре LaTex, а у вас и ссылка в конце стоит :)
Спасибо, конечно, но это хайлайтер highlight.hohli.com/ как-то странно формирует выходной поток, что хабр обрезает единичку — в комментированном исходнике по ссылке, всё нормально.
Угу. Заметил, что по ссылке все ок.
Вопрос может немного не в тему, подскажите — как объединить два rtf файла в один?
Т.е. есть договор и приложение к нему двумя файлами. Как сделать один единый документ?
Ну так навскидку — сделать merge стилей (добавить недостающие шрифты/палитры в \fonttbl и \colortbl), оставшееся приложение с учётом изменений ссылок на стили дописать перед последней }. Из коробки у меня решения нет :)
поидее если просто склеить тела документов, то всё должно быть хорошо.
только посередине стоит вставить перевод страницы (\page ) или строки (\par или \line — по ситуации) и хотя бы сброс стилей параграфа ( \pard )

пример: есть два документа {\rtf1… hello… } и {\rtf1… bye… }
если склеить должно получится:
{\rtf1… hello… \pard \page… bye… }

возможно, переопределять стили, шрифты и цвета второй раз не очень хорошо. но на первый взгляд работает.
Спасибо конечно, это вроде и так понятно. Но проблема как раз-таки и состояла в том, как отделить тело от хедера и футера. Попробуйте создать два документа (желательно побольше, может даже вставить текст какого-то договора) в MS Word в формате rtf и склеить их через блокнот. Наверное тогда вы лучше сможете понять мою проблему.
выскажусь в защиту rtf — формат читается как на винде, так и на линуксе (убунту) без установки доп. софта (ворда или openoffice), в отличие, например от doc. В тоже время в rtf можно оформлять текст, делать списки. Поэтому резюме в нем храню.
Вообще, его никто не ругает — хороший формат. При отсутствии носителя можно открыть небольшой файл в блокноте и выписать содержимое на листочек :)
Не ругаете, но у вас он
> достаточно забытый

А у меня вовсю используется. Компромиссный вариант между просто текстом и громоздким и требовательным к ПО doc.
Что ж согласен, для мультиплатформенности и нересурсоёмкости — самое оно. Да и работает, как правильно подметили, из коробки.
очень даже используется. это один из самых безболезненных способов делать на сайтах автоматически генерируемые документы, которые можно потом открыть в ворде.
Уговорили, я совсем забыл, что многие ставят метки в rtf, а потом на их место — вставляют данные. Каюсь :)
Ошибка:

$text = file_get_contents($filename);
if (empty($infile))
return "";

вероятно, тут $text на пустоту должен проверяться? Кстати, проверка empty не очень хороша, потому что даст true на тексте '0'.

Кроме того, выносите вычисление длины и прочего за условие цикла:

for ($i = 0; $i < strlen($text); $i++)

замените на

for ($i = 0, $len = strlen($text); $i < $len; $i++)

иначе у вас strlen будет вычислять значение на каждом шаге цикла
Что ж с первой «ошибкой» согласен — свой копипейст нужно проверять ;)
А про strlen — соглашусь, что каждый раз. Но я не писал самый оптимальный алгоритм (если глянуть на чтение мной pdf'а, так там вообще оптимизировать и оптимизировать). Но всё равно, Евгений, спасибо — добавил в исходном коде по ссылке.
Интересно.

Было бы здорово, если бы вы написали, как средствами PHP «собрать» Excel файл, причем — прежней Эксели (1997-2003), а не новой — 2007 года.
Да, например, это. На мой взгляд писать Excel никогда особой проблемы не представляло.
Вы мешаете мух с котлетами — cvs только даёт возможность предоставить данные в виде таблицы — никакого форматирования и тому прочих рюшек. Всё зависит от задачи, так что CVS просто есть — рулить он не может.
Можно просто вывести данные в HTML табличку и

В любой версии Excel откроется. Можно любые стили применять, только не подключать внешние стайлшиты. То же самое с вордом:
Можно просто вывести данные в HTML табличку и добавить соответствующий хидер:
header(«Content-type: application/vnd.ms-excel»);
header(«Content-Disposition: attachment;Filename=document_name.xls»);

В любой версии Excel откроется. Можно любые стили применять, только не подключать внешние стайлшиты.

То же самое с вордом:
header(«Content-type: application/vnd.ms-word»);
header(«Content-Disposition: attachment;Filename=document_name.doc»);
Я понимаю, что откроется. Но все эти ухищрения не от хорошей жизни, так ведь? Тётенька из бухгалтерии вполне вероятно вашу табличку откроет в браузере и завопит, что у ней Excel сломался. Давайте мыслить масштабней.
Тетенька не сможет открыть этот файл так просто в браузере — это будет файл с расширением XLS. Понятно что это не полноценный Excel файл, но задачу решает более чем в 90% случаев. Опять же, там можно сделать любое форматирование.
Никто не говорит, что Ваш вариант неверный, неправильный. Просто Вы идёте простым путём, а я напролом, но идеологически правильней. К тому же Вы по большей части рассуждаете о записи данных — меня интересует чтение.

Почему именно чтение, да потому что в интернетах по сервакам разбросаны документы именно в doc'ах, rtf'ках и odt'шках, а не всё подряд в переименованном html'е. Индексирование — вот первоцель статей.
Пытаюсь приспособить Ваш скрипт для своих нужд, но не очень получается (с rtf первый раз). Поможете?
У меня куча файлов типа такого route2.ru/obzor/data/as1075.rtf, в wordpad вполне прилично выглядят. В них нет картинок, но встречается текст разной жирности, которую нужно вытаскивать. Из-за этого я подумал, что хорошо бы конвертировать rtf не просто в plain text, но в html. Возникает проблема — по-видимому, разные версии wordpad генерят разный rtf. В моих исходниках когда начинается жирный текст, ставится /b, но в конце тега /b0 нет. Если же я открою файл и пересохраню, то он становится гораздо красивее, в полтора раза меньше, и появляются /b0. Но работать нужно с исходниками. Есть идеи, как отлавливать, что тег /b закончился?
Вау! Меня переводят и перепечатывают (скрежещет зубами из-за позорного плагиата)! Уверяю Вас писал всё сам, это легко приметить, в тексте на англоязычном сайте упоминается кодировка cp1251 — странно, что английский/американский программист по умолчанию разбирает текст в кирилице ;)

Надо бы написать им письмо с просьбой поставить метку о том, что это перевод статьи.
Более того, на скриншоте на вышеупомянутом сайте совсем другие данные, нежели обсуждаются в статье. Да и посмотрев мои остальные статьи, Вы вполне можете сделать вывод, что изыскания я делал сам — копаться надо было глубоко, а скрипты-поделки из интернетов мне не подходили.
Может кому пригодится: PHPRtfLite. Библиотека для работы с RTF, поддерживает работу с таблицами, картинками, колонтитулами. В свое время помогла.
Для меня было важно дополнить массив $failAt метода rtf_isPlainText() значением «pict». В моем случае это была картинка.
Не работает скрипт. Выдает не в той кодировке. Пример — Ïðàâèëà
Милый мой Fadeev, перед тем как размахивать шашкой и кричать, что скрипт не работает, наверное всё же стоит заглянуть вовнутрь и понять, что же происходит. Советую внимательно рассматривать строчку №232 до просветления. Если последнее не появится, увы и ах — похоже программирование не для Вас. Удачи Вам.
Без этого комментария я сразу с этой строчкой и начал работать, пока, правда, без результата.
И даже если делать вот так HTML-Entities → CP1252 → CP1251
то все равно появляются пробелы в тех местах, где не нужно.
В скрипте — windows-1250 — это среднеевропейская кодировка (я нахожусь в Чехии, халтура предполагала работу с чешским языком). Вы пытаетесь сконвертировать latin-1 (или если угодно windows-1252) в windows-1251.

Пробелы вполне могут появляться из-за того, что скрипт неверно работает с мультибайтовыми кодировками с пустым верхним байтом. Исправлять это не буду, не пишу в PHP больше четырёх лет. Если у Вас есть возможность, желание и знания разобраться, как и почему это не работает, и как это исправить — сделайте pull request.

Ещё раз удачи.
Не нашел функцию to_windows1250() строка 90

Полагаю стоит сделать to_windows1251(), на нее проверки нет совсем, а на windows-1250 — есть.
Да, похоже код to_windows1250 куда-то убежал (считайте, потерялся в вечности). Повторюсь, что это была чешская халтура, получение кирилицы в тот момент мне было не интересно.
Sign up to leave a comment.

Articles