Skrypty InDesign, Python, PowerShell. Automatyzujemy powtarzalne operacje w procesie składu publikacji, by powstawały szybciej, taniej i bez błędów.
Składanie publikacji to w dużej mierze praca powtarzalna: importowanie tekstu, stosowanie stylów, formatowanie tabel, numerowanie elementów, eksportowanie plików. Każda z tych czynności wykonywana ręcznie zajmuje czas i generuje ryzyko błędu. Automatyzacja DTP pozwala przenieść te operacje na skrypty, które wykonują je w sekundy, zawsze tak samo i zawsze poprawnie. Od ponad dwudziestu lat piszemy narzędzia, które przyspieszają naszą pracę i pracę naszych klientów.
Piszemy skrypty automatyzujące operacje w Adobe InDesign. Od prostych makr (zastosuj styl do zaznaczenia) po rozbudowane systemy przetwarzania wsadowego z interfejsem użytkownika i obsługą wyjątków. Pracujemy zarówno w ExtendScript (kompatybilność z InDesign CS6+), jak i w nowym API UXP.
Łączymy źródła danych (Excel, CSV, XML, bazy SQL) z szablonami InDesign. Skrypt pobiera dane, tworzy strony, wypełnia ramki tekstowe i graficzne, stosuje formatowanie warunkowe. Idealne do katalogów produktowych, cenników i raportów cyklicznych, w których treść zmienia się, a układ pozostaje stały.
Automatyzujemy operacje na plikach PDF poza InDesign. Ghostscript do generowania, łączenia i dzielenia plików PDF, konwersji kolorów, redukcji rozmiaru oraz ekstrakcji wybranych stron. PyMuPDF (fitz) do analizy struktury dokumentu, wyciągania tekstu z pozycjami, porównywania wersji i generowania raportów różnic między korektami.
Nie wszystko da się zrobić wewnątrz InDesign. Przygotowanie plików źródłowych, konwersja formatów, przetwarzanie grafik, walidacja danych. Do tych zadań używamy Pythona i PowerShella: skrypty działające poza InDesign, które przygotowują materiał do automatycznego składu lub przetwarzają wyeksportowane pliki.
Ręczny skład czasopisma o objętości 120 stron wymaga kilkudziesięciu godzin pracy operatora. Znaczna część tego czasu przypada na czynności mechaniczne: import tekstu z Worda, usuwanie zbędnego formatowania, stosowanie stylów akapitowych i znakowych, formatowanie tabel, wstawianie i skalowanie grafik, budowanie spisów treści. Każda z tych operacji jest podatna na błąd ludzki: pominięty styl, niewłaściwa czcionka w jednej komórce tabeli, brak spójnika na początku wiersza.
Automatyzacja składu nie eliminuje operatora, ale zmienia charakter jego pracy. Zamiast wykonywać setki identycznych kliknięć, operator nadzoruje proces, podejmuje decyzje typograficzne i koryguje przypadki wymagające indywidualnej oceny. Skrypty przejmują to, co powtarzalne. Rezultat: krótsze terminy, mniej poprawek w kolejnych korektach, niższy koszt produkcji przy kolejnych wydaniach.
// Usunięcie spójników z końca wiersza
var doc = app.activeDocument;
var grep = {
findWhat: "(\\s)([aiouwzAIOUWZ])\\s",
changeTo: "$1$2~S"
};
app.findGrepPreferences = grep;
app.changeGrepPreferences = grep;
doc.changeGrep();
# Walidacja grafik przed importem
from pathlib import Path
from PIL import Image
def check_resolution(folder, min_dpi=300):
for img in Path(folder).glob("*.tif"):
with Image.open(img) as im:
dpi = im.info.get("dpi", (72,72))
if dpi[0] < min_dpi:
print(f"⚠ {img.name}: {dpi[0]} dpi")
Najczęstsze zastosowania skryptów InDesign w naszej pracy to: import i mapowanie stylów z plików Word, numeracja ciągła elementów (rysunków, tabel, przypisów) aktualizowana po każdej zmianie kolejności, generowanie wielu wariantów językowych z jednego szablonu, eksport do PDF z predefiniowanymi ustawieniami dla poszczególnych drukarni. Każdy z tych skryptów powstał, ponieważ w konkretnym projekcie dana operacja powtarzała się dziesiątki razy.
Poza InDesign używamy Ghostscript do przetwarzania i generowania plików PDF: wsadowa konwersja kolorów (RGB do CMYK w setkach plików), redukcja rozmiaru, łączenie dokumentów, ekstrakcja wybranych stron przeznaczonych do dalszego przetwarzania. PyMuPDF pozwala analizować strukturę gotowych dokumentów: porównywać wersje korekta po korekcie, wyciągać tekst z zachowaniem pozycji na stronie, generować zestawienia różnic. To narzędzia, które uzupełniają proces tam, gdzie InDesign kończy swoją rolę.
# Porównanie dwóch wersji PDF
import fitz
old = fitz.open("raport_v1.pdf")
new = fitz.open("raport_v2.pdf")
for i in range(len(old)):
t1 = old[i].get_text("blocks")
t2 = new[i].get_text("blocks")
if t1 != t2:
print(f"Strona {i+1}: zmiana")
# Konwersja RGB→CMYK + redukcja rozmiaru
gs \
-dBATCH -dNOPAUSE -q \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/prepress \
-sOutputFile=out_cmyk.pdf \
input_rgb.pdf
Katalogi produktowe i cenniki to idealny przypadek do automatyzacji: powtarzalny układ strony, dane przechowywane w arkuszach lub bazach, regularne aktualizacje. Budujemy systemy, w których operator przygotowuje plik Excel z danymi (nazwy, opisy, ceny, ścieżki do zdjęć), uruchamia skrypt i otrzymuje gotowy dokument InDesign ze wszystkimi stronami, prawidłowo sformatowanymi tabelami i osadzonymi grafikami. Zmiana cen lub dodanie produktów to kwestia edycji arkusza i ponownego uruchomienia.
Analogicznie działają szablony raportów cyklicznych. Dane kwartalne trafiają do arkusza, skrypt generuje nową edycję raportu z aktualnymi liczbami, wykresami i tabelami porównawczymi. Praca, która kiedyś zajmowała dwa dni, zamyka się w godzinie przeznaczonej na weryfikację i drobne korekty typograficzne.
GREP w InDesign to potężne narzędzie, ale jego możliwości rosną wielokrotnie w połączeniu ze skryptami. Zamiast pojedynczego wyszukiwania z podmianą, skrypt może wykonać sekwencję kilkudziesięciu operacji GREP w określonej kolejności: najpierw oczyścić tekst ze zbędnych spacji i enterów, potem zastosować poprawki typograficzne (spójniki, myślniki, cudzysłowy), na końcu oznaczyć elementy wymagające uwagi operatora.
Tworzymy biblioteki wyrażeń GREP dostosowane do specyfiki polskiej typografii: obsługa spójników, dywizów i myślników, cudzysłowów drukarskich, skrótów (m.in., np., tj., dr, prof.), dat i liczb z separatorami tysięcy. Jedna operacja „uruchom skrypt czyszczący" zastępuje kilkanaście ręcznych przeszukiwań dokumentu.
// Sekwencja GREP: typografia polska
var rules = [
["\\s([aiouwzAIOUWZ])\\s"," $1~S"],
["(\\d)\\s(\\d{3})", "$1~<$2"],
["(\\s)\"(\\w)", "$1\u201E$2"],
["(\\w)\"(\\s)", "$1\u201D$2"],
["(\\w)-(\\w)", "$1\u2013$2"]
];
for (var i=0; i<rules.length; i++) {
app.findGrepPreferences.findWhat =
rules[i][0];
app.changeGrepPreferences.changeTo =
rules[i][1];
doc.changeGrep();
}
# Generowanie XML do data merge
import pandas as pd
from lxml import etree
df = pd.read_excel("produkty.xlsx")
root = etree.Element("catalog")
for _, row in df.iterrows():
item = etree.SubElement(root, "product")
etree.SubElement(item, "name"
).text = row["nazwa"]
etree.SubElement(item, "price"
).text = f'{row["cena"]:.2f} zł'
etree.SubElement(item, "image"
).text = row["plik_jpg"]
etree.ElementTree(root).write(
"catalog.xml", encoding="utf-8")
Rozmawiamy o aktualnym sposobie pracy: jakie publikacje powstają, skąd pochodzą dane, ile trwa cykl produkcji, co się powtarza, gdzie pojawiają się błędy. Na tej podstawie wskazujemy elementy do automatyzacji.
Opisujemy architekturę: co będzie skryptem InDesign, co narzędziem zewnętrznym, jak będą wyglądały pliki wejściowe, jaki będzie format wynikowy. Ustalamy, czy potrzebny jest interfejs użytkownika, czy wystarczy uruchomienie z linii poleceń.
Piszemy kod, testujemy na materiałach klienta, iterujemy. Dostarczamy rozwiązanie z dokumentacją i instrukcją obsługi. Przeprowadzamy szkolenie, jeśli narzędzie będzie obsługiwane samodzielnie.
Po wdrożeniu wspieramy użytkowników: naprawiamy błędy zgłoszone w produkcji, rozbudowujemy skrypty o nowe przypadki, dostosowujemy do aktualizacji InDesign lub zmian w formacie danych źródłowych.
Publikacje wielojęzyczne to szczególny przypadek, w którym automatyzacja przynosi największe oszczędności. Skrypty potrafią wygenerować warianty językowe dokumentu na podstawie jednego szablonu i zestawu tłumaczeń w arkuszu. System uwzględnia różnice w długości tekstu między językami, stosuje odpowiednie reguły typograficzne (inne łamanie wyrazów, inne cudzysłowy, inne zasady spójników) i eksportuje osobne pliki PDF dla każdej wersji językowej.
Pracowaliśmy z publikacjami w kilkunastu językach jednocześnie: raporty korporacyjne, instrukcje produktowe, katalogi z opisami w sześciu wersjach. Bez automatyzacji każdy wariant wymagałby osobnego ręcznego składu. Ze skryptami: jedno uruchomienie, kilkanaście gotowych dokumentów do weryfikacji.
Plik IDML to otwarty format Adobe InDesign, w którym cały dokument zapisany jest jako zestaw plików XML spakowanych w archiwum ZIP. Treść publikacji można więc przetwarzać programowo: skrypt rozpakowuje archiwum, parsuje strukturę XML, podmienia teksty, aktualizuje ścieżki do grafik lub modyfikuje atrybuty stylów, po czym pakuje plik z powrotem do IDML gotowego do otwarcia w InDesign. Wykorzystujemy tę metodę przy generowaniu wariantów językowych, podmianach danych w katalogach i masowej aktualizacji treści w dokumentach szablonowych.
# Podmiana tekstu w pliku IDML
from zipfile import ZipFile
from lxml import etree
translations = {"Wprowadzenie": "Introduction", ...}
with ZipFile("katalog.idml", "r") as src:
with ZipFile("katalog-en.idml", "w") as out:
for name in src.namelist():
data = src.read(name)
if name.startswith("Stories/"):
tree = etree.fromstring(data)
for node in tree.iter("Content"):
if node.text in translations:
node.text = translations[node.text]
data = etree.tostring(tree)
out.writestr(name, data)
# Aktualizacja cen w plikach IDML
$csv = Import-Csv "ceny-2025.csv" -Delimiter ";"
$map = @{}
$csv | ForEach-Object { $map[$_.sku] = $_.cena }
Get-ChildItem "*.idml" | ForEach-Object {
$tmp = "$($_.BaseName)_tmp"
Expand-Archive $_ $tmp
Get-ChildItem "$tmp\Stories\*.xml" |
ForEach-Object {
[xml]$x = Get-Content $_
$x.SelectNodes("//Content") |
Where-Object { $map[$_.InnerText] } |
ForEach-Object {
$_.InnerText = $map[$_.InnerText]
}
$x.Save($_.FullName)
}
Compress-Archive "$tmp\*" $_ -Force
Remove-Item $tmp -Recurse
}
Projektujemy makiety publikacji, uczestnicząc w tworzeniu różnorodnych form redakcyjnych, głównie dla czasopism branżowych. Portfolio obejmuje ponad dwadzieścia rynkowych tytułów, przygotowanych z najwyższą starannością, uwzględniając specyfikę danej tematyki.
Tworzymy pięknie złożone książki, których czytanie jest przyjemnością. Specjalizujemy się m.in. w projektowaniu i składzie trudnych publikacji naukowych, prawniczych i branżowych, zawierających tabele, wykresy, schematy i skomplikowane wzory matematyczne.
W gronie naszych specjalistów mamy również redaktorów i niezastąpionych korektorów – najbardziej wnikliwych czytelników. Dzięki ich wrażliwości językowej i nieraz nadludzkiej cierpliwości, zapewniamy tekstom najlepszą opiekę twórczą i merytoryczną.
Profesjonalny skład książek, czasopism, katalogów i raportów w Adobe InDesign. Łamanie tekstu, formatowanie tabel i wykresów, redakcja techniczna, przygotowanie plików do druku. Specjalizujemy się w publikacjach o złożonej strukturze typograficznej.
Tworzymy angażujące raporty, które wpływają na decyzje biznesowe: od zwięzłych one-pagerów po kompleksowe analizy. Uwzględnimy odpowiedni format do specyfiki treści i potrzeb odbiorców. Łączymy solidną metodologię badawczą z przejrzystą formą wizualną.
Potrafimy odpowiedzieć na pytania, a także wiemy, jakie pytania należy zadać, by uzyskać wyróżniające się i użyteczne rozwiązania projektowe. Nie tylko dla dużych korporacji, ale także dla małych firm poszukujących idealnych fontów do określonego zastosowania.
Wspieramy programistów, szczególnie front-end developerów. Projektujemy oraz zaprogramujemy responsywną i interaktywną typografię strony internetowej wraz z zasadami dostępności. Tworzymy zgodny ze specyfikacją kod HTML, CSS i JavaScript.
Składamy do publikacji monografie habilitacyjne, rozprawy doktorskie i książki naukowe. Realizujemy pełną redakcję techniczną: od ujednolicenia struktury i przypisów po skład złożonych tabel, wykresów i wzorów matematycznych, zgodnie z wymogami wydawnictw i uczelni.
Dla firm i instytucji prowadzimy szkolenia z oprogramowania Adobe Creative Cloud wraz z zasadami typografii i projektowania. Wykonujemy również audyty UX i analizy eksperckie użyteczności produktów branży online oraz publikacji drukowanych – gazet, czasopism i książek.
Praktycznie wszystko, co da się opisać regułą: stosowanie stylów, import i formatowanie tabel, numerację, generowanie spisów treści, przetwarzanie grafik, eksport do wielu formatów, kontrolę typograficzną (wdowy, sieroty, spójniki). Jeśli operacja jest powtarzalna, da się ją zapisać jako skrypt.
Tak. Dostarczamy skrypty jako pliki .jsx (ExtendScript) lub .idjs (UXP), które instaluje się w folderze Scripts programu InDesign. Działają na Windows i macOS. Dołączamy instrukcję instalacji i uruchomienia.
Koszt zależy od złożoności. Prosty skrypt automatyzujący jedną operację to kilka godzin pracy. Rozbudowany system przetwarzania wsadowego z interfejsem użytkownika i obsługą błędów to projekt na kilka dni. Po opisie zadania przygotowujemy bezpłatną wycenę.
Nie zastąpi, ale odciąży go od pracy mechanicznej. Skrypty przejmują powtarzalne czynności: import danych, stosowanie formatowania, kontrolę spójności. Operator może skupić się na decyzjach typograficznych, które wymagają oceny wizualnej i doświadczenia.
Tak. Realizujemy zarówno jednorazowe zlecenia (konkretny skrypt rozwiązujący konkretny problem), jak i długofalowe projekty automatyzacji całego procesu wydawniczego. Nie wymagamy abonamentu ani stałej umowy.
Skrypty InDesign piszemy w ExtendScript (JavaScript ES3) i UXP (nowoczesny JavaScript). Narzędzia wspomagające tworzymy w Pythonie i PowerShellu. Do przetwarzania XML i danych strukturalnych używamy XSLT. Dobieramy technologię do zadania.
kontakt@typograficznie.pl +48 608 271 665
Marcin Szewczyk-Wilgan → ¶
Wrocław
NIP: PL6391758393