задача о нумеровке много-много страниц

Eugenia_2005

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

Chupa

если принтер поддерживает postscript,
то можно попытаться написать на ps'е небольшую программульку,
которая будет номера на страницах печатать, и послать её на принтер
или, действительно, использовать тех

Dasar

Почему word не подходит?

Eugenia_2005

А как эту программульку написать?
Я ps не знаю

Eugenia_2005

У него ограничение на 32к страниц потому что.

Chupa

по нему есть мануал в локалке http://lorien.local/pub/docs/postscript/
но он достаточно большой, а сам язык странноват немного

Eugenia_2005

А большая получиться программка? Долго ее писать придется?

Marinavo_0507

История в тему (источник)
Все написано ниже - исключительно вранье и я признаю это сразу.
Hичего такого не было, все совпадения случайны, а все имена изменены до
неузнаваемости.
Уже не верите? Правильно.
Решился - таки я сюда написать, дабы найти одного человека. И напиться с
ним. Что это за человек? : Будет сказано в конце "сказки".
Итак, как это здесь принято, преамбула.
Устраивался я некоторое время назад работать "главным-по-компьютерам" в
одну крупную фирму. Прежний товарищ на этой же должности (назовем его
Андрей) сдает мне дела. Один из фронтов "борьбы" - железо. Конкретнее
принтера. Еще конкретнее - принтер ХП8150. (для незнающих, что это такое
- это такой большой принтер размером в сантиметрах примерно 60*60*60).
Показывал мне этот принтер, Андрей явно гордясь им. Попутно рассказал
историю того, как долго и мучительно он выбивал из руководства денег на
эту железку, несколько раз упоминал сколько он стоит (!) какой
производительности и пр. и пр. Гордость технического человека была
вполне понятна. И когда он навысказывался заславных эпитетов, я
рассказал ему свою историю:.
Амбула.
Работал я в Фонде. Тоже "главным по компьютерам". Фонд - это такая
государственная организация, которая с предприятий денег собирала, а
потом их раздавала "тому -кому-нада". И все были счастливы. И мне работы
хватало.
Hо вот однажды в середине ноября 2000-го года приносят нам Распоряжение
Правительства некоторой страны от 16.10.2000 N 1462-р (навсегда я
запомнил эти цифры!) за подписью примьер-министра К$.
Конечно-же все сделано задним числом и конечно-же со сроком исполнения -
вчера. Hет, даже не вчера - аж месяц назад! "А разве где-то бывает
иначе? " - скажете вы и будете правы.
Распоряжения хорошее, полезное... Ёптить:. Суть его такова: раньше фонды
(и мой тоже) денег с предприятий собирали сами, а с 01 янавря 2001 года
деньги будет собирать "гос. налоговая служба" (знаете такую?) и
раздавать собранные деньги фондам. А уж дальше фонды вольны "в рамках
действующего законодательства".
Казалось-бы, что все чудесно: пущай налоговая сама денег собирает. Ага ?
Щщщщаас!
Чтобы налоговая сама стала собирать денег за фонды, они (фонды) обязаны
"сверить списки" плательщиков (тобишь предприятий, организаций и тд.) с
налоговой. Всего-навсего. Вид сверки - бумажный. При этом, на каждого
плательщика я (фонд) обязан напечатать "простыню информации", которую
удалось ужать мелким шрифтом на шести (!) страницах формата А4. Хуже
того, все это надо сделать в трех экземплярах (один отдать в налоговую
службу, один в центральный офис фонда, один в филиал фонда).
Hо и это еще не все.
Данная процедура должна быть проделана в три этапа: первый с
промежуточным сальдо (читай "по состоянию на:. " ) на первое октября
2000 года (скажите, кому оно надо? ); далее делается все тоже самое с
сальдо на первое января 2001 года; а в третий раз все делается тогда,
когда плательщик сам придет отчитываться в фонд.
Hапомню, распоряжения попало в фонды в ноябре!
Перво-наперво я решил посчитать сколько на все это уйдет бумаги.
Оказалось около 15-18 тонн бумаги формата А4 плотностью 80г/м2.
Да, совсем забыл! Каждый экземпляр должен собственноручно подписать наш
директор, и печать наша должна быть приложена.
(Hесколько лет безотрывочного подписывания: гы-гы-гы::)
Когда на очередном совещании я сказал своему директору и Ко, что нужен
будет "Камаз бумаги", мне не поверили. Пришлось убеждать в верности
расчетов математическими выкладками с умножениями.
Убедил.
Hа резонный вопрос "Че делать" я указал директору на пунктик, который
явно упоминал, что "по согласованию": "возможна": "сверка электронных
носителей".
Hа долгие и неуспешные терзания и попытки договориться с "налоговой
службой" по-хорошему, по-электронному ушло более двух недель. А дело-то
стоит на месте !
Дальше моим руководством мне было сделано политическое разъяснение, что
"налоговая служба" не уверена в том, что сможет собрать денег скока
надо.
Причина была том, что в условиях неразберихи "куда платить и что делать"
многие предприятия просто решат подождать месяцок-другой и потом
заплатить штраф за просрочку, чем про$бать все деньги, что надо было
заплатить, заплатив нетуда. И будут, в принципе, правы.
Кто при этом окажется виноват в срыве планов Правительства? Hалоговая, не
собравшая денег? Hеа. Фонды! Они-же не согласовали списки плательщиков!
Помните гагаринское "Поехали! "? Вот так-же оптимистично мне было
сказано: "Печатай! Денег будет. "
И вот тут-то и встал всерьез вопрос: "Где и на чем печатать? " Тираж
такой, что надо нанимать типографию. Hо ведь седня я отдам
несколькогигабайтную базу в типографию, а завтра ею будут торговать в
митино.
Покупать себе типографию - выход. Hо что делать с этой типографией после
этого разового тиража ?
А принтеры хоть както еще можно будет использовать ( иль подарить кому
.
В результате множества терзаний и раздумий, покупаю 6 (шесть) штук уже
упомянутого ХП8150 (на тот момент самый у них большой). К принтерам
пол-актового зала картриджей. Бумагу мне подвозили Газелями:.
Любой, работающий в крупной организации, знает, что все свободное место
быстро заполоняется сотрудниками. И мой фонд не был исключением:
свободных помещений нет. Просто нет. Все уплотненО и потесненО. При этом
мне выделяют под распечатки целую комнату. Скандал и визг был
неимоверный. Hо все же всех подвинули и в отдельную комнату поставили
эти принтеры.
Итого, работа закипела:.
Принтеры печатали по 16 часов в сутки:
Когда была готова первая партия распечаток (с тонну примерно) я позвонил
в "налоговую службу" и попытался согласовать "куда, когда и кому можно
подвести распечатки? ". Мне честно ответили: "А нам некуда складывать
Вашу бумагу:. "
Этот вопрос был решен на более высоком уровне с выигрышем одного очка в
нашу пользу.
Следует также упомянуть всякого рода технические сложности с
организацией одновременной печати на шести принтерах, сложности с
переозонированием воздуха, ералашем со стопками готовых распечаток,
организационные ляпы, придирки к мелкому шрифту и пр. и пр. и пр. Hо это
будет не так интересно.
Уж поверьте, зимой 2000/2001 года мне работы хватало и я, отнюдь, не
скучал.
Все это дело кончилось тем, что "налоговая служба" все-таки собрала
нужный объем денег и посему "хвосты" я допечатывал уже весной неспешно и
брезгливо.
Кульминация
Выслушав мой рассказ, гораздо более полный чем я могу
напечатать здесь, Андрей мыл мягко говоря ошаращен. Отсмеявшись и придя
в себя он, мягко говоря, удивил меня. "А у меня - сказа он - есть
знакомый, который пишет софт для "налоговой службы", так вот он как-то
рассказывал, что весной 2001 года ему сделали заказ на то, чтобы он
отсканировал и распознал :. ТРИ КОМHАТЫ БУМАГИ! "
Тут уже выпали в осадок мы оба:.
Возвращаясь к преамбуле: контакт с Андре

Chupa

програмка как раз небольшая должна получиться
один цикл, в котором ставится номер в нужное место страницы и производится переход к следующей
время написания зависит от опыта общения с языком,
не исключено, что в техе окажется всё-таки быстрее

Eugenia_2005


А как отправлять на печать из программки?

Marinavo_0507

> А как отправлять на печать из программки?
Мне вопрос?
Ну наверное


open PRINTER, "|/usr/bin/lpr";


ну и т.д.

Eugenia_2005

А в винде?

Dasar

так печатай по одной страничке, изменив только номер страницы

Dasar

Я бы решал следующим образом:
1. Открыл Word и сделал шаблон на одну или несколько страниц
2. Сохранил шаблон в rtf или xml-виде
3. Нашел в шаблоне упоминание о номере страниц
4. Написал программку на любимом языке, которая
a) меняет начальный номер страниц в шаблоне
b) отправляет шаблон на принтер

