PC Press
O nama
O nama
Pretplata
O nama
Postanite saradnik PC-ja
Kontakt sa redakcijom
PC Press
Novi broj
Novi broj   
Pretrazivanje
Arhiva
Arhiva   
PC Online
PC Plus   
Specijalna izdanja
Softver Softver
PC #141 : Februar 2008 TehnoGuru

 Naslovna  Sadržaj 
Bojan Stojanović  

Izrada dokumenata u JavaScript-u

Rad na svakoj publikaciji u InDesign-u počinje izradom dokumenta i postavljenjem osnovnih parametara. Kako da to efikasno uradite pomoću skriptova?

(kliknite za veću sliku)

U uvodnom tekstu o skriptovima u InDesign‑u CS3 obradili smo nekoliko važnih tema pre nego što smo napisali prvi skript. Najpre smo se pozabavili mogućnostima skriptova i razjasnili šta od njih možemo da očekujemo. Ustanovili smo da skript može da zameni svaku akciju korisnika, ali i mnogo više od toga – pomoću skriptova se obrađuju podaci i dodaju nove opcije programa. Kada smo započeli sa primerima skriptova, pokazalo se da oni mogu da budu vema jednostavni. Naš prvi skript izgledao je ovako: app.documents.add(); – nakon pokretanja skripta InDesign CS3 će napraviti novi dokument sa podrazumevanim parametrima, kao da je korisnik izabrao opciju File / New / Document i kliknuo na OK.

Skript i parametri dokumenta

Često nam podrazumevani parametri ne odgovaraju, jer želimo da promenimo format strane, orijentaciju, broj stubaca... Kako da to uradimo iz skripta? Ako pogledamo dijagram objektnog modela dokumenata, videćemo da objekat document ima parametre (document preferences), podrazumevane parametre (document defaults), svojstva ili atribute (document properties), metode, elemente, događaje itd. U ovom trenutku obratićemo pažnju na parametre dokumenta. Pokrenite Extend Script Toolkit 2, izaberite opciju Help / Adobe InDesign CS3 Object Model i u oknu Classes kliknite na stavku DocumentPreference. U desnom oknu Properties and Method pojaviće se spisak od 26 svojstava klase DocumentPreference. Ovu klasu treba posmatrati kao tip podataka – odgovarajuće svojstvo objekta document piše se kao documentPreferences, u šta se možete uveriti ako u levom oknu izaberete Document. U samom skriptu uvek ćete koristiti notaciju iz okna Properties and Methods.

Na primeru sve izgleda mnogo jednostavnije, pa je na slici 1 program kojim pravimo dokument podešavajući nekoliko osnovnih parametara.

Već smo objasnili zašto je pogodno koristiti promenljivu za dodavanje novog dokumenta, pa je zato prva linija koda prilično očigledna. I ostatak govori sam za sebe, ali primetite da se stalno ponavlja myDocument.documentPreferences. Da li može zapis da bude kraći i čitljiviji? Za to ćemo koristiti novu ključnu reč JavaScript‑a: with, kao na slici 2.

Ako, prateći pomoć koju nam pruža Extend Script Toolkit 2, napišemo skript koji je funkcionalna replika dijaloga File / New / Document, videćemo da neka svojstva nedostaju, npr. margine ili broj stubaca. Razlog je priroda dijaloga New Document koji služi za zadavanje osnovnih parametara dokumenata na osnovu preset‑a ili stila dokumenta. Ukoliko promenimo bilo koji parametar, videćemo da se aktivna stavka u meniju Document Preset menja u Custom. Naravno, uvek možemo da snimimo stil dokumenta pod nekim imenom i da tako sačuvamo i skup parametara.

Ono što vidite u dijalogu pripada objektu documentPresets, a ne documentPeferences, mada se neka od njihovih svojstava preklapaju. Napravimo li dokument na osnovu stila, Adobe InDesign će kreirati matičnu stranu [None] sa marginama koje smo zadali i na osnovu nje napraviti i matičnu stranu A‑Master.

Istu funkcionalnost u skriptovima možemo postići na dva načina: prvi se oslamka ma stilove dokumenata, odnosno objekta documentPresets, a drugi na matične (master) strana, odnosno na objekat masterSpreads. Na slici 3 je prikazano definisanje stilova dokumenta.

Najpre ćemo definisati promenljivu myDocumentPreset koja ukazuje na stil koji smo nazvali ProbniStil. Taj stil je element skupa documentPresets, za koji u startu ne znamo da li je definisan. Zato ćemo probati da promenljivoj myPresetName dodelimo svojstvo name promenljive myDocumentPreset. Ukoliko ta promenljiva ne ukazuje na objekat tipa documentPreset, doći će do greške.

Zbog toga ćemo iskoristiti mehanizam try/catch („hvatanje“ izuzetaka) u JavaScript‑u – ako je došlo do greške, znači da ne postoji stil dokumenta ProbniStil, pa onda možemo da ga dodamo. Potom zadajemo parametre stila dokumenta – ovde možemo da definišemo i broj stubaca, kao i margine. U slučaju naspramnih strana (facing pages), left označava unutrašnje (inside) margine, a right se odnosi na spoljašnje (outside) margine, pa parne i neparne strane neće imati iste leve i desne margine; takva asimetrija je sasvim uobičajena u prelomu knjiga i časopisa. U Adobe InDesign‑u margine mogu da budu svojstvo svake pojedinačne stranice, u kom slučaju pojmovi leva i desna margina imaju doslovno značenje.

