Нумерация: от школьника до джедая

Дизайнеры опять прислали на печать макет «дисконтная карта пронумеровать .TIFF». В данном случае «пронумеровать» означало «проставить 50 чисел ручками». Не то чтобы я обвинял людей в лени, но ведь не так уж трудно подставить колонку цифр, тем паче способов существует просто море. Вот, например, какие варианты приходят в голову сразу.

Способ №1, для школьников

Номера наносятся в MS Word, нумерацией страниц. Создается документ с размером страницы, который соответствует размеру вашей карточки или бланка. Затем добавляются должным образом отформатированные номера страниц. Они вставляются на колонтитул страницы, после чего их нужно расположить в требуемом месте и задать нужные атрибуты: цвет, размер шрифта, выравнивание, отступы. Вставьте в документ нужное количество страниц — и задача будет почти выполнена.

Последний штрих – на страницу добавляется нужное вам изображение как фон страницы. Есть пару нюансов, которые нужно учитывать. Во-первых, для качественной печати картинка должна иметь хорошее разрешение, хотя бы 200 dpi, но для крупного растрового изображения это может сильно замедлить печать. Во-вторых, нужно не забыть выставить опцию «печатать фоновый рисунок» при отправке задачи на принтер.

Типичный случай применения: «одноразовая задача», подготовленный в Word-е макет, нежелание разбираться с функцией «Слияние» и отсутствие на компьютере программ, более подходящих для такой работы. Иногда это означает просто некомпетентность исполнителя, однако исправно работает.

Способ №2, для студентов

Если освоение «Офиса» уже довело вас до использования электронных таблиц, те же процедуры можно проделать в Excel. Изрядный плюс этого способа – уменьшение рутинной работы при сложной нумерации. Номера в ячейках могут вычисляться по вашей формуле, так что можно не просто проставить порядковые цифры, но даже вывести последовательность степеней цифры 2 или N-й разряд числа «Пи» после запятой.

После того как сформируете столбик нужных цифр, выделите нужный диапазон и задайте ячейкам нужный размер, совпадающий с размером листа/карточки, которые собираетесь печатать, после этого вставьте на фон ячеек картинку с изображением (в первом способе мы вставляли ее на фон страницы). Готово – если правильно заданы размер ячейки и страницы принтера, то при печати Excel сам разобьет столбец на нужные кусочки и отпечатает по одному на лист.

Типичный случай применения: отсутствие других средств верстки и необходимость применения сложных вычислений, например, «пропускать все номера, которые совпадают с номером дня в прошлом году, когда пятница пришлась на 13-е число».

Способ №3, для офисных джигитов

Если вы – мастер по офисным единоборствам и в совершенстве владеете стилем «Word-фу», то можете смело пропустить это описание. Остальные могут узнать, что такое «список рассылки» в приложениях MS Office.

Вкратце – это способ подстановки переменных данных в документ для печати похожих листов с небольшими отличиями. Обычно эта возможность используется для подготовки наклеек, конвертов с адресами, писем с персональным заголовком наподобие «Уважаемый Иван Иванович!» или, как в нашем случае, для печати нумерованных бланков.

Для начала нам нужно будет создать список с данными, которые будут подставляться на лист. Вполне подойдет таблица Excel со столбцом цифр, которая была подготовлена при описании предыдущего способа, только не понадобится оформление ячеек. Добавьте в таблицу первую строку с ячейкой, содержащей название переменной, которую мы будем подставлять, например NUMBER. Сохраните таблицу на жесткий диск как текст в кодировке UTF-8. В результате у нас получится файл с расширением .txt, в первой строке которого у нас будет слово NUMBER, а во всех остальных - порядковые номера бланка или карточки.

Теперь открываем Word и снова готовим файл с макетом карточки - делаем нужный размер страницы, подставляем фон и начинаем колдовать. Откройте закладку «Рассылки» и щелкните по иконке «Выбрать получателей», в появившемся меню выберите пункт «Использовать существующий список». Укажите в окне открытия файла на подготовленный txt-файл. Затем на той же вкладке щелкните по пункту «Выбрать поля слияния» и выберите единственное подготовленное нами поле «NUMBER». Разместите его на листе и отформатируйте так, как вам нравится. Пора приступать к завершающему этапу. Нажмите на пункт «Начать слияние» и выберите опцию «Пошаговый мастер слияния». В правой части окна Word появится панель мастера, в которой нужно трижды нажать далее, чтобы перейти к завершению процесса. После этих процедур в панели мастера появится выбор одного из вариантов: начать печать или изменить часть страниц. Первая строка отправит документ из множества страничек прямиком на принтер, вторая позволит просмотреть и, в случае необходимости, подкорректировать часть подготовленных бланков.

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

