Nagyon zavar, hogy Mac OS X Preview nem tudja megjeleníteni azokat a PDF fájlokat, amiket az Erste Bank az utóbbi időben elektronikus számlakivonatként küld. A tartalom helyett csak egy üres oldal jelenik meg. A problémát megemlítik a
beszeljukmac.com oldalon is. Kicsit beleástam magam a PDF formátumba dokumentáció készítése végett, és elhatároztam, megpróbálom kideríteni a hiba okát. Úgy tűnik, hogy az Erste-féle PDF generátor a
hibás.
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.