Izrada matičnih strana

Napravili smo stil dokumenta (izostavili smo, doduše, deo komplikovanijih parametara za bleed i slug); kada pokrenemo skript neće se desiti ništa vidljivo, ali ćemo u dijalogu File / Document Presets na spisku stilova dokumenata videti i ProbniStil. Sada možemo da napravimo dokument na osnovu tog stila:

var myDocument =

app.documents.add(true,

app.documentPresets.item

("ProbniStil"));

Metod add, dakle, može da ima i parametre. Prvi je showingWindow, tipa Boolean (vrednost true ili false); pomoću njega uključujemo ili isključujemo prikaz prozora dokumenta. Ova mogućnost nije na raspolaganju korisniku InDesign‑a, koji može samo da minimizira prozor, ali skript može i da ga sakrije. Neprikazivanje prozora dokumenta može ponekad da ubrza izvršavanje skriptova, ali nam demonstracija te pogodnosti u ovom trenutku nije značajna, pa ćemo uključiti prikaz prozora. Sledeći parametar je izbor stila dokumenta. Pokretanjem ovog skripta dobićemo novi dokument na osnovu izabranog stila.

Naš zadatak u ovoj maloj školi skriptova za InDesign je razumevanje principa na kojima počivaju skriptovi, pošto ćete konkretne primere lako naći na Internetu. Uvek treba imati na umu da skriptovi mogu da urade sve što i korisnik kada bira opcije iz menija, ali da se ta ista funkcionalnost skriptovima postiže na drugi način. Razlike često zbunjuju početnike, koji posmatraju InDesign na korisničkom nivou, a ne na nivou DOM‑a (objektni model dokumenata) koji je jedini merodavan za skriptove. Videli smo da u InDesign‑u možemo da zadamo svojstva dokumenata, ali da ta svojstva – premda slična – ne odgovaraju u potpunosti onome što vidimo u dijalogu File / New / Document. Tamo možemo da unesemo parametre ne praveći nov stil dokumenta, a skriptovi zahtevaju da napravimo stil dokumenta i da onda unesemo parametre koji su isti kao i u pomenutom dijalogu. Ako ne želimo da u skriptu pravimo stil dokumenta, moraćemo da napravimo dokument na osnovu raspoloživih svojstava i potom da definišemo svojstva podrazumevane matične strane.

Boljem shvatanju razlike u pomenutim mehanizmima pomoći će i saznanje da se u pozadini dijaloga File / New / Document nalazi logika koja je nevidljiva za korisnika i koja radi upravo ono što smo opisali: koristeći DOM, pravi novi dokument na osnovu unetih parametara, ali pravi i matične strane. Za korisnika je to jedinstven skup parametara, dok se na nivou DOM‑a operacija izvodi pomoću objekata documentPreferences i masterSpreads. Dakle, programer skriptova ne može da InDesign posmatra isključivo kroz prizmu korisnika, već mora da prouči DOM, da bi uspešno koristio osnovne gradivne blokove programa i pristupao opcijama i programima. Pošto smo to razmotrili, pogledajmo sliku 4 i skript koji je u funkcionalnom pogledu istovetan dijalogu File / New / Document (opet izostavljamo parametre Bleed i Slug).

Izabrali smo, dakle, format strane A4 u portretnoj orijentaciji, što se može uraditi bilo zadavanjem visine i širine od 297 i 210 mm respektivno, bilo navođenjem parametra pageSize = "A4". Potom smo upotrebili objekat masterSpreads, a to su matične naspramne strane dokumenta. Mada u terminologiji InDesign‑a spread predstavlja niz naspramnih strana koji može da ima i više članova, uobičajeno je da pod naspramnim stranama podrazumevamo par – levu i desnu, odnosno parnu i neparnu, kao u otvorenoj knjizi ili časopisu. masterSpreads.item(0) odnosi se na prvi par matičnih strana u dokumentu koji automatski dobija ime A‑Master. U okviru tog para, pages.item(0) je leva (parna), a pages.item(1) je desna (neparna) strana. Pošto je reč o naspramnim stranama, margina left je unutrašnja i ona je postavljena na 10 mm, dok spoljašnja margina, right, iznosi 20 mm. Na obe strane su podešena dva stupca, sa međustunačnom belinom od 5 mm – ovi parametri su svojstva objekta marginPreferences.

Sada već raspolažemo sasvim dovoljnim znanjem da napravimo dokument i stil dokumenta, kao i da postavimo raznorazne parametre matičnih strana. Uz to, naučili smo i nekoliko osnovnih tehnika u JavaScript‑u. Preostaje nam da ovladamo učitavanjem i snimanjem dokumenata, kao i izvozom u PDF i štampanjem. Sve to ćemo brzo preći, jer smo osnovne principe već proučili. Nakon toga, možemo da dokument popunjavamo tekstom i slikama i da počnemo da se bavimo razvijanjem još zanimljivijih skriptova.