Eugenia_2005

Да, тоже вроде хорошее решение, я и не подумал что ворд может сохранять в текстовом виде. Кстати, не нашел чтобы он мог в хмл сохранять.
Тогда для меня не понятно, как же шаблон на принтер отправить? В винде.
И не захлебнется ли она, если ей много-много документов на печать отправить? Очередь наверняка ограничена.

Dasar

> Кстати, не нашел чтобы он мог в хмл сохранять.
Умеет, начиная с 2003.
> Тогда для меня не понятно, как же шаблон на принтер отправить? В винде.
Через DDE, например, можно.
> И не захлебнется ли она, если ей много-много документов на печать отправить? Очередь наверняка ограничена.
Во первых, можно очередь проверять
Во-вторых, можно отправлять с некоторой подобранной задержкой
в-третьих, можно сделать кнопку по которой будет отправляться следующая партия

Chupa

>> И не захлебнется ли она, если ей много-много документов на печать отправить? Очередь наверняка ограничена.
> Во первых, можно очередь проверять
> Во-вторых, можно отправлять с некоторой подобранной задержкой
> в-третьих, можно сделать кнопку по которой будет отправляться следующая партия
бррр....
вот он, виндовс-way, бля
путь воина:


%!PS-Adobe-3.0
%%BoundingBox: 24 24 571 818
%%Orientation: Portrait
%%DocumentMedia: A4 595 842 0
%%EndComments
/Helvetica findfont 12 scalefont setfont
1 1 210000 {
500 100 moveto
10 string cvs show
showpage
} for
%%EOF

