Xpoint
   [напомнить пароль]

Сформировать бумажный отчет из текстового файла

Метки: [без меток]
2006-10-04 15:23:35 [обр] Alexander O(15/460)[досье]

Есть текстовый файл, с разделителями полей

Иванов;вилка;большая
Иванов;вилка;маленькая
Иванов;ложка;большая
Петров;тарелка;глубокая
Петров;вилка;большая
Петров;вилка;маленькая
Сидоров;ложка;большая
Сидоров;тарелка;глубокая

Мне нужно распечатать на бумаге:

Иванов
    вилка большая
    вилка маленькая
    ложка большая
Петров
    тарелка глубокая
    вилка большая
    вилка маленькая
Сидоров
    ложка большая
    тарелка глубокая

Под рукой есть MSOffice, и Perl

Как бы это попроще сделать?

спустя 10 минут [обр] Алексей В. Иванов(25/2861)[досье]
?
while (<FILE>) {
   @current = split(';');
   if ($current[0] ne $last) {
      $last = $current[0];
      print "$last\n";
   }
   print "\t" . join(' ', @current[1..2]);
}
спустя 8 минут [обр] Alexander O(15/460)[досье]
Алексей В. Иванов[досье] ну это да. Но достаточно трудоемко. Мне на бумаге всякое форматирование нужно. Где жирным, де еще, что. Как вариант возможна подготовка шаблона в rtf формате, и заполнение его перлом. Но может есть способ проще?
спустя 1 минуту [обр] Владимир Палант(149/4445)[досье]
А бы сгенерировал из этого LaTeX-файл, который без проблем преобразуется к примеру в PDF. Но LaTeX'а у вас под рукой нет, я правильно понимаю? :)
спустя 2 минуты [обр] Владимир Палант(149/4445)[досье]
PS: Генерировать rtf из Perl тоже уже приходилось, но там достаточно долго надо копаться в документации, которую при этом разные версии Word'а по разному понимают.
спустя 9 минут [обр] Alexander O(15/460)[досье]
Владимир Палант[досье] Да, теха под рукой нет. C rtf я думаю поступить просто. Шаблон сделать Word`ом, а перл заменит плэйсхолдеры значениями
спустя 2 минуты [обр] Alexander O(15/460)[досье]
Хотя.... Вариант с техом мне понравился. Значит под рукой будет. спасибо
спустя 1 час 8 минут [обр] Давид Мзареулян(14/1003)[досье]
Да сгенерируйте HTML и дело с концом:) Word прекрасно его открывает.
спустя 5 минут [обр] Alexander O(15/460)[досье]
Давид Мзареулян[досье] Гениально! :) Вот что значит посмотреть на проблему свежим взглядом :) Чувствую тему можно закрывать.
спустя 18 минут [обр] Андрей Брайнин(3/127)[досье]
HTML - вариант.
Если нужно тонкое форматирование, чего HTML в полной мере не позволяет, то можно использовать WordML - диалект XML для документов MS Word (начиная с 2003).
Шаблон можно подготовить прямо в Ворде и "сохранить в виде xml".
спустя 1 час 20 минут [обр] Роман Чемисов(7/327)[досье]
Alexander O[досье]
А чем Вас Win32::OLE не устроил? Можно проще простого работать с любым офисным приложением. Вплоть до проверки орфографии...
спустя 6 часов [обр] Alexander O(15/460)[досье]

Роман Чемисов[досье] моя цель не в том, чтоб работать с офисными приложениями, а в том, чтобы затратив меньше сил, получить на бумаге красивые отчеты. Причем автоматизировать сам процесс печати не целесообразно — отчеты двусторонние, а бумагу иногда заедает, или захватывает два листа за раз.

Сейчас я вижу три пути.
Первый, который почти уже реализован, — пройтись перлом по текстовому файлу и позаполнять html-ные шаблоны.
Второй, загнать данные в Access, а дальше составить отчеты его средствами.
Третий, открыть файл ёкселем, а потом слиянием в Word`e делать отчеты — этот путь для меня очень туманен. Не знаю, может он и прост, а может и невозможен.

спустя 2 часа 24 минуты [обр] Роман Чемисов(7/327)[досье]
Alexander O[досье]
Да там всё элементарно просто. Уверен почти на 100%, что у Вас никаких сложностей не возникнет.
Почти то же самое, что и работа с обычным текстовым файлом, только чуть сложнее.
Создали объект, присвоили ему нужные свойства и т. д. и т. п.
Кстати, и отчёты Access Вы так же можете делать прямо из своей программы.
спустя 6 часов [обр] Thirteensmay(9/157)[досье]

Alexander O[досье] О "больная" тема ;), вот к сведению:

Начинал с генерирования отчетов ActiveX-ом FoxPro, сервер выдает инструкции/данные JS для клиентского ActiveX, который в свою очередь заполняет шаблон лежащий на клиенте и печатает его. Шаблоны удобно создавать в FoxPro репорт дизайнере. Получалось богато в плане форматирования, почти полноценная система печати со своим API и визуальными инструментами, но на этом плюсы заканчиваются, ActiveX со всеми вытекающими, т.е. деньги, необходимость настройки клиентов, установка доп. ПО на них, копирование шаблонов и пр. - отказался.

Потом генерировал MS офисные файлы, doc в частности, тут можно генерить с нуля либо тоже заполнять шаблоны. Подход имеет право на жмзнь, в особенности как показывает практика нравится пользователям. В общем все достаточно просто: Если у Вас MS сервер то ставите на него офис и рулите им с помощью VBA через COM из серверного скрипта как угодно - возможности потрясные ;) Документации на Русском - куча. Вся генерация на сервере, клиенту отдается готовый файл, и если у него установлен офис (а у кого его нет ?), то браузер плавно превращается, превращается... в офис и клиент видит свой документ, может делать с ним че угодно находясь в знакомой среде, при этом если че может щелкнуть "назад" ;) Короче, все замечательно, но Microsoft... - отказался ;)

Понял что надо чтото чисто серверное, бесплатное, кроссплатформенное, распространенное. Сразу же приходит на ум HTML. Но тут есть проблемы: т.к. это изначально не печатный формат есть напряги с биением на страницы, как ни странно даже с форматированием и пр., но к счастью в настоящее время с некоторыми усилиями они решаются, впринципе можно написать библиотечку для упрощения жизни. Хотя одну из проблем я так и не решил - это вставка в отчеты графики. Для разных браузеров есть различные способы внедрения графического контента непосредственно в HTML, но общего для всех метода внедрения хотябы GIF или JPEG я так и не нашел. - короче оставил я этот вариант на будущее ;)

А чтож если не HTML ? - PDF. Формат открытый, идеально печатный, распространенный. Все делается на сервере, у клиента конечно должен быть вьювер, но это по нынешним временам не проблема. Генерировать можно как на прямую, т.е. с помощью соответствующих модулей генерации, (для перла это например PDF::API2), так и через сторонние методы, например делать скриптом LaTeX, а потом конвертить его стандартным конвертером в PDF. Вариант с конвертером мне как то по душе не пришелся, LaTeX осваивать, в результате остановился я на PDF::API2, написал простенькую надстройку над ним для упрощения и впринципе вполне доволен, правда с производительностью пока проблемы. Короче, делаю отчеты в PDF.

Тут еще вот чего надо заметить, в общем случае получается 3 приемлемых варианта:
1 - HTML - для простых отчетов.
2 - Офисные файлы - практически идеально (привычно, удобно, функционально и пр.) за исключением Microsoft. ;)
3 - PDF - Также практически идеально, но есть один маленький моментец: редактируемость готового отчета по сравнению с офисом ниже, хотя может быть так и должно быть, это же ведь документы... Зато принтабельность чуть лучше, открытость, бесплатность и пр. ;)

спустя 57 минут [обр] Alexander O(15/460)[досье]
Thirteensmay[досье] спасибо. Очень интересный опыт.
Powered by POEM™ Engine Copyright © 2002-2005