Prva stranica PDFova
(1 korsinik/a gleda/ju temu) (1) Gost

Prva stranica PDFova


08.08.2009 | 11:58
Dakle, imam par stotina pdfova kojima treba izbrisati prvu stranicu i zatim ih opet spremiti (pozeljno pod istim imenom, ali ne nuzno).
Ima li koji pametniji nacin ili nema do visednevnog kliktanja?
Hvala na mozebitnom odgovoru.
08.08.2009 | 12:05
Apple Script?
08.08.2009 | 12:10
I meni pade na pamet to…
Samo to podrazumijeva visednevno ucenje applescripta
Hvala svejedno.
08.08.2009 | 12:18
Hm, baš sam gledao... Preview nema svoj Apple Script Dictionary, barem kod mene, u mom Script Editoru. Đipi, help...

Inače, možeš nešto iskemijati i Automatorom, s tim što nema akcije "izbriši stranicu", tako da ti je postupak "izgeneriraj svaku stranicu kao poseban PDF" pa onda " spoji sve posebne PDF stranice osim prve u novi PDF" pa onda "izbriši sve posebne PDF stranice".

Meni je za osnovno savladavanje AppleScripta trebalo par sati, ali to, naravno, ovisi o tome koliko si inače vičan programiranju. U svakom slučaju, za Automator ti ne bi trebalo trebati više od par sati.
08.08.2009 | 19:11
Daleko od toga da je besplatno, ali elegantno je. Enfocus PitStop, plugin za Acrobat.
09.08.2009 | 00:02
Hm, baš sam gledao... Preview nema svoj Apple Script Dictionary, barem kod mene, u mom Script Editoru. Đipi, help...

To the rescue!

Preview definitivno nema svoj AS dictionary, ali to ne znači da nema lijeka. Dapače, ovo je dobar primjer za "think different" unutar samog AppleScripta. Da ne duljim, skripta...

-- PDF Front Page Stripper (using Preview)
-- (08/08/2009) 1.00 release