Способ №4, для брутальных менеджеров

Для тех мачо, которые любят программу AdobeAcrobat и умеют ею пользоваться, осмелюсь предложить (да что там - всячески буду рекомендовать!) попробовать в деле плагин QuiteImposingPlus. Нехитрая программка добавляет пункт в главное меню и иконку на панель «AdvancedEditing». Зубры от полиграфии уже давно используют это дополнение в допечатной подготовке, но, как и всякий простой и мощный инструмент, QIP может использоваться не по назначению. В окне плагина (вызывается нажатием на ту самую иконку или вызовом пункта меню) есть кнопка «Pagenumbering». Разобраться с ее назначением сможет любой человек, способный хотя бы открыть англо-русский словарь - выбираем шрифт, размер цифр, расположение надписей и отступы от краев. Теперь идем в меню «Document->Background->Add/Replace» и подставляем любой фон (например, готовый PDF со всеми надписями и рисунками).

В пользу этого способа нумерации можно сказать только одно слово - скорость. Acrobat изначально создавался для подготовки документов к печати, и в этом ему нет равных. Партия из десяти тысяч карточек на обычном компьютере обрабатывается за несколько секунд. На таком документе MS Word просто заснул бы вечным сном. Недостаток, пусть не критичный, все же имеется. Вы не сможете таким способом подставить произвольный текст, как в мастере слияния Word. Впрочем, в условиях нашей задачи это несущественно.

Типичный случай применения: простейшая нумерация, большие объемы (десятки тысяч страниц или карточек), подготовка к печати в полиграфии.

Способ №5, для сисадминов

Сисадмины, как известно, люди далеко не праздные – им частенько приходится пить пиво, мастерить бубны из старых компактов с дистрибутивами Windows и муштровать ботов в Quake3. Все эти занятия требуют времени, которое приходится выкраивать за счет автоматизации, то есть перепоручения заданий начальства компьютеру.

Допустим, завтра шеф скажет вам: «Возьми-ка с корпоративного сервера список из 3000 клиентов и сделай дисконтные карты половине из них, тем, у кого заказов в прошлом году было больше». Такое поручение, конечно, можно выполнить одним из предыдущих способов, например при помощи мастера слияния Word. А если понадобится делать нечто подобное каждое утро и выкладывать отчет боссу на стол? Да не просто в виде таблицы, а с должным почтением и красивым оформлением?

В такой ситуации можно воспользоваться способностью Acrobat генерировать документы по шаблону электронной формы и списку значений для полей этой формы.

Поскольку описание данного способа довольно объемно, я не буду сегодня на нем задерживаться, тем более вы можете подробно прочесть о нем в предыдущей статье («PDF для шаманов 80-го уровня»). Могу лишь сказать, что в данный момент эта возможность внедрена и успешно эксплуатируется у меня при анализе данных по клиентам. Всю черновую работу (выборка из БД, сортировка, подготовка XML) делает сервер, а визуализация происходит на рабочем месте с помощью Acrobat.

Достоинство данного метода, кроме очевидного (автоматизация), заключается в богатейшем выборе элементов для PDF-форм. Вы можете не только включить в нее номера или другие надписи, но и добавить персональные изображения, вычисляемые значения, штрих-коды, в том числе QRcode и DataMatrix, и многое другое. Недостаток также очевиден – не всякая секретарша справится с освоением новых функций.

Типичный случай применения: везде, где удобно использование XML, например автоматизация при работе с web-сервисами и сторонними программами.

Способ №6, для эстетствующих инженеров

Хм… Мы уже перебрали полдесятка способов и даже не вспомнили о народном редакторе векторной графики CorelDraw. А зря, подстановка переменных данных в нем реализована очень неплохо. Давайте вернемся к нашей задачке с нумерованными бланками и попробуем реализовать ее в Кореле.

Выполнить желаемое можно инструментом/мастером PrintMerge, причем несколькими способами, различающимися в деталях. Отличия касаются лишь формирования данных для подстановки. Рассмотрим их по порядку, начиная с самого простого:

Вариант 1: Для начала вызовите мастер слияния из меню «File->Print Merge->Create/Load Merge Fields». В появившемся диалоге выберите опцию «CreateNewText» и нажмите кнопку «Далее». Как видите, можно создавать несколько текстовых или числовых полей и наполнять их данными. В данном случае нас интересуют числовые поля: введите в графе «NumericField» название поля (старое доброе NUMBER вполне сгодится) и нажмите кнопку «Add», она станет активной после того, как вы введете название поля. Слово NUMBER перенесется в перечень полей. Щелкните по нему мышью, и вам станут доступны операции для цифровых полей (в нижней части диалогового окна). Выберите формат цифрового поля, например «0000X», снимите галочку «Continuallyincrementthenumericfields». В графах «StartingValue» и «EndingValue» введите первый и последний номера, которые вы хотите разместить на своем макете. Нажмите кнопки «Далее», «Далее», «Готово». Не переживайте по поводу количества мелких операций, мы почти закончили. Осталось только расположить надписи в нужном месте.

Подставьте на страницу фон – это необязательно должен быть именно бэкграунд страницы, можно использовать совершенно обычные объекты CorelDraw – растровые картинки, векторные элементы, эффекты, градиенты и т.д. Откройте панель «PrintMerge». На ней есть выпадающий список (если вы все правильно сделали, он будет состоять из единственного пункта NUMBER), а рядом с ним – кнопка INSERT. Нажав на нее, вы получите на макете текстовое поле с форматированием по умолчанию. Если нужно – переместите его, раскрасьте, разверните, наложите эффекты, отформатируйте, задайте нужное выравнивание. Теперь нажимайте кнопку «Merge to New Document» на панели «Print Merge». Вуаля! В вашем распоряжении документ CorelDraw из двух, ста, тысячи или «сколько-еще-их-нужно» страниц, отличающихся только внесенной надписью.

Вариант 2: У вас еще сохранился текстовый файл, который мы готовили в предыдущих примерах? Тогда давайте создадим новый документ-заготовку. Как и в предыдущем примере, нарисуйте или импортируйте сам рисунок страницы без нумерации и открывайте диалог слияния. На первом вопросе вместо создания нового текста выберите опцию «ImporttextfromafileoranODBCdatasource». Нажмите далее, выберите опцию «File» и в диалоге работы с файлами укажите на наш текстовый файлик. Дальнейшие действия почти не отличается от предыдущего варианта: три раза нажать «Далее» и «Готово», вставить поле в макет и сделать слияние в новый документ: «MergetoNewDocument». Кстати, так можно готовить не только списки чисел, но и любые другие строки.

Вариант 3: Совсем простой способ. Все делается точно так же, как в предыдущем способе, только меняется содержимое текстового файла, который задает список надписей для печати. Открываем новый файл и вносим в него две строки:

1
\NUMBER=0,51,100,5\

В первой строчке – количество полей с переменными данными (в нашем случае – единица, то есть всего одно поле). Во второй строке – название поля между бэкслешами и, после знака равенства, параметры поля. В данном случае – ноль, обозначающий способ нумерации, числа 51 и 100, равные первому и последнему номерам в последовательности, и в конце пятерка, задающая формат вывода. Пять означает десять в пятой степени, то есть для чисел меньше этой цифры будут впереди добавляться нули до такой же длины записи (6 знаков). Например, первая карточка будет пронумерована «000051». Все остальные операции идентичны предыдущему варианту действий.

Типичный случай применения: допечатная подготовка со сложным форматированием, эффектами, примененными к переменным данным, высокая точность расположения элементов, критичность в выборе цветовой модели и цветового профиля. Например, при передаче в типографию макета дисконтной карты с защитой от подделки.

Способ №7, для ценителей прекрасного

Раз уж мы сказали «А», нужно сказать и «Б». После такого внимания, уделенного Корелу, пройти мимо старого доброго Фотошопа просто нельзя.

Для подстановки переменных данных в Photoshop есть замечательная опция «Variabledata» из меню «Image». Если быть точным, это не опция, а меню из двух пунктов, которые вызывают две страницы одного и того же диалогового окна. Впрочем, пока это несущественно, давайте сначала подготовим к работе файл. Создайте документ Photoshop нужного размера и поместите в нем макет своей карточки, на которую нужно внести нумерацию. Поместите на нее текстовый слой и отформатируйте его – задайте выравнивание, размер и начертание шрифта, наложите эффекты, раскрасьте – в общем, подготовьте его полностью, кроме внесения надписей (номеров из нужного вам перечня). Теперь откройте диалог «Image->Variables->Define», в графе «Layer» выберите текстовый слой, в котором находится шаблон для подстановки номеров. Теперь нам понадобится файл с данными, которые мы готовили для предыдущих способов нумерации. Как у нас называлась переменная величина? Если мне не изменяет память, она носила имя NUMBER. Поставьте галочку на пункте «Textreplacement» и внесите это слово (NUMBER) в графу «Name» после поставленной галочки. Эти действия означают, что мы будем заменять содержимое текстового слоя строкой из файла. Нажмите кнопку «Next» и вы попадете во вторую часть диалога. Здесь нужно нажать кнопку «Import», затем «SelectFile» и выбрать текстовый документ, в котором содержится нужный нам список. Чтобы имя переменной из файла правильно распозналось, установите галочку «UseFirstColumnForDataSetNames», это означает, что первая строка файла (у нас там записано только слово NUMBER) будет использоваться как имя переменной (или список имен переменных). Теперь нажмите OK, чтобы вернуться в диалог «VariableData» и еще раз OK, чтобы закрыть его. Работа окончена. Можно зайти в меню «File->Export» и командой «DataSetasFiles» сохранить все макеты в нужную папку. Имена файлов формируются автоматически.