Eugenia_2005

>Через DDE, например, можно.
Например как?

freezer

не получится, т.к. страницы делятся директивой %%Page, а ее в цикл не вгонишь...
по крайней мере так в 2.0

Chupa

поспорим на пиво, что оно работает?

Marinavo_0507

А куда пихать входной поток страниц?

Chupa

в лоток принтера
задача ведь только пронумеровать была

freezer

тащи свое пиво

Chupa

и чё это за хуйня?

Dasar

Берешь утилиту ddecmd: http://www.fido.nnov.ru/win/Excel/Downloads/ddecmd.zip
bat-ник для печати будет, примерно, следующим:


"C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE" /x /n /dde
DdeCmd WinWord System [FileOpen("%1")][FilePrint 0][FileExit 2]

freezer

твой код и вьювер, показывающий первую страницу из нуля

Chupa

и чё это доказывает?

freezer

m.b. что хреновый ps?..

Chupa

> m.b. что хреновый ps?..
скорее хреновый вьювер или ты не знаешь, что творишь
1) если там есть первая страница, то почему там не может быть 210000й?
2) отправь это на псный принтер и пронаблюдай результат
3) насколько я понял, ты принял предложение о споре, так что с тебя пиво
могу продемонстрировать работоспособность на нормальной смотрелке и на HP LJ 1200

Marinavo_0507

> отправь это на псный принтер и пронаблюдай результат
у него точно стек не переполнится?

Chupa

речь пока шла только о замене страниц
а распечатывать 210000, чтобы проверить, не буду
и вообще, какой нафиг стек, если там цикл, а не рекурсия?

freezer

смотрелка такая, какая под рукой оказалась.
я тебе продемонстрировал неработоспособность, и что дальше?..
Если ты пришлешь заказчику прогу, а она у него не запашет, вряд ли прокатит ответ "не знаю, у меня дома работало"

Chupa

ты ничего не продемонстрировал
речь изначально шла о печати
кстати, нажми кнопку перехода на следующую страницу в смотрелке

freezer

кстати, нажми кнопку перехода на следующую страницу в смотрелке

издает мерзкий звук и остается на той же странице, а вот %%Page: 1 1 - действительно добавляет страницу. Одну штуку

Marinavo_0507

Стек какую-то роль играет:


$ gs -dBATCH -dNOPAUSE -sDEVICE=pswrite -sOutputFile=t1.ps t.ps
GNU Ghostscript 6.53 (2002-02-13)
Copyright (C) 2002 artofcode LLC, Benicia, CA. All rights reserved.
This software comes with NO WARRANTY: see the file COPYING for details.
Loading NimbusSanL-Regu font from /var/lib/defoma/gs.d/dirs/fonts/n019003l.pfb... 2013532 627245 1622424 329320 0 done.
Error: /stackoverflow in {--pop-- false}
Operand stack:
--nostringval--
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1 3 %oparray_pop 1 3 %oparray_pop 1 3 %oparray_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 50457 1 210000 --nostringval-- %for_pos_int_continue 50456 3 %oparray_pop --nostringval-- 50457 3 %oparray_pop --nostringval-- --nostringval-- --nostringval--
Dictionary stack:
--dict:1036/1476(roG)-- --dict:0/20(G)-- --dict:67/200(L)--
Current allocation mode is local
Current file position is 227
GNU Ghostscript 6.53: Unrecoverable error, exit code 1

6yrop

можно так, берешь чистый документ из одной страницы,
в цикле на VBA
1. устанавливаешь номер страницы
2. посылаешь на печать
Небольшая проблема в том, что Ворд не хочет устанавливать номер страницы больше какого-то значения, но можно просто в колонтитул записывать текст с номером страницы.

Chupa

ок, dup был лишний

Chupa

> %%Page: 1 1 - действительно добавляет страницу. Одну штуку
ну блин, документацию почитай про showpage
http://lorien.local/pub/docs/postscript/plrm.pdf (стр 690)
%%Page используются для статического разбиения на страницы,
но отсюда никак не следует, что их нельзя генерить по-другому

Marinavo_0507

о, теперь сработало
только в реальности ты одним заданием не обойдёшься:
в принтере будут кончаться чернила,
часть бумаги он зажуёт,
оператор будет ошибаться
надо будет прерывать печать, а потом продолжать, возможно с наложением
у скрипта на VBA больше шансов заиметь в процессе развития необходимую обратную связь,
чем у твоего решения

freezer

Видать GhostScript только статическую разбивку понимает

freezer

зато так элегантнее

Marinavo_0507

у тебя просто говёный gsview
у меня всегда документы без такой разбивки смотрелись

freezer

может быть... давно его ставил

Eugenia_2005

Спасибо!
Мне этот путь как я понимаю подходит.
Только мануал по этому пс огромный какой, 912 страниц.
Может ты знаешь, как точно позиционировать число? Надо на каждой странице по три числа ставить, и совсем не в углу, как при обычной нумерации, а в фиксированном месте.

Chupa

"500 100 moveto" задаёт позиционирование относительно
левого нижнего угла листа (в пунктах, равных 1/72 дюйма,
500pt вправо, 100pt вверх).
Текст печатается вправо и вверх от этой точки, если нужно
другое выравнивание, то нужно дополнительно корректировать.
PS всё-таки не запугал возможными проблемами?

Eugenia_2005

Да если точное позиционирование так лекго прокатит, то проблем-то не остается.
На печать выдам гостскриптом по странице.
А если нужна альбомная ориентировка?
ЗЫ Кстати прикол - все это дело будет печататья подаванием на принтер по одной странице нежными девичьими ручками (70килостраниц). Потому что бумага очень тонкая и принтер ее забирает по несколько или жует

Chupa

> А если нужна альбомная ориентировка?
Можно текст повернуть.
Для этого достаточно после moveto поставить
что-то типа "90 rotate" (угол в градусах против часовой стрелки).
Если нужно именно ориентацию бумаги поменять,
то Portrait на Landscape в заголовке изменить.

Eugenia_2005

Спасибо тебе

Marinavo_0507

А писать номера ручкой не быстрее, чем засовывать по одной странице?

Eugenia_2005

Да фиг их знает.
Хотя можно спросить.
Оставить комментарий
Имя или ник:
Комментарий: