From dd873f49fad6a8b0f0ef9e0cb52e8ec653a9f48e Mon Sep 17 00:00:00 2001 From: Shawn Date: Thu, 22 Apr 2021 19:58:32 +0700 Subject: [PATCH] Fix error while handling table with missing edges Signed-off-by: Shawn --- pdfplumber/table.py | 4 +++- tests/pdfs/issue-420-example.pdf | Bin 72456 -> 82097 bytes tests/test_table.py | 13 +++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pdfplumber/table.py b/pdfplumber/table.py index f189742e..102e48cd 100644 --- a/pdfplumber/table.py +++ b/pdfplumber/table.py @@ -357,12 +357,14 @@ def get_centroids(indices): yield (vertices[index - 1] + vertices[index]) / 2 def get_cell_by_centroid(centroid_x, centroid_y): - return next( + cells = list( filter( lambda c: c[0] < centroid_x < c[2] and c[1] < centroid_y < c[3], self.cells, ) ) + if cells: + return cells[0] x_centroids = list(get_centroids((0, 2))) y_centroids = list(get_centroids((1, 3))) diff --git a/tests/pdfs/issue-420-example.pdf b/tests/pdfs/issue-420-example.pdf index 7ecd215fd39db15849470fb66a5c65ed92db138f..e719c289f285e4dd523513dbff697d4f307c4a10 100644 GIT binary patch delta 19792 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 ReUCq3gHHwr7XF;D{|opAls*6e diff --git a/tests/test_table.py b/tests/test_table.py index eb48c905..d31e0e57 100644 --- a/tests/test_table.py +++ b/tests/test_table.py @@ -102,13 +102,13 @@ def test_merge_cell(self): See issue #420 """ path = os.path.join(HERE, "pdfs/issue-420-example.pdf") - TABLE_0 = [ + TABLE_0_0 = [ ["Header 1", "Header 2", "Header 3", "Header 4"], ["Merged cell 1", "Merged cell 2", "Cell 3-1", "Cell 4-1"], ["Merged cell 1", "Merged cell 2", "Cell 3-2", "Cell 4-2"], ["Merged cell 1", "Merged cell 2", "Cell 3-2", "Cell 4-3"], ] - TABLE_1 = [ + TABLE_0_1 = [ ["1-1", "1-1", "1-3", "1-4", "1-5", "1-6"], ["2-1", "2-2", "2-3", "2-4", "1-5", "1-6"], ["3-1", "3-2", "3-3", "3-4", "1-5", "1-6"], @@ -118,9 +118,14 @@ def test_merge_cell(self): ["7-1", "7-1", "7-1", "7-1", "1-5", "1-6"], ["7-1", "7-1", "7-1", "7-1", "7-5", "1-6"], ] + TABLE_1_0 = [["1", "2"], [None, "4"]] with pdfplumber.open(path) as pdf: tables = pdf.pages[0].extract_tables() assert len(tables) == 2 - assert TABLE_0 == tables[0] - assert TABLE_1 == tables[1] + assert TABLE_0_0 == tables[0] + assert TABLE_0_1 == tables[1] + + tables_missing_edges = pdf.pages[1].extract_tables() + assert len(tables_missing_edges) == 1 + assert TABLE_1_0 == tables_missing_edges[0]