|
Oktatás * Programozás 2 * Szkriptnyelvek * Adator. prog. Teaching • Prog. for Data Sci. Félévek Linkek * kalendárium |
Py3 /
PDF multiplikátorOlvassátok végig az egész feladatot, mivel a végén lesz egy egyszerűsítés! ProblémaEz egy megtörtént eset. Bent a munkahelyemen történt valami a nyomtatóval és furcsán kezdett el viselkedni. Amikor egy dok.-ot 1 példányban nyomtattam ki, semmi gond nem volt. Amikor több példányban akartam nyomtatni, akkor az első példány rendesen ki lett nyomtatva, de a többi példány helyett egy rejtélyes hibaüzenet jelent meg: ERROR: typecheck OFFENDING COMMAND: put Workaround megoldásAmíg a rendszergazdák el nem hárítják a problémát, addig ezt találtam ki: ha egy PDF-et N példányban akarok kinyomtatni, akkor többszörözzük meg a PDF-et (összesen N darabot készítsünk belőle), fűzzük őket össze egyetlen PDF-fé, majd ezt a nagyméretű PDF-et nyomtassuk egyetlen példányban. A módszer működik :) FeladatÍrjunk egy szkriptet, ami elkészíti az összefűzött, gond nélkül nyomtatható PDF-et. A program valahogy így működjön: $ ls -al total 156 drwxr-xr-x 2 jabba jabba 80 szept 8 14.48 . drwxrwxrwt 31 root root 780 szept 8 14.49 .. -rwxr--r-- 1 jabba jabba 1320 szept 8 12.13 multiply_pdf.py -rw-r--r-- 1 jabba jabba 154703 szept 7 14.41 zh.pdf $ ./multiply_pdf.py Multiply PDF - print a PDF in several copies Usage: multiply_pdf <file.pdf> $ ./multiply_pdf.py zh.pdf Number of copies: 5 # pdftk 'zh.pdf' 'zh_002.pdf' 'zh_003.pdf' 'zh_004.pdf' 'zh_005.pdf' cat output all.pdf $ ls -al total 1572 drwxr-xr-x 2 jabba jabba 180 szept 8 14.50 . drwxrwxrwt 31 root root 780 szept 8 14.50 .. -rw-r--r-- 1 jabba jabba 825518 szept 8 14.50 all.pdf -rwxr--r-- 1 jabba jabba 1320 szept 8 12.13 multiply_pdf.py -rw-r--r-- 1 jabba jabba 154703 szept 8 14.50 zh_002.pdf -rw-r--r-- 1 jabba jabba 154703 szept 8 14.50 zh_003.pdf -rw-r--r-- 1 jabba jabba 154703 szept 8 14.50 zh_004.pdf -rw-r--r-- 1 jabba jabba 154703 szept 8 14.50 zh_005.pdf -rw-r--r-- 1 jabba jabba 154703 szept 7 14.41 zh.pdf $ ./multiply_pdf.py zh.pdf Number of copies: 1 MagyarázatA program lehet félig parancssoros, félig interaktív. A PDF file nevét (amit többszörözni akarunk) parancssori argumentumként kelljen megadni. Ezután a program váltson át interaktív módba és kérje be, hogy hány példányt szeretnénk. Ezt jelöljük N-nel. Ha N < 2, akkor kész vagyunk, nincs teendő. N = 1 esetén nem kell többszörözni, N ≤ 0 pedig értelmetlen érték. Ha N ≥ 2, akkor készítsük el a másolatokat. Pl. N = 5 esetén 4 darab másolatot kell készíteni: zh.pdf, zh_002.pdf, zh_003.pdf, zh_004.pdf, zh_005.pdf Ha ezzel megvagyunk, akkor a linuxos $ pdftk A.pdf B.pdf cat output all.pdf 𝥶 Ebben a példában az Linux alatt telepítsük a A szkript a végén hívja meg a FinomításA programon lehet még finomítani. Ha az eredeti PDF páratlan oldalszámú, akkor a kimenet nem lesz tökéletes, mivel a 2. példány nem külön lapon fog kezdődni az összesített PDF-ben, hanem az első példány utolsó oldalának a túloldalán. Megoldás: ha az eredeti PDF páratlan oldalszámú, akkor az összefűzéskor a másolatok közé még tegyünk be egy üres oldalt is. Tegyük fel, hogy a $ ./multiply_pdf.py zh.pdf Number of copies: 3 # pdftk 'zh.pdf' empty.pdf 'zh_002.pdf' empty.pdf 'zh_003.pdf' cat output all.pdf Egy egyoldalas üres PDF-et ( Egy PDF oldalszámát így tudjuk lekérdezni: $ pdftk zh.pdf dump_data | grep NumberOfPages NumberOfPages: 9 EgyszerűsítésUtólag jöttem rá, hogy az eredeti PDF-ről felesleges másolatokat készíteni, mivel a $ pdftk A.pdf A.pdf A.pdf cat output all.pdf 𝥶 Vesszük az Ezen felismerésünket felhasználva, egyszerűsítsük a megoldásunkat: $ ./multiply_pdf.py zh.pdf Number of copies: 3 # pdftk 'zh.pdf' empty.pdf 'zh.pdf' empty.pdf 'zh.pdf' empty.pdf cat output all.pdf |
![]() Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |