From 2e05e7833bb18d603829fb91cb4990e33928e33e Mon Sep 17 00:00:00 2001 From: Claudio Schaad Date: Thu, 26 Sep 2019 21:51:31 +0200 Subject: [PATCH] Support multiple pages of credit card statement pdf --- Schaad.Finance.Api/IPdfParsingService.cs | 1 + .../CreditCardStatementServiceTest.cs | 10 ++++++++++ .../Services/CreditCardStatementService.cs | 17 +++++++++++++++-- Schaad.Finance/Services/PdfParsingService.cs | 8 ++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Schaad.Finance.Api/IPdfParsingService.cs b/Schaad.Finance.Api/IPdfParsingService.cs index d4fb9e7..353b316 100644 --- a/Schaad.Finance.Api/IPdfParsingService.cs +++ b/Schaad.Finance.Api/IPdfParsingService.cs @@ -5,6 +5,7 @@ namespace Schaad.Finance.Api { public interface IPdfParsingService { + int GetTotalPages(string file); IReadOnlyList ExtractText(string file, int page); } } \ No newline at end of file diff --git a/Schaad.Finance.Tests/CreditCardStatementServiceTest.cs b/Schaad.Finance.Tests/CreditCardStatementServiceTest.cs index 0e1171b..0a3fae4 100644 --- a/Schaad.Finance.Tests/CreditCardStatementServiceTest.cs +++ b/Schaad.Finance.Tests/CreditCardStatementServiceTest.cs @@ -44,5 +44,15 @@ namespace Schaad.Finance.Tests Assert.That(transactions.Count, Is.EqualTo(2)); Assert.That(transactions.Sum(t => t.Amount), Is.EqualTo(37.20m)); } + + //[Test] + //public void ReadFile_CembraPdf2() + //{ + // var service2 = new CreditCardStatementService(new PdfParsingService()); + // var transactions = service2.ReadFile(CreditCardProvider.CembraPdf, @"D:\Desktop\20190923_Cembra.pdf", System.Text.Encoding.UTF8); + + // Assert.That(transactions.Count, Is.EqualTo(2)); + // Assert.That(transactions.Sum(t => t.Amount), Is.EqualTo(37.20m)); + //} } } diff --git a/Schaad.Finance/Services/CreditCardStatementService.cs b/Schaad.Finance/Services/CreditCardStatementService.cs index 21bf9f0..35613f2 100644 --- a/Schaad.Finance/Services/CreditCardStatementService.cs +++ b/Schaad.Finance/Services/CreditCardStatementService.cs @@ -49,7 +49,20 @@ namespace Schaad.Finance.Services private IReadOnlyList ParseCembraPdf(string filePath) { - var text = pdfParsingService.ExtractText(filePath, 2); + var transactionList = new List(); + var totalPages = pdfParsingService.GetTotalPages(filePath); + + for (int i = 2; i < totalPages; i++) + { + transactionList.AddRange(ParseCembraPdfPage(filePath, i)); + } + + return transactionList; + } + + private IReadOnlyList ParseCembraPdfPage(string filePath, int page) + { + var text = pdfParsingService.ExtractText(filePath, page); var transactionList = new List(); @@ -109,7 +122,7 @@ namespace Schaad.Finance.Services var transactionText = nextPart.part; nextPart = GetNextPartUntilSpace(nextPart.rest, 2); - var amount = nextPart.part; + var amount = nextPart.part.Replace("'", ""); return new CreditCardTransaction { diff --git a/Schaad.Finance/Services/PdfParsingService.cs b/Schaad.Finance/Services/PdfParsingService.cs index 2a1b389..6a73546 100644 --- a/Schaad.Finance/Services/PdfParsingService.cs +++ b/Schaad.Finance/Services/PdfParsingService.cs @@ -7,6 +7,14 @@ namespace Schaad.Finance.Services { public class PdfParsingService : IPdfParsingService { + public int GetTotalPages(string file) + { + var document = new PdfDocument(); + document.LoadFromFile(file); + var pages = document.Pages.Count; + return pages; + } + public IReadOnlyList ExtractText(string file, int page) { var document = new PdfDocument();