Nie zamierzałem pisać skryptu. Chciałem spersonalizować kilkaset koszulek i zakładałem, że Illustrator to potrafi. Ten artykuł to, czego się przy okazji dowiedziałem - łącznie z jedną rzeczą, którą sam zepsułem i zgłosiłem Adobe jako błąd Illustratora.
Co panel Zmienne naprawdę robi
Okno → Zmienne obsługuje cztery typy zmiennych: ciąg tekstowy, plik połączony, widoczność (obiekt jest pokazywany lub ukrywany według TRUE/FALSE) oraz dane wykresu. Wiążesz je z obiektami, wczytujesz bibliotekę zmiennych i przełączasz się między zestawami danych; przełączenie zestawu aktualizuje grafikę na ekranie. Z darmowym skryptem VariableImporter autorstwa Vasilyego Halla złożysz dodatkowo nazwę zestawu danych z wartości w Twoich kolumnach - co za chwilę się przyda. Od wersji CC 22.1 (marzec 2018) panel wczytuje CSV również sam, wcześniej obsługiwał tylko XML.
Do kilku wariantów, które przeklikasz ręcznie, to w zupełności wystarczy i nic więcej nie potrzebujesz.
Cztery ograniczenia, na które trafisz w produkcji
1. Eksport wsadowy działa tylko przez akcje
W panelu nie ma niczego w rodzaju „wyeksportuj jeden PDF na zestaw danych”. Standardowa droga to nagranie akcji i uruchomienie Plik → Automatyzuj → Przetwarzanie wsadowe ze źródłem Zestawy danych. Działa niezawodnie. Ceną jest to, że eksportem steruje nagrana akcja: jedno ustawienie predefiniowane PDF na cały przebieg, bez możliwości zmiany per wiersz, a błąd w środku długiej partii łatwo przeoczyć.
2. Nazwy plików tak, struktura folderów nie
Produkcja chce Kowalski_10_XL.pdf, nie Batch_0001.pdf. Illustrator nazywa zestawy wczytane z CSV jako „Data Set 1, 2, 3” i sam nie potrafi powiązać tej nazwy z kolumną - to otwarte zgłoszenie na Illustrator UserVoice. Przetwarzanie wsadowe oferuje potem trzy schematy nazewnictwa, wszystkie wywiedzione z nazwy zestawu. Darmowa droga jednak istnieje: VariableImporter składa nazwę zestawu nawet z sześciu pól, w tym z wartości w Twoich kolumnach, więc Kowalski_10_XL.pdf osiągniesz bez płacenia za cokolwiek. Poza zasięgiem tak czy inaczej zostaje struktura folderów sterowana danymi - przetwarzanie wsadowe zapisuje do jednego folderu docelowego, więc sortowanie według zlecenia, produktu i rozmiaru zostaje po Twojej stronie.
3. W skrypcie łatwo o pomyłkę, a dokumentacja nie pomoże
Tutaj straciłem najwięcej czasu, a skończyło się inaczej, niż się spodziewałem. Gdy próbowałem w skrypcie odczytać wartości z zestawu danych, wracały puste ciągi. Uznałem, że coś jest zepsute, i w maju 2025 założyłem na forum Adobe szczegółowe zgłoszenie z plikiem przykładowym, CSV i skryptem testowym.
Okazało się, że błąd był po mojej stronie, nie w Illustratorze. CarlosCanto odpowiedział poprawną składnią: do zestawu sięga się przez doc.activeDataSet = doc.dataSets[i], czyta się doc.variables zamiast kolekcji samego zestawu, a wartość pobiera z variable.pageItems[0].contents. Wątek jest publiczny, a jego odpowiedź może w nim przeczytać każdy: Issue with Reading Variable Data from DataSet in Illustrator 29.5. Należy się uznanie.
Wniosku to jednak nie zmieniło. W momencie, w którym piszesz ExtendScript przełączający zestawy danych, odczytujący z nich wartości i sam sterujący eksportem PDF, nie korzystasz już z wbudowanej funkcji - piszesz własny eksporter. Ograniczenia powyżej i poniżej zostają dokładnie tam, gdzie były.
4. Zmienne wstawiają zawartość - ale jej nie tworzą
Wszystkie cztery typy zmiennych łączy to, że wstawiają zawartość przygotowaną wcześniej. Widoczność potrafi pokazać lub ukryć obiekt, który już jest w dokumencie - logo sponsora da się więc przełączyć, o ile wszystkie warianty zbudujesz zawczasu. Żadna ze zmiennych nie stworzy jednak nowej grafiki: nie zbuduje numeru z graficznych symboli cyfr, nie osadzi logo we wnętrzu cyfry i nie dobierze jego wielkości, nie doda ogonka do czcionki, która go nie ma, i nie rozmieści 17 breloków na jednym arkuszu druku. A to właśnie te zadania zjadają cały dzień.
Porównanie bez upiększeń
Darmowe narzędzia naprawdę działają. Każde z nich ma jednak granicę gdzie indziej - ta tabela pokazuje gdzie.
|
Zmienne + akcje |
VariableImporter |
InDesign Data Merge |
exportPDF |
| Wczytanie CSV |
✓ od CC 22.1 |
✓ |
✓ |
✓ |
| Jeden PDF na wiersz bez akcji |
✗ |
✗ |
częściowo |
✓ |
| Nazwy plików z danych |
nazwy zestawów |
✓ |
✗ |
✓ |
| Struktura folderów z danych |
✗ |
✗ |
✗ |
✓ |
| Cyfry z symboli graficznych |
✗ |
✗ |
✗ |
✓ |
| Logo wewnątrz cyfry |
✗ |
✗ |
✗ |
✓ |
| Diakrytyka w czcionkach bez niej |
✗ |
✗ |
✗ |
✓ 10 języków |
| Impozycja drobnych elementów |
✗ |
✗ |
ręcznie |
✓ |
| Kontrola brakujących glifów |
✗ |
✗ |
✗ |
✓ |
| Wykrywanie duplikatów |
✗ |
✗ |
✗ |
✓ |
| Log i podsumowanie po eksporcie |
✗ |
✗ |
✗ |
✓ |
| Nazwane profile produktów |
✗ |
✗ |
✗ |
✓ |
| Dwa produkty z jednej tabeli |
✗ |
✗ |
✗ |
✓ |
| Zostaje w Illustratorze |
✓ |
✓ |
✗ |
✓ |
| Cena |
za darmo |
za darmo |
subskrypcja CC |
demo za darmo, licencja |
Kiedy darmowa droga wystarczy
Sporadyczne zlecenia, zwykła podmiana tekstu, kilkadziesiąt plików, żadnej specjalnej typografii - ustaw VariableImporter i akcję eksportu i gotowe. Naprawdę. Jeśli Twoja praca tak wygląda, reszta tej strony nie jest dla Ciebie.
Gdzie zaczyna się exportPDF
exportPDF to skrypt JSX dla Adobe Illustrator CS4 i nowszych. Całkowicie omija Zmienne i zestawy danych: sam czyta CSV, wypełnia nazwane pola tekstowe w Twoim szablonie i eksportuje jeden gotowy do druku PDF na wiersz, z nazwami plików i folderów zbudowanymi z Twoich danych. Do tego składa cyfry z graficznych symboli, wstawia logo klubu lub sponsora do wnętrza cyfry, uzupełnia diakrytykę w czcionkach, które jej nie mają (10 języków, w tym nordyckie Å, Ø, Æ, Ð, Þ), obsługuje tekst wielowierszowy i indeksy, wszystko skaluje według rozmiaru produktu i potrafi rozmieścić drobne elementy na jednym arkuszu. Czego tabela nie pokazuje, to praca, której nikt nie chce robić ręcznie. Gdy czcionce brakuje glifu dla obcojęzycznego nazwiska, Illustrator przez funkcję Missing Glyph Protection po cichu przełącza ten tekst na czcionkę domyślną - na ekranie wygląda to niemal poprawnie, a wyjdzie na wydrukowanym arkuszu. exportPDF sprawdza glify z wyprzedzeniem, brakujący znak zastępuje spacją, dzięki czemu Twoja czcionka zostaje zachowana, a po eksporcie wypisuje, których wierszy i znaków to dotyczyło - wiesz więc, że trzeba dodać diakrytykę lub glif. Tak samo pilnuje duplikatów: identyczne produkty pomija, a kolidujące nazwy plików automatycznie zmienia, jedno i drugie licząc w logu i w podsumowaniu. Kolumny w CSV nie muszą nazywać się tak, jak chce skrypt: zaraz po wczytaniu pliku skrypt sam próbuje dopasować je do pól nazwisko, numer, pseudonim i rozmiar, a to, co nie pasuje lub czego brakuje, uzupełniasz ręcznie. Z jednej tabeli zrobisz dwa niezależne produkty, ustawienia zapiszesz jako nazwany profil i przełączysz się między wyrobami jednym oknem, a kolejne rozmiary (30x50 dla ręczników, 42/44/46 dla czapek) dodasz po przecinku w jednym polu.
Ostatnie okno przed eksportem jest zarazem ostatnią kontrolą. Przypisujesz w nim nazwane obszary robocze do wyrobu i do rozmiaru z CSV - obszar dresy-XL należy do wyrobu Dresy w rozmiarze XL. Przy poprawnym nazewnictwie parują się same; gdy wkradnie się literówka albo nazywasz obszary po swojemu, sparujesz je tutaj ręcznie. Wybierasz folder docelowy i ustawienie predefiniowane PDF z listy, którą skrypt wczytuje wprost z Illustratora. Nazwy składasz następnie z sześciu symboli zastępczych - {cislo}, {jmeno}, {prezdivka}, {velikost}, {kod} i {docName} - osobno dla szablonu folderu i osobno dla nazwy pliku, i osobno dla każdego z dwóch wyrobów. Kolejność należy do Ciebie: czy nazwa zaczyna się od rozmiaru, numeru czy nazwiska, zależy wyłącznie od tego, jak zapiszesz szablon. Podgląd z pierwszego wiersza CSV pokazuje wynik, zanim cokolwiek zostanie wyeksportowane.
Powstał w naszym własnym dziale graficznym i jest tam używany codziennie od 2025 roku. Zlecenie na 200 koszulek, które kiedyś zajmowało cztery godziny kopiowania, trwa około dziesięciu minut. Demo jest darmowe i w pełni funkcjonalne: 30 uruchomień, 20 wierszy CSV. exportPDF dla Illustratora · cennik · wsparcie i FAQ. Pracujesz w CorelDRAW? Jest też wersja dla niego.