Типичный случай применения: когда требуются большие возможности оформления надписи – экзотические шрифты, прозрачные надписи, наложение эффектов и текстур, обработка фильтрами и т.п. Вкратце – пользуйтесь, если результат нужно «обвешать рюшечками».

Способ №8, для настоящих джедаев

Еще один вариант «для Фотошопа», но он больше подойдет тем маньякам-программистам, у которых даже кофеварка работает на Android и синхронизирует время с сервером. Речь идет о встроенных возможностях Photoshop по автоматизации, если говорить конкретно – о запуске макросов, написанных на Javascript.

Итак, нам нужны нумерованные карточки. Фактически, все работы, кроме вставки порядкового номера, могут быть описаны способом гораздо более простым, чем написание JavaScript-программы для рисования карточки. Речь идет об одном из самых мощных средств редактора – «Actions». Создайте экшен, который будет изготавливать новый макет карточки – например, готовить документ нужного размера, вставлять в него подложку, надписи, эффекты и т.п. Последний штрих – создайте в документе текстовый слой и назовите его NUMBER (чтобы не запутаться). Теперь остановите запись экшена, назовите его… Ну, например NUMBERING, и перенесите в новую папку экшенов с названием TEST - чтобы потом долго не искать. Теперь давайте напишем скрипт. Понятно, что нужно запустить цикл от А до Б, где А и Б не сидят на трубе, а обозначают первый и последний номера нужных карточек. В цикле достаточно вызвать записанный нами экшен, чтобы сформировать новый экземпляр карточки, поменять текстовый слой на значение нашего счетчика цикла и сохранить файл. Вот как это может выглядеть:

varsaveFolder="c:/temp/";
vara=1;
var b=5;
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = 1;
for (var i=a; i{
app.doAction('NUMBERING','TEST');
activeDocument.activeLayer.textItem.contents=i;
jpgFile = new File( saveFolder+"card_"+i+".jpeg" );
app.activeDocument.saveAs(jpgFile, jpgSaveOptions, true,Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
Теперь сохраните эти строки в текстовый файл с расширением JS или JSX и вызовите из меню «File->Scripts->Browse». Первые три строки задают настройки скрипта (номера карточек и папку для сохранения готовых файлов). Дальше идет задание опций сохранения. Я сохранял в формат JPG, для других типов файлов опции будут отличаться. Далее идет сам цикл, в котором вызывается экшен для подготовки макета, изменяется строка с номером карточки, файл сохраняется и закрывается.

Разумеется, это самый простой пример (хотя и вполне работоспособный), на практике можно реализовать гораздо большую функциональность – запросить у пользователя номер и место сохранения в красивом графическом интерфейсе, прицепить мастер подстановки и выбор формата файла.

Типичный случай применения: подходит для самых тяжелых случаев – когда требуется «богатое» оформление вставленной надписи и дополнительные опции, которых нет в Фотошопе по умолчанию, например, выборка данных с сервера в реальном времени и моментальная отправка на печать, учет каких- либо условий, допустим – рисовать стрелки на часах, в разных положениях в зависимости от вставляемого номера, или рисование всех цифр в этом номере разными шрифтами и/или разными цветами.

Итог

Вообще-то статья сначала называлась «Тысяча и один способ нумерации», но сейчас, представляя себе описание еще 993-х способов, я начинаю немного нервничать. Боюсь, если предложу вам такой мануал, то у вас не хватит терпения просто прочесть оглавление. За бортом остались варианты с использованием служебных полей в Word, например «{LISTNUM}». Не были даже упомянуты макросы офисных приложений, VB-скрипты графического пакета Corel, специализированные утилиты, коммандлеты Powershell, AIR-приложения и многие другие способы решения задачи. Думаю, описанного уже достаточно, чтобы почти во всех случаях достичь цели, с которой мы начали это руководство. Будучи лентяем, я оставил вам самую тяжелую работу – выбрать лучшее решение из имеющихся. Желаю удачи!

Александр Поляков


Компьютерная газета. Статья была опубликована в номере 29 за 2010 год в рубрике soft

©1997-2024 Компьютерная газета