-- NOTES:
-- turn ON "Enable access for assistive devices" (System Preferences/Universal Access")
-- save this script as Application (File Format)
-- quit Preview BEFORE using this script
-- don't click mouse during execution

on run
  display dialog "Drag multiple PDF files or a single folder containg PDF files onto this icon!"
end run

on open draggeditems
  set sourcefiles to filelistFromSelection(draggeditems)
  -- main loop  
  repeat with thisFile in sourcefiles
    -- convert AppleScript path to POSIX path
    set pdfRef to POSIX path of thisFile
    -- load PDF into Preview using system shell
    do shell script "open /Applications/Preview.app '" & pdfRef & "'"
    -- emulate clicking
    tell application "System Events"
      tell application "Preview" to activate
      tell process "Preview"
        tell menu bar 1
          tell menu bar item "Edit"
            tell menu "Edit"
              -- dirty hack...
              click menu item "Insert Blank Page" -- ...to get pointer to the front page
              click menu item "Delete Selected Page" -- then remove inserted page
              click menu item "Delete Selected Page" -- and remove the front page
            end tell
          end tell
          tell menu bar item "File"
            tell menu "File"
              click menu item "Save"
            end tell
          end tell
        end tell
      end tell
      -- quit Preview
      tell application "Preview" to quit
    end tell
  end repeat
end open

-- returns dragged files OR files at first level of one dragged folder
on filelistFromSelection(theselection)
  set hasfolder to false
  tell application "Finder"
    repeat with thisItem in (theselection as list)
      if (class of item thisItem is folder) or (class of item thisItem is disk) then
        set hasfolder to true
      end if
    end repeat
  end tell
  if ((count item of (theselection as list)) > 1) and hasfolder then
    display dialog "Drag multiple files or a single folder." buttons {"OK"} default button 1
    return ""
  end if
  tell application "Finder"
    if hasfolder then
      set filelist to (every item of folder (item 1 of (theselection as list))) as alias list
    else
      set filelist to (theselection as list)
    end if
  end tell
  return filelist
end filelistFromSelection


Skripta ima 4 "preduvjeta" korištenja. Dokumentirao sam ih na vrhu same skripte, ali ne škodi ponoviti.

Prvo, potrebno je kliknuti na checkbox "Enable asscess for assitive devices" u System Preferences/Universal Access kako bi se AppleScriptu omogućilo emuliranje kliktanja po izbornicima.

Drugo, potrebno je snimiti skriptu kao droplet ("Application" file format, bira se tijekom Save As u Script Editoru), da bi se na nju moglo dovući (drag&drop) datoteke koje će obraditi.

Treće, treba ugasiti Preview PRIJE pokretanja skripte (ako je slučajno dignut) jer će se u protivnom skripta "izgubiti" (nema nikakav error checking).

I zadnje, tijekom izvršavanja skripte NE smije se kliktati mišem jer zbunjuje emulaciju.

Zanemarimo li funkciju filelistFromSelection() koju smo već vidjeli na Jabučnjaku, skripta je zgodna jer je priseljena koristiti shell za otvaranje dokumenta u Previewu s obzirom da ne možemo (čak ni s emulacijom kliktanja po izbornicima) otvoriti datoteku u Previewu izravno iz AppleScripta. Zaobilazni put je taj da prvo dokučimo POSIX path datoteke koju ćemo obraditi (AppleScript radi sa HFS pathom), a potom ga proslijedimo shellu koji će, koristeći naredbu "open" otvoriti Preview.app i učitati proslijeđenu datoteku (odnosno njezin path). Time smo riješili manji problem.

Veći problem je kako ubiti prvu stranicu. Naime, kad otvorimo PDF u Previewu, pogotovo ako PDF ima index (prikazuje se u Sidebaru), nije nam dostupna opcija Edit/Delete Selected Page - jer nije odabrana konkretna stranica. S obzirom da nemamo pametnog načina za "odabrati" stranicu koju želimo, a defaultno se nalazimo na prvoj stranici, koristimo "prljavi trik" - dodamo jednu praznu stranicu (Insert Blank Page - opcija koja nam je uvijek dostupna) i time dobijemo pointer na nju. Sad možemo "kliknuti" (emulirano) na Delete Selected Page i to dvaput - prvi put ubijemo dodanu stranicu, a drugi put "naslovnu".

Ovdje ima kvaka! Preview pamti stranicu na kojoj smo stali (automatski "bookmark" ). Drugim riječima, ako PDF dokument ima 42 stranice, a zadnji put smo ga učitali i quitali Preview dok smo bili na 21. stranici, kad sljedeći put otvorimo isti dokument, nalazit ćemo se tamo gdje smo stali - na 21. stranici. To znači da bi "prljavi trik" mogao napraviti kaos ako korisnik nije siguran da li su svi dokumenti automatski bookmarkirani na prvoj stranici! Očito nema smisla da korisnik sam provjeri jer bi to značilo otvaranje N dokumenata, odlazak na prvu stranicu i izlazak iz Previewa, a ako to već radi, onda može usput i pobrisati naslovnicu pa ne mora ni čitati ovaj post.

Rješenje kvake? U korisnikovom Library/Preferences folderu nalazi se "com.apple.Preview.bookmarks.plist". Ako ga pobrišemo, Preview će "zaboraviti" sve bookmarke i PDF datoteke koje potom učitamo u njega bit će, defaultno, na naslovnici (page 0). Naravno, ne moramo ga pobrisati, možemo ga i spremiti ili preimenovati pa kasnije vratiti nazad (ako je potrebno pamtiti stare bookmarke).

Ostatak skripte je trivijalan - nakon što smo uklonili naslovnicu, snimimo preinačeni PDF i ugasimo (quit) Preview. Proces se ponavlja za sve datoteke koje smo odvukli na ikonicu skripte.

Nadam se da je dovoljno elegantno. A i besplatno je.
09.08.2009 | 00:24
Trazim smileya koji bi ti pokazao moju zahvalnost, ali ne nalazim ga.
Stoga nema nego da castim pivom ili cime vec kad se vidimo
Hvala odsrca.
09.08.2009 | 00:26
Jedan problem manje u svemiru.
09.08.2009 | 09:16
Đipi, majstore. Majstore...

(Riba, možda da preseliš ovaj thread u Programiranje?)

Pitanja znatiželje radi:

Zašto će skripta biti zbunjena ako Preview nije quit-an prije pokretanja?

Aplikaciji "System Events" se, pretpostavljam obraćaš jer preko nje ide emulacija klikanja u bilo čemu. Ili?

Pretpostavljam da sa "tell application xy to activate" postižeš to da njen menu postane aktivan u menu baru i da to zapravo treba čitati kao "tell application System events to tell application xy to activate"? Da? Ne?

Ono što ne kužim čemu služi je "tell process xy" pa onda "tell menu bar 1"? Pretpostavljam da općenito bilo koja aplikacija može pokrenuti više procesa (kao više prozora ili...?) pa onda treba System Eventsu reći koji točno proces nas zanima? Da? Ali što onda još "menu bar 1"?

Inače "dirty hack" koji si primijenio ja redovito koristim "ručno", kad PDF ima index pa mi nisu dostupni thumbnailovi stranica da selektiram stranicu. Malo mi je glupasto kako nije moguće odabrati da li se u sidebaru gleda bookmarkove ili thumbnailove...
09.08.2009 | 23:33
Zašto će skripta biti zbunjena ako Preview nije quit-an prije pokretanja?

System Events je bugovit po pitanju referenciranja pa mu se zna dogoditi da po putu "zaboravi" kome se obraća - i tada se pojavi "Connection is invalid", poruka o grešci. Može se pokrpati sa "try" blokom koda, ali kako nisam želio komplicirati implementirajući error checking, alternativa je pobrinuti se da se ne zbuni tako što neće postojati druga aktivna referenca u trenutku obraćanja aplikaciji.

Aplikaciji "System Events" se, pretpostavljam obraćaš jer preko nje ide emulacija klikanja u bilo čemu. Ili?

Tako je. "System Events" je jedan od "agenata" (kako ih Apple zove; u pitanju je background aplikacija), poput "Image Events" i "Database Events". Sva tri proširuju osnovni AppleScript, a "System Events" je najopširniji i zadužen, između ostalog, i za GUI (kao rješenje za kontroliranje onih aplikacija koje nemaju ugrađenu podršku za AppleScript).

Pretpostavljam da sa "tell application xy to activate" postižeš to da njen menu postane aktivan u menu baru i da to zapravo treba čitati kao "tell application System events to tell application xy to activate"? Da? Ne?

"Activate" služi za prebacivanje aplikacije u prednji plan - u smislu da postane aktivna ako je prethodno fokus bio na nekoj drugoj aplikaciji. Također, brine se i za podizanje same aplikacije, što je u ovom slučaju uzaludan korak jer se moramo pobrinuti da "Preview" već bude dignut i u njega učitan odgovarajući dokument (što radimo preko shella jer ne možemo drugačije).

I da, može se čitati (i pisati) ovako kako si predložio, ali u tom slučaju si radimo "medvjeđu uslugu" jer kratimo dvije linije koda da bi potom svakoj koja slijedi eksplicitno morali reći kojem "objektu" se obraća. AppleScriptov "tell" je sličan poznatijem "with" (VB, JavaScripta...) - naredbe koje su unutar "tell" bloka odnose se na objekt specificiran kao parametar tella (reference object). Dakle, ako šaljemo samo jednu naredbu možemo koristiti sintaksu...

tell objekt_kojem_se_obracamo to napravi_nesto

...ali ako imamo vise od jedne naredbe onda je manje posla ako pišemo...

tell objekt kojem_se_obraćamo
  naredba1
  naredba2
...
end tell
Ono što ne kužim čemu služi je "tell process xy" pa onda "tell menu bar 1"? Pretpostavljam da općenito bilo koja aplikacija može pokrenuti više procesa (kao više prozora ili...?) pa onda treba System Eventsu reći koji točno proces nas zanima? Da? Ali što onda još "menu bar 1"?

Dobro pretpostavljaš. Svaka aplikacija može pokrenuti više procesa (najmanje 1), a prozori i menu barovi pripadaju (hijerarhijski) upravo tim procesima. "menu bar 1" je prvi (defaultni) menu bar - proces ih može imati više.
Moderatori: Bertone
  • Stranica:
  • 1

Vikalica™

Zadnja poruka: pred 6 dana, 9 sati
  • dpasaric: Nema, možda nešto sitno što je lokalno na lageru.
  • zvone: Mislim da u istylwu imaju jos stare cijene. Ili?
  • dpasaric: Klijent jučer poželio kupiti jedan solidan MacBook Pro 16", cijena nešto iznad 3.000 € PDV. Što mislite koliko je nakon poskupljenja radne memorije? 3.500 € PDV... veselo...
  • dpasaric: Hardver koji mi je trebao doći na review nažalost kasni! Nadam se da će uskoro! :)
  • Pongy75: @smayoo - Victoria!!!
  • smayoo: MX Master FTW! :)
  • zoranowsky: Od mene isto glas za MX master
  • Pongy75: Palac gore za Logitech MX Master! Od Magic mouse zabolinruka nakon duljeg rada.
  • Tito: MAgic mouse - najbolji mis ikada!!!
  • drlovric: @super. Zaobidji ga u sirokom luku. Bolje kupi za te pare Logitech MX Master :)
  • jura22: Rubno? Nije upotrebljiv osim kao ukras na stolu. Imao dva, jednog prodao a drugog poklonio kupcu mog MBP.
  • dpasaric: Magic Mouse - lijep, ali rubno upotrebljiv! :)
  • superstric: ako netko treba, apple magic mouse 63,01 euro na amazon prime day
  • dpasaric: :)
  • smayoo: Čestitam svima Dan antifašističke borbe!
  • drlovric: Za nekih tjedan dana moj Macbook Pro M1 Pro 16" ide na prodaju. Ako nekoga zanima takvo racunalo (us layout, 16gb ram) neka se javi za dogovor.
  • dpasaric: Možda je to bio Belonguzije - androdi kojeg je predstavio LET 3 u Pikiju jednom davno... istina, imao je dosta ograničen rječnik... :)
  • accom: Evo, čitam o zidiću i gledam Baltazara... jel to bila prva AI mašina na svijetu?
  • dpasaric: To se i meni dogodilo par puta, uvijek prije objave napravim barem copy u buffer, a često ako je nešto kompleksnije, samo paste u TextEdit, just in case.
  • Yonkis: I pretraga je beskorisna, zato sam pisao novu temu jer mi je trebalo manje vremena da ju natipkam i dodam screenshotove nego da češljam rezultate pretrage.
  • Yonkis: Jedem ti jabucnjak, napišem novu temu i nisam odabrao Forum i sve mi izbriše kad sam kliknuo PROVJERI. Odsutajem, 20 min tipkanja otišlo u vjetar. Nikakav alert ili nešto da iskoči da me upozori.
  • ZeljkoB: Zaba na dev beti radi bez greske
  • dpasaric: Vidio sam neke na Twitteru da su stavili dev betu, ali nisu ovdje.
  • mbp2009: ne vidim neke konkretne info na netu za to
  • mbp2009: Ne znam odakle ove diskusije poticu, ali da vidim, ima li koga na dev beti ios? Pogotovo ovaj dio me zanima za PBZ i poslovnu PBZ, ako radi
  • dpasaric: Čekam da mi dođe jedan zanimljiv komad hardvera, pa ću finalizirati velik pregled monitora koji će mnogima biti koristan!
  • dpasaric: "Your request has been processed"
  • Ender: takodje i ja molim admina da obrise i moj korisnicki nalog. ostavljam mogucnost da se kasnije opet prijavim kad i ako se neke stvari promene. pozzz i svako dobro.
  • dpasaric: @Air U redu, razumio sam. Hvala ti na svemu onom pozitivnom, ono drugo će srediti vrijeme.
  • jura22: Vrijeđaj partizane i Tita pa da vidiš.
  • Air: Ako si razumio onda napravi to, a ne da moram pisali litanije za jednostavan zahtjev.
  • dpasaric: Air, naravno da je dovoljno, ako to želiš mogu i ja odmah, ali hej, jutro je pametnije od večeri, prespavaj, pa javi, najmanji je problem kliknuti na delete.
  • Air: Zanimljiv vam je latinski. Uživajte. Između vaših upisa napišite što je potrebno da zatvorim račun na Jabučnjaku ako nije očigledno dovoljno razumljivo ovo što sam napisao na vikalici.
  • smayoo: Canis mater studiorum. Stara studentska. :D
  • dpasaric: @Gjuroo: Per aspera ad astra!
  • Gjuroo: @Air: Illegitimi non carborundum.
  • dpasaric: Chill out i vidjet ćeš kako će ovo sada biti ugodnije, korisnije i pozitivnije mjesto za sve korisnike.
  • dpasaric: Joj ne drami.
  • Air: Molim odgovornu osobu da obriše Air račun.
  • Air: U ovim novim okolnostima transparentnog licemjerstva pojedinca podvlačim crtu. Ja nemam želudac za trpiti to da mi jedan licemjer briše čiste postove samo zato što on ima problem u svojoj glavi. Kako je tino1 rekao bilo mi je zadovoljstvo dolaziti na Jabučnjak radi ljudi. Ovim putem pozdravljam sve dobre ljude Jabučnjaka i HVALA vam! Nakon ovog upisa brišem svoj račun.
  • dpasaric: Sve što je sada obrisano u "kafanskim laprdanjima" je bilo u dogovoru s Djurom, počistili samo za sobom i tko hoće može tamo dalje s "lakim temama".
  • drlovric: @Rusty: Slazem se 100%. Svako bira za sebe. Jedna tema u sekciji Razno, nije smetala nikome ko je dosao da konzumira nesto drugo. Ako sam dosao u ducan da kupim povrce, zasto bi mi smetalo sto prodaju i hranu za bebe? :)
  • rusty: Evo kao dugogodišnji član foruma, moram priznati da niti jednom nisam otvorio političke teme niti sudjelovao u njima na forumu. Dolazim vidjeti non političke, non automobili teme. I jedna i druga su mi kao nogomet, besmislene i ne interesantne. Da li će mi faliti, ne. Da li ću manje dolaziti na forum, ne.
  • dpasaric: To je tvoje viđenje.
  • dpasaric: Obećajem da ćemo je izreklamirati na forumu, pa tko voli…
  • Air: Znam tvoje ovlasti. Nije u tome problem. Problem je što se Jabučnjak predstavlja kao pozitivan, a ovo što ti radiš je negativno!
  • dpasaric: Evo, pokreni i ti moderiraj Signal grupu za vaše političke rasprave.
  • dpasaric: I probaj biti koristan. Pokreni nešto pametno i svima korisno.
  • dpasaric: Pročitaj kućni red još jednom.
  • Air: @dpasaric Otvorio si javni komunikacijski kanal. Tko si ti da brišeš postove iste tematike o kojoj sam pišeš, ako ti postovi nisu uvredljivi i ne krše nikakav zakon?

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Anketa

Koji Mac koristite?

Page Speed 0.39 Seconds

Provided by iJoomla SEO