Nieuws:

Ubuntu-NL weer online!

Na een periode van technische problemen en een overbelaste server zijn we eindelijk weer bereikbaar.
Samen met Hobbynet, onze sponsor en hostingpartner, hebben we een oplossing gevonden zodat alles weer soepel draait.

Bedankt voor jullie geduld en begrip. We hopen nu weer verder te gaan waar we gebleven waren.

Het team van Ubuntu-NL

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Principe Gevonden] PDF anders samenstellen  (gelezen 1478 keer)

[Principe Gevonden] PDF anders samenstellen
« Gepost op: 2010/07/17, 20:07:25 »
Hier mijn tweede probleem: ik heb (eenentwintig keer) zeven bestanden, allemaal even lang en daar wil ik nu telkens het eerste blad van nemen en daar één file van maken, dan telkens het tweede blad, enzovoort...
(Als die eerste zeven "op" zijn, begin ik aan de volgende serie van zeven, maar er is geen naamsverband tussen die 21 reeksen. Dat is op zich niet erg, ik kan het commando wel 21 keer ingeven na een tussenstapje in gedit waar ik een "search en replace" kan doen op "bestand" dat wèl overal hetzelfde is)
Het gaat 'm gewoon om die ene reeks van zeven. Ik kan er bvb de derde bladzijde uithalen met
gs -dBATCH -dNOPAUSE -dFirstPage=3 -dLastPage=3 -q -sDEVICE=pdfwrite -sOutputFile=Plakbestand_3.pdf Bestand_A.pdf Bestand_B.pdf Bestand_C.pdf Bestand_D.pdf Bestand_E.pdf Bestand_F.pdf Bestand_G.pdf
maar de fameuze "3" kan ik niet laten veranderen omdat pdfwrite die switch NIET aanpakt (staat ook zo in de documentatie...).
Iemand een idee voor een scriptje ?
Daar heb ik zelf absoluut geen kaas van gegeten... :(

@Vanadium: bedankt voor je tip in m'n vorige draadje: ik zal straks eens naar de documentatie van pdftk kijken.
« Laatst bewerkt op: 2010/07/18, 22:25:02 door Prosper »
Omwille van de besparingen hebben ze het licht aan het eind van de tunnel ook uitgedaan...

Offline Thijsg

  • Lid
Re: PDF anders samenstellen
« Reactie #1 Gepost op: 2010/07/17, 21:15:11 »
Misschien ligt het aan mij, maar ik begrijp het verhaal niet helemaal. Zijn het toevallig 21 leerlingen die een toets van 7 vragen hebben gemaakt? En wat bedoel je met de eerste zeven die op zijn? Verder is het misschien handig om de namen te veranderen. Ook daar zijn terminaltoverspreuken voor.

Re: PDF anders samenstellen
« Reactie #2 Gepost op: 2010/07/17, 21:26:32 »
Ik heb voor 21 klassen telkens 7 files met één bladzijde per leerling. Die wil ik nu allemaal "per leerling" zetten.
Het commando van hierboven werkt voor één klas, één leerling... (de derde uit klas "bestand")
Omwille van de besparingen hebben ze het licht aan het eind van de tunnel ook uitgedaan...

Offline Thijsg

  • Lid
Re: PDF anders samenstellen
« Reactie #3 Gepost op: 2010/07/17, 22:27:59 »
En dat wil je in een keer doen?

Re: PDF anders samenstellen
« Reactie #4 Gepost op: 2010/07/18, 15:05:46 »
Mag in 21 keer hoor. Het alternatief zou namelijk zijn dat ik eerst voor elke klas alle zeven de files splits in individuele pagina's per leerling en die dan per leerling merge... Dat zouden er in totaal 170 worden waarin ik dan telkens nog eens een nummer moet veranderen...
Als ik die weg opga, moet het mogelijk zijn om dat in een scriptje te zetten:

Zoiets als while klas in {3XY, 3XZ,4TT, 4TZ}
   while d=1 to end
   do
       gs -dBATCH -dNOPAUSE -dFirstPage=%d -dLastPage=%d -q -sDEVICE=pdfwrite -sOutputFile=Plakbestand_klas_%d.pdf
klas_Bestand_A.pdf klas_Bestand_B.pdf klas_Bestand_C.pdf klas_Bestand_D.pdf klas_Bestand_E.pdf klas_Bestand_F.pdf klas_Bestand_G.pdf
  end while
end while
 

Bovenstaande code zal natuurlijk NIET werken, maar dat is om een idee te geven. Er zouden dan overigens 21 klasnamen komen in de bovenste regel, maar ik was te lui om er zo 21 te verzinnen...

Overigens kan dit dus niet omdat -sOutputFile=Plakbestand_klas_%d.pdf niet door pdfwrite wordt geaccepteerd omwille van de teller %d.
Ik ben dus nu aan het grasduinen in de manual van pdftk, maar ben nog niet veel verder gekomen....
Omwille van de besparingen hebben ze het licht aan het eind van de tunnel ook uitgedaan...

Offline vanadium

  • Lid
Re: PDF anders samenstellen
« Reactie #5 Gepost op: 2010/07/18, 19:14:59 »
Een startertje:
for f in *.pdf ; do echo "$f"; pdftk "$f" cat 1-1 output "$f""_page01.pdf" ; done
pdftk *page01* cat output combined.pdf

een eerste uitbreiding:

for i in {1..5}
do
   for f in *.pdf
   do
         echo "$i - $f"
         pdftk "$f" cat $i-$i output pages/"$f""_page"$i".pdf"
   done
   pdftk pages/*page$i* cat output "out/"$i"_combined.pdf"
done

Re: PDF anders samenstellen
« Reactie #6 Gepost op: 2010/07/18, 20:44:00 »
Ik heb mijn gegevens even gekopieerd naar een tijdelijke map en er jouw scriptje op losgelaten.
Het haalt uiteindelijk uit elke klas de eerste, tweede, enzovoort leerling en plakt die dan allemaal samen in bestanden waarin het bestand met naam 1 alle 21 eerste leerlingen bevat, dat met naam 2 alle 21 tweede leerlingen enzovoort.
Dat is dus niet echt wat ik zoek, maar goed, voor mij is de structuur van mijn bestandssysteem duidelijk, voor jullie natuurlijk niet (en de discretie laat me niet toe om het hier met echte namen te doen...)
Bovendien houdt het (nog) geen rekening met het feit dat er een wisselend aantal leerlingen per klas is en dat er per klas zeven verschillende files zijn (van gelijke lengte) die moeten gecombineerd worden.

Ik heb er wel veel van geleerd. Bijvoorbeeld het feit dat de veranderlijke f bvb gewoon de filenaam kan zijn...Dat is al heel handig.

Nog even proberen de structuur duidelijk te maken: ik heb zeven directories met daarin telkens 21 files. In elke directory hebben die dezelfde naam (de klasnaam) en dezelfde lengte (het aantal leerlingen in die klas). De mapnamen kan ik nog wel aanpassen zodat ze een nummer krijgen na een kort gemeenschappelijk deel, zodat er kan afgeteld worden van map1 tot map7. De klasnamen (zie hierboven voor voorbeelden) wil ik echter niet veranderen, dat zijn er zeven keer 21... en dan wordt het voor mij ook onoverzichtelijk. Dat lijkt geen probleem te moeten geven vermits die mogelijkheid om te "tellen" met filenamen.
Wat ik dus wil is dat uit elke map telkens één zelfde bladzijde wordt gehaald uit de file met dezelfde naam en dat die worden samengevoegd tot één file.

Nog een opmerking: ik zag dat de gegenereerde files nogal "zwaar" werden: elke bladzijde had ongeveer 140 kB, terwijl elke klas oorspronkelijk daar nauwelijks boven ging (afhankelijk van het aantal leerlingen)....

In elk geval al bedankt, we gaan vooruit...
Omwille van de besparingen hebben ze het licht aan het eind van de tunnel ook uitgedaan...

Re: PDF anders samenstellen
« Reactie #7 Gepost op: 2010/07/18, 22:23:29 »
Opgelost...

Enfin, ik bots wel aan tegen het feit dat sommige leerlingen later zijn gekomen en dat de files voor één klas over de zeven mappen NIET altijd dezelfde lengte hebben en dat bovendien er dus "indringers" tussen zitten, waardoor bvb leerling 15 uit klas X in map 1 niet meer overeenkomt met leerling 15 uit klas X in map 2, maar daar 16 is, terwijl de nieuwe 15 iemand anders is dan die in map 1...
zucht.... en het idee was nog wel zo goed....

Goed, in de veronderstelling dat die ideale toestand WEL zou bestaan doet het volgende scriptje het werk. Ik heb voor de test slechts twee mappen genomen ipv zeven, maar dat is een kwestie van regeltjes bijvoegen in de eerste lus en van een langere reeks inputfiles in de tweede lus.
Ik heb in de hoofdmap lege tekstbestanden aangemaakt die ik KLAS_A.pdf KLAS_B.pdf enzovoort heb genoemd. In die hoofdmap staat ook het scriptje. In de twee (was bedoeld voor zeven) submappen die beginnen met "Definitief" staan telkens die 21 klassen, in de submap "pages" komen de individuele bladzijden per leerling en in de submap "out" komen de samengestelde pdf-en per leerling.
Omdat ik een wisselend aantal leerlingen per klas heb, en hij "end" niet als aantal wilde pakken, heb ik de bovengrens 20 genomen. Dat geeft dan wel foutmeldingen vanaf dat de leerlingen uitgeput (sic) zijn, maar levert verder geen problemen op, vermits hij niets schrijft...

for f in *.pdf
do
echo "$f"
pdftk Definitief_1_Eerste_Periode/$f burst output pages/"$f""_P1_leerling_"%d
pdftk Definitief_2_Tweede_Periode/$f burst output pages/"$f""_P2_leerling_"%d
for i in {1..20}
do
pdftk pages/"$f"_P1_leerling_"$i" pages/"$f"_P2_leerling_"$i" cat output out/"$f""_""$i""_jaar.pdf"
done
done
Omwille van de besparingen hebben ze het licht aan het eind van de tunnel ook uitgedaan...