A PDF nem egy bonyolult formátum, a dokumentum struktúrája viszonylag egyszerű: alapvetően egy objektumlista az egész. Az Erste Bank minden PDF-ében van egy objektum, amelynek a /Length paramétere hibás, gondolom valami hiba van a stream hossz számításában. Érdekes módon az Acrobat és a Foxit readere is gond nélkül megnyitja a fájlokat, és még a pdfHarmony webes ellenőrzője sem jelez hibát, pedig az Adobe 1.3-as PDF specifikáció szerint ennek az értéknek helyesnek kell lennie... Gondolom az Erste nem rendelkezik se rendes PDF validátorral (bár nem tudom, létezik-e egyáltalán ilyen), se Mac tesztgéppel így elkerülte a figyelmüket a hiba.
Szerencsére a probléma egy viszonylag egyszerű Python scripttel orvosolható. Ez egyszerűen átírja a könyvárban mellé tett PDF-ekben talált a hibás objektumok /Length paraméterét a helyes értékre. A hibátlan PDF-ekkel nem történik semmi. A hiba diagnosztizálása után sikerült a javításokat az open source pdfrw PDF olvasó modulba is applikálni (lásdd itt és itt).
Az új pdfrw, amely az rst2pdf hamarosan megjelenő 0.13-as verziójával jön, már tartalmazni fogja ezeket a módosításokat. Addigis SVN-el elérhető a javítás. Így egy még egyszerűbb scripttel is javíthatók az Erste PDF-ek:
#!/usr/bin/env python
# vim: encoding=utf-8
import glob, pdfrw
for pdfname in glob.glob('*.pdf'):
orig = pdfrw.PdfReader(pdfname)
new = pdfrw.PdfWriter()
for page in orig.pages:
new.addpage(page)
new.write(pdfname)
Köszönet az Erste Banknak, nélkülük ez a blogpost nem jöhetett volna létre.
Nincsenek megjegyzések:
Megjegyzés küldése