2010. március 13., szombat

Erste Bank Hungary és a PDF formátum

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.

Nincsenek megjegyzések:

Megjegyzés küldése