Deutsche Bahn Online-Tickets (PDF) parsen (CSV)

(So gut wie) tagtäglich fahre ich mit der Bahn zur Arbeit. Schon immer mit Einzelfahrkarten und einer BahnCard 50, da sich das auf das Jahr gesehen (so gut wie auf jeder Strecke, wenn man sich das wirklich mal vergleichsweise durchrechnet) mehr lohnt, als Zeitkarten.

Aufgrund der letzten Preiserhöhungen liegen diese Kosten nun bei mir über der Entfernungspauschale, weswegen ich gerne die Echtkosten in meiner Einkommensteuererklärung angeben wollte, was man ja machen kann.

Nun kann man dazu einfach einen selbst errechneten Gesamtbetrag angeben, aber besser wäre eine Liste jeder einzelnen Fahrkarte. Ich benutze ausschließlich Online- bzw. Handy-Tickets. Die Gesamtsumme hätte ich leicht aus meiner Finanzverwaltung (ich benutze WISO Mein Geld Professional) rausziehen können, aber für jeden einzelnen Fahrschein habe ich eigtl. nur das PDF des Online-Tickets.

Deutsche Bahn Online-TicketIch dachte mir, kannst ja jetzt nicht jedes einzelne PDF durchgehen, die ich zwar alle schon säuberlich abspeichere, aber ist ja mühsam ohne Ende. Außerdem liegen da auch noch Tickets von rein privaten Fahrten dabei.

Ein bisschen überlegt, war ich schon dabei die DB Navigator App ein bisschen mit Packet Capture zu belauschen, wo die ihre Daten so herbekommt, dachte am Ende aber, evtl. kann man auch die PDFs parsen.

Und siehe da, war dank iTextSharp gar nicht so schwer, herausgekommen ist ein kleines PowerShell-Script, was dann eine CSV wie in folgendem Beispiel ausspuckt (Tabs statt Kommas oder Semikolons, weil Excel die lieber als Trennzeichen mag).

11.10.2017	Bahn Fahrkarte (Typ: Flexpreis Hin- und Rückfahrt, Reisende: 1 mit 1 BC50, Strecke: Bobingen -> Egling und Egling -> Bobingen, Auftragsnummer: SXXXXQ)	8,80
12.10.2017	Bahn Fahrkarte (Typ: Flexpreis Einfache Fahrt, Reisende: 1 mit 1 BC50, Strecke: Bobingen -> Egling, Auftragsnummer: NXXXXD)	4,40

Das Script liegt auf GitHub: https://github.com/berrnd/deutsche-bahn-online-ticket-parser

Du möchtest mir hierzu Feedback hinterlassen? Dann schreib mir gerne eine Nachricht.