Skip to content

Commit

Permalink
Fixes on exclusion of word lines and cell normalization (#26)
Browse files Browse the repository at this point in the history
* Fixes on exclusion of word lines and cell normalization

* Use OCR to infer line detection parameters if possible

* Fix tests
  • Loading branch information
xavctn authored Feb 26, 2023
1 parent 5c8eaed commit 6f8e3ca
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 9 deletions.
14 changes: 11 additions & 3 deletions src/img2table/tables/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,22 @@ def extract_tables(self, implicit_rows: bool = True, borderless_tables: bool = F
:param borderless_tables: boolean indicating if borderless tables should be detected
:return: list of identified tables
"""
# If an OCR is provided, compute parameters base on it
if self.ocr_df is not None:
minLinLength = maxLineGap = round(0.75 * self.ocr_df.text_size or self.dpi // 20)
kernel_size = round(1.5 * self.ocr_df.text_size or self.dpi // 10)
else:
minLinLength = maxLineGap = self.dpi // 20
kernel_size = self.dpi // 10

# Detect lines in image
h_lines, v_lines = detect_lines(image=self.img,
rho=0.3,
theta=np.pi / 180,
threshold=10,
minLinLength=self.dpi // 20,
maxLineGap=self.dpi // 20,
kernel_size=self.dpi // 10,
minLinLength=minLinLength,
maxLineGap=maxLineGap,
kernel_size=kernel_size,
ocr_df=self.ocr_df)
self.lines = h_lines + v_lines

Expand Down
4 changes: 2 additions & 2 deletions src/img2table/tables/processing/bordered_tables/lines.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,12 @@ def remove_word_lines(lines: List[Line], ocr_df: OCRDataframe) -> List[Line]:
# Compute intersection between words bbox and lines
# - vertical case
vert_int = (
((pl.col('x1_line') > pl.col('x1')) & (pl.col('x1_line') < pl.col('x2')))
(((pl.col('x1') + pl.col('x2')) / 2 - pl.col('x1_line')).abs() / (pl.col('x2') - pl.col('x1')) < 0.25)
* pl.max([(pl.min([pl.col('y2'), pl.col('y2_line')]) - pl.max([pl.col('y1'), pl.col('y1_line')])), pl.lit(0)])
)
# - horizontal case
hor_int = (
((pl.col('y1_line') > pl.col('y1')) & (pl.col('y1_line') < pl.col('y2')))
(((pl.col('y1') + pl.col('y2')) / 2 - pl.col('y1_line')).abs() / (pl.col('y2') - pl.col('y1')) < 0.25)
* pl.max([(pl.min([pl.col('x2'), pl.col('x2_line')]) - pl.max([pl.col('x1'), pl.col('x1_line')])), pl.lit(0)])
)
df_words_lines = df_words_lines.with_columns((pl.col('vertical') * vert_int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ def normalize_table_cells(cluster_cells: List[Cell]) -> List[Cell]:
h_values = sorted(list(set([x_val for cell in cluster_cells for x_val in [cell.x1, cell.x2]])))
# Compute delimiters by grouping close values together
h_delims = [round(np.mean(h_group)) for h_group in
np.split(h_values, np.where(np.diff(h_values) / height >= 0.02)[0] + 1)]
np.split(h_values, np.where(np.diff(h_values) >= min(width * 0.02, 10))[0] + 1)]

# Get list of existing vertical values
v_values = sorted(list(set([y_val for cell in cluster_cells for y_val in [cell.y1, cell.y2]])))
# Compute delimiters by grouping close values together
v_delims = [round(np.mean(v_group)) for v_group in
np.split(v_values, np.where(np.diff(v_values) / width >= 0.02)[0] + 1)]
np.split(v_values, np.where(np.diff(v_values) >= min(height * 0.02, 10))[0] + 1)]

# Normalize all cells
normalized_cells = list()
Expand Down
2 changes: 1 addition & 1 deletion tests/document/pdf/test_data/extracted_tables.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"0": [{"title": "Example of Data Table 1", "bbox": {"x1": 236, "y1": 249, "x2": 1442, "y2": 543}, "content": {"0": [{"value": "sample", "bbox": {"x1": 236, "y1": 249, "x2": 551, "y2": 292}}, {"value": "blue LED value", "bbox": {"x1": 551, "y1": 249, "x2": 851, "y2": 292}}, {"value": "green LED value", "bbox": {"x1": 851, "y1": 249, "x2": 1135, "y2": 292}}, {"value": "red LED value", "bbox": {"x1": 1135, "y1": 249, "x2": 1442, "y2": 292}}], "1": [{"value": "clear water", "bbox": {"x1": 236, "y1": 292, "x2": 551, "y2": 354}}, {"value": "97", "bbox": {"x1": 551, "y1": 292, "x2": 851, "y2": 354}}, {"value": "19", "bbox": {"x1": 851, "y1": 292, "x2": 1135, "y2": 354}}, {"value": "79", "bbox": {"x1": 1135, "y1": 292, "x2": 1442, "y2": 354}}], "2": [{"value": "blue water", "bbox": {"x1": 236, "y1": 354, "x2": 551, "y2": 417}}, {"value": "73", "bbox": {"x1": 551, "y1": 354, "x2": 851, "y2": 417}}, {"value": "11", "bbox": {"x1": 851, "y1": 354, "x2": 1135, "y2": 417}}, {"value": "13", "bbox": {"x1": 1135, "y1": 354, "x2": 1442, "y2": 417}}], "3": [{"value": "green water", "bbox": {"x1": 236, "y1": 417, "x2": 551, "y2": 480}}, {"value": "35", "bbox": {"x1": 551, "y1": 417, "x2": 851, "y2": 480}}, {"value": "15", "bbox": {"x1": 851, "y1": 417, "x2": 1135, "y2": 480}}, {"value": "14", "bbox": {"x1": 1135, "y1": 417, "x2": 1442, "y2": 480}}], "4": [{"value": "tea water", "bbox": {"x1": 236, "y1": 480, "x2": 551, "y2": 543}}, {"value": "33", "bbox": {"x1": 551, "y1": 480, "x2": 851, "y2": 543}}, {"value": "13", "bbox": {"x1": 851, "y1": 480, "x2": 1135, "y2": 543}}, {"value": "70", "bbox": {"x1": 1135, "y1": 480, "x2": 1442, "y2": 543}}]}}, {"title": "Example of Data Table 2", "bbox": {"x1": 235, "y1": 671, "x2": 1451, "y2": 971}, "content": {"0": [{"value": "sample", "bbox": {"x1": 235, "y1": 671, "x2": 539, "y2": 726}}, {"value": "blue % transmitted", "bbox": {"x1": 539, "y1": 671, "x2": 843, "y2": 726}}, {"value": "green % transmitted", "bbox": {"x1": 843, "y1": 671, "x2": 1163, "y2": 726}}, {"value": "red % transmitted", "bbox": {"x1": 1163, "y1": 671, "x2": 1451, "y2": 726}}], "1": [{"value": "clear water", "bbox": {"x1": 235, "y1": 726, "x2": 539, "y2": 788}}, {"value": "97/97 = 100%", "bbox": {"x1": 539, "y1": 726, "x2": 843, "y2": 788}}, {"value": "19/19 = 100%", "bbox": {"x1": 843, "y1": 726, "x2": 1163, "y2": 788}}, {"value": "79/79 = 100%", "bbox": {"x1": 1163, "y1": 726, "x2": 1451, "y2": 788}}], "2": [{"value": "blue water", "bbox": {"x1": 235, "y1": 788, "x2": 539, "y2": 849}}, {"value": "73/97 = 75%", "bbox": {"x1": 539, "y1": 788, "x2": 843, "y2": 849}}, {"value": "11/19 = 58%", "bbox": {"x1": 843, "y1": 788, "x2": 1163, "y2": 849}}, {"value": "13/79 = 17%", "bbox": {"x1": 1163, "y1": 788, "x2": 1451, "y2": 849}}], "3": [{"value": "green water", "bbox": {"x1": 235, "y1": 849, "x2": 539, "y2": 910}}, {"value": "35/97 = 36%", "bbox": {"x1": 539, "y1": 849, "x2": 843, "y2": 910}}, {"value": "15/19 = 79%", "bbox": {"x1": 843, "y1": 849, "x2": 1163, "y2": 910}}, {"value": "14/79 = 18%", "bbox": {"x1": 1163, "y1": 849, "x2": 1451, "y2": 910}}], "4": [{"value": "tea water", "bbox": {"x1": 235, "y1": 910, "x2": 539, "y2": 971}}, {"value": "33/97 = 34%", "bbox": {"x1": 539, "y1": 910, "x2": 843, "y2": 971}}, {"value": "13/19 = 68%", "bbox": {"x1": 843, "y1": 910, "x2": 1163, "y2": 971}}, {"value": "70/79 = 91%", "bbox": {"x1": 1163, "y1": 910, "x2": 1451, "y2": 971}}]}}], "1": [{"title": "Example of Data Table 3", "bbox": {"x1": 236, "y1": 249, "x2": 1442, "y2": 543}, "content": {"0": [{"value": "sample", "bbox": {"x1": 236, "y1": 249, "x2": 551, "y2": 292}}, {"value": "blue LED value", "bbox": {"x1": 551, "y1": 249, "x2": 851, "y2": 292}}, {"value": "green LED value", "bbox": {"x1": 851, "y1": 249, "x2": 1135, "y2": 292}}, {"value": "red LED value", "bbox": {"x1": 1135, "y1": 249, "x2": 1442, "y2": 292}}], "1": [{"value": "+ 1 tsp milk", "bbox": {"x1": 236, "y1": 292, "x2": 551, "y2": 354}}, {"value": "13", "bbox": {"x1": 551, "y1": 292, "x2": 851, "y2": 354}}, {"value": "14", "bbox": {"x1": 851, "y1": 292, "x2": 1135, "y2": 354}}, {"value": "12", "bbox": {"x1": 1135, "y1": 292, "x2": 1442, "y2": 354}}], "2": [{"value": "+1tsp milk + blue", "bbox": {"x1": 236, "y1": 354, "x2": 551, "y2": 417}}, {"value": "10", "bbox": {"x1": 551, "y1": 354, "x2": 851, "y2": 417}}, {"value": "9", "bbox": {"x1": 851, "y1": 354, "x2": 1135, "y2": 417}}, {"value": "6", "bbox": {"x1": 1135, "y1": 354, "x2": 1442, "y2": 417}}], "3": [{"value": "+1tsp milk +green", "bbox": {"x1": 236, "y1": 417, "x2": 551, "y2": 480}}, {"value": "9", "bbox": {"x1": 551, "y1": 417, "x2": 851, "y2": 480}}, {"value": "13", "bbox": {"x1": 851, "y1": 417, "x2": 1135, "y2": 480}}, {"value": "7", "bbox": {"x1": 1135, "y1": 417, "x2": 1442, "y2": 480}}], "4": [{"value": "+1tsp milk + tea", "bbox": {"x1": 236, "y1": 480, "x2": 551, "y2": 543}}, {"value": "7", "bbox": {"x1": 551, "y1": 480, "x2": 851, "y2": 543}}, {"value": "9", "bbox": {"x1": 851, "y1": 480, "x2": 1135, "y2": 543}}, {"value": "9", "bbox": {"x1": 1135, "y1": 480, "x2": 1442, "y2": 543}}]}}, {"title": "Example of Data Table 4", "bbox": {"x1": 235, "y1": 671, "x2": 1451, "y2": 971}, "content": {"0": [{"value": "Water sample", "bbox": {"x1": 235, "y1": 671, "x2": 539, "y2": 726}}, {"value": "blue % transmitted", "bbox": {"x1": 539, "y1": 671, "x2": 843, "y2": 726}}, {"value": "green % transmitted", "bbox": {"x1": 843, "y1": 671, "x2": 1163, "y2": 726}}, {"value": "red % transmitted", "bbox": {"x1": 1163, "y1": 671, "x2": 1451, "y2": 726}}], "1": [{"value": "+ 1 tsp milk", "bbox": {"x1": 235, "y1": 726, "x2": 539, "y2": 788}}, {"value": "13/13 = 100%", "bbox": {"x1": 539, "y1": 726, "x2": 843, "y2": 788}}, {"value": "14/14 = 100%", "bbox": {"x1": 843, "y1": 726, "x2": 1163, "y2": 788}}, {"value": "12/12 = 100%", "bbox": {"x1": 1163, "y1": 726, "x2": 1451, "y2": 788}}], "2": [{"value": "+1tsp milk + blue", "bbox": {"x1": 235, "y1": 788, "x2": 539, "y2": 849}}, {"value": "10/13 = 77%", "bbox": {"x1": 539, "y1": 788, "x2": 843, "y2": 849}}, {"value": "9/14 = 64%", "bbox": {"x1": 843, "y1": 788, "x2": 1163, "y2": 849}}, {"value": "6/12 = 50%", "bbox": {"x1": 1163, "y1": 788, "x2": 1451, "y2": 849}}], "3": [{"value": "+1tsp milk +green", "bbox": {"x1": 235, "y1": 849, "x2": 539, "y2": 910}}, {"value": "9/13 = 69%", "bbox": {"x1": 539, "y1": 849, "x2": 843, "y2": 910}}, {"value": "13/14 = 93%", "bbox": {"x1": 843, "y1": 849, "x2": 1163, "y2": 910}}, {"value": "7/12 = 58%", "bbox": {"x1": 1163, "y1": 849, "x2": 1451, "y2": 910}}], "4": [{"value": "+1tsp milk + tea", "bbox": {"x1": 235, "y1": 910, "x2": 539, "y2": 971}}, {"value": "7/13 = 54%", "bbox": {"x1": 539, "y1": 910, "x2": 843, "y2": 971}}, {"value": "9/14 = 69%", "bbox": {"x1": 843, "y1": 910, "x2": 1163, "y2": 971}}, {"value": "9/12 = 75%", "bbox": {"x1": 1163, "y1": 910, "x2": 1451, "y2": 971}}]}}]}
{"0": [{"title": "Example of Data Table 1", "bbox": {"x1": 235, "y1": 249, "x2": 1442, "y2": 543}, "content": {"0": [{"bbox": {"x1": 235, "y1": 249, "x2": 551, "y2": 292}, "value": "sample"}, {"bbox": {"x1": 551, "y1": 249, "x2": 852, "y2": 292}, "value": "blue LED value"}, {"bbox": {"x1": 852, "y1": 249, "x2": 1135, "y2": 292}, "value": "green LED value"}, {"bbox": {"x1": 1135, "y1": 249, "x2": 1442, "y2": 292}, "value": "red LED value"}], "1": [{"bbox": {"x1": 235, "y1": 292, "x2": 551, "y2": 354}, "value": "clear water"}, {"bbox": {"x1": 551, "y1": 292, "x2": 852, "y2": 354}, "value": "97"}, {"bbox": {"x1": 852, "y1": 292, "x2": 1135, "y2": 354}, "value": "19"}, {"bbox": {"x1": 1135, "y1": 292, "x2": 1442, "y2": 354}, "value": "79"}], "2": [{"bbox": {"x1": 235, "y1": 354, "x2": 551, "y2": 417}, "value": "blue water"}, {"bbox": {"x1": 551, "y1": 354, "x2": 852, "y2": 417}, "value": "73"}, {"bbox": {"x1": 852, "y1": 354, "x2": 1135, "y2": 417}, "value": "11"}, {"bbox": {"x1": 1135, "y1": 354, "x2": 1442, "y2": 417}, "value": "13"}], "3": [{"bbox": {"x1": 235, "y1": 417, "x2": 551, "y2": 480}, "value": "green water"}, {"bbox": {"x1": 551, "y1": 417, "x2": 852, "y2": 480}, "value": "35"}, {"bbox": {"x1": 852, "y1": 417, "x2": 1135, "y2": 480}, "value": "15"}, {"bbox": {"x1": 1135, "y1": 417, "x2": 1442, "y2": 480}, "value": "14"}], "4": [{"bbox": {"x1": 235, "y1": 480, "x2": 551, "y2": 543}, "value": "tea water"}, {"bbox": {"x1": 551, "y1": 480, "x2": 852, "y2": 543}, "value": "33"}, {"bbox": {"x1": 852, "y1": 480, "x2": 1135, "y2": 543}, "value": "13"}, {"bbox": {"x1": 1135, "y1": 480, "x2": 1442, "y2": 543}, "value": "70"}]}}, {"title": "Example of Data Table 2", "bbox": {"x1": 235, "y1": 671, "x2": 1451, "y2": 971}, "content": {"0": [{"bbox": {"x1": 235, "y1": 671, "x2": 540, "y2": 726}, "value": "sample"}, {"bbox": {"x1": 540, "y1": 671, "x2": 844, "y2": 726}, "value": "blue % transmitted"}, {"bbox": {"x1": 844, "y1": 671, "x2": 1164, "y2": 726}, "value": "green % transmitted"}, {"bbox": {"x1": 1164, "y1": 671, "x2": 1451, "y2": 726}, "value": "red % transmitted"}], "1": [{"bbox": {"x1": 235, "y1": 726, "x2": 540, "y2": 788}, "value": "clear water"}, {"bbox": {"x1": 540, "y1": 726, "x2": 844, "y2": 788}, "value": "97/97 = 100%"}, {"bbox": {"x1": 844, "y1": 726, "x2": 1164, "y2": 788}, "value": "19/19 = 100%"}, {"bbox": {"x1": 1164, "y1": 726, "x2": 1451, "y2": 788}, "value": "79/79 = 100%"}], "2": [{"bbox": {"x1": 235, "y1": 788, "x2": 540, "y2": 849}, "value": "blue water"}, {"bbox": {"x1": 540, "y1": 788, "x2": 844, "y2": 849}, "value": "73/97 = 75%"}, {"bbox": {"x1": 844, "y1": 788, "x2": 1164, "y2": 849}, "value": "11/19 = 58%"}, {"bbox": {"x1": 1164, "y1": 788, "x2": 1451, "y2": 849}, "value": "13/79 = 17%"}], "3": [{"bbox": {"x1": 235, "y1": 849, "x2": 540, "y2": 910}, "value": "green water"}, {"bbox": {"x1": 540, "y1": 849, "x2": 844, "y2": 910}, "value": "35/97 = 36%"}, {"bbox": {"x1": 844, "y1": 849, "x2": 1164, "y2": 910}, "value": "15/19 = 79%"}, {"bbox": {"x1": 1164, "y1": 849, "x2": 1451, "y2": 910}, "value": "14/79 = 18%"}], "4": [{"bbox": {"x1": 235, "y1": 910, "x2": 540, "y2": 971}, "value": "tea water"}, {"bbox": {"x1": 540, "y1": 910, "x2": 844, "y2": 971}, "value": "33/97 = 34%"}, {"bbox": {"x1": 844, "y1": 910, "x2": 1164, "y2": 971}, "value": "13/19 = 68%"}, {"bbox": {"x1": 1164, "y1": 910, "x2": 1451, "y2": 971}, "value": "70/79 = 91%"}]}}], "1": [{"title": "Example of Data Table 3", "bbox": {"x1": 235, "y1": 249, "x2": 1442, "y2": 543}, "content": {"0": [{"bbox": {"x1": 235, "y1": 249, "x2": 551, "y2": 292}, "value": "sample"}, {"bbox": {"x1": 551, "y1": 249, "x2": 852, "y2": 292}, "value": "blue LED value"}, {"bbox": {"x1": 852, "y1": 249, "x2": 1135, "y2": 292}, "value": "green LED value"}, {"bbox": {"x1": 1135, "y1": 249, "x2": 1442, "y2": 292}, "value": "red LED value"}], "1": [{"bbox": {"x1": 235, "y1": 292, "x2": 551, "y2": 354}, "value": "+ 1 tsp milk"}, {"bbox": {"x1": 551, "y1": 292, "x2": 852, "y2": 354}, "value": "13"}, {"bbox": {"x1": 852, "y1": 292, "x2": 1135, "y2": 354}, "value": "14"}, {"bbox": {"x1": 1135, "y1": 292, "x2": 1442, "y2": 354}, "value": "12"}], "2": [{"bbox": {"x1": 235, "y1": 354, "x2": 551, "y2": 417}, "value": "+1tsp milk + blue"}, {"bbox": {"x1": 551, "y1": 354, "x2": 852, "y2": 417}, "value": "10"}, {"bbox": {"x1": 852, "y1": 354, "x2": 1135, "y2": 417}, "value": "9"}, {"bbox": {"x1": 1135, "y1": 354, "x2": 1442, "y2": 417}, "value": "6"}], "3": [{"bbox": {"x1": 235, "y1": 417, "x2": 551, "y2": 480}, "value": "+1tsp milk +green"}, {"bbox": {"x1": 551, "y1": 417, "x2": 852, "y2": 480}, "value": "9"}, {"bbox": {"x1": 852, "y1": 417, "x2": 1135, "y2": 480}, "value": "13"}, {"bbox": {"x1": 1135, "y1": 417, "x2": 1442, "y2": 480}, "value": "7"}], "4": [{"bbox": {"x1": 235, "y1": 480, "x2": 551, "y2": 543}, "value": "+1tsp milk + tea"}, {"bbox": {"x1": 551, "y1": 480, "x2": 852, "y2": 543}, "value": "7"}, {"bbox": {"x1": 852, "y1": 480, "x2": 1135, "y2": 543}, "value": "9"}, {"bbox": {"x1": 1135, "y1": 480, "x2": 1442, "y2": 543}, "value": "9"}]}}, {"title": "Example of Data Table 4", "bbox": {"x1": 236, "y1": 671, "x2": 1451, "y2": 971}, "content": {"0": [{"bbox": {"x1": 236, "y1": 671, "x2": 540, "y2": 726}, "value": "Water sample"}, {"bbox": {"x1": 540, "y1": 671, "x2": 844, "y2": 726}, "value": "blue % transmitted"}, {"bbox": {"x1": 844, "y1": 671, "x2": 1164, "y2": 726}, "value": "green % transmitted"}, {"bbox": {"x1": 1164, "y1": 671, "x2": 1451, "y2": 726}, "value": "red % transmitted"}], "1": [{"bbox": {"x1": 236, "y1": 726, "x2": 540, "y2": 788}, "value": "+ 1 tsp milk"}, {"bbox": {"x1": 540, "y1": 726, "x2": 844, "y2": 788}, "value": "13/13 = 100%"}, {"bbox": {"x1": 844, "y1": 726, "x2": 1164, "y2": 788}, "value": "14/14 = 100%"}, {"bbox": {"x1": 1164, "y1": 726, "x2": 1451, "y2": 788}, "value": "12/12 = 100%"}], "2": [{"bbox": {"x1": 236, "y1": 788, "x2": 540, "y2": 849}, "value": "+1tsp milk + blue"}, {"bbox": {"x1": 540, "y1": 788, "x2": 844, "y2": 849}, "value": "10/13 = 77%"}, {"bbox": {"x1": 844, "y1": 788, "x2": 1164, "y2": 849}, "value": "9/14 = 64%"}, {"bbox": {"x1": 1164, "y1": 788, "x2": 1451, "y2": 849}, "value": "6/12 = 50%"}], "3": [{"bbox": {"x1": 236, "y1": 849, "x2": 540, "y2": 910}, "value": "+1tsp milk +green"}, {"bbox": {"x1": 540, "y1": 849, "x2": 844, "y2": 910}, "value": "9/13 = 69%"}, {"bbox": {"x1": 844, "y1": 849, "x2": 1164, "y2": 910}, "value": "13/14 = 93%"}, {"bbox": {"x1": 1164, "y1": 849, "x2": 1451, "y2": 910}, "value": "7/12 = 58%"}], "4": [{"bbox": {"x1": 236, "y1": 910, "x2": 540, "y2": 971}, "value": "+1tsp milk + tea"}, {"bbox": {"x1": 540, "y1": 910, "x2": 844, "y2": 971}, "value": "7/13 = 54%"}, {"bbox": {"x1": 844, "y1": 910, "x2": 1164, "y2": 971}, "value": "9/14 = 69%"}, {"bbox": {"x1": 1164, "y1": 910, "x2": 1451, "y2": 971}, "value": "9/12 = 75%"}]}}]}
2 changes: 1 addition & 1 deletion tests/tables/image/test_data/expected_tables.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[[[{"content": "Title", "x1": 35, "y1": 20, "x2": 770, "y2": 71}, {"content": "Title", "x1": 35, "y1": 20, "x2": 770, "y2": 71}, {"content": "Title", "x1": 35, "y1": 20, "x2": 770, "y2": 71}], [{"content": "Line 1-Col 1", "x1": 35, "y1": 71, "x2": 276, "y2": 123}, {"content": "Line Col 2", "x1": 276, "y1": 71, "x2": 494, "y2": 123}, {"content": "Line 1-Col 3", "x1": 494, "y1": 71, "x2": 770, "y2": 123}], [{"content": "Line Col 1", "x1": 35, "y1": 123, "x2": 276, "y2": 174}, {"content": "Merged Cells", "x1": 276, "y1": 123, "x2": 494, "y2": 275}, {"content": "Line 2-Col3", "x1": 494, "y1": 123, "x2": 770, "y2": 174}], [{"content": "Line 3-Col1", "x1": 35, "y1": 174, "x2": 276, "y2": 224}, {"content": "Merged Cells", "x1": 276, "y1": 123, "x2": 494, "y2": 275}, {"content": "Line 3-Col3", "x1": 494, "y1": 174, "x2": 770, "y2": 224}], [{"content": "Line 4-Col1", "x1": 35, "y1": 224, "x2": 276, "y2": 275}, {"content": "Merged Cells", "x1": 276, "y1": 123, "x2": 494, "y2": 275}, {"content": "Line 4-Col3", "x1": 494, "y1": 224, "x2": 770, "y2": 275}], [{"content": "Line", "x1": 35, "y1": 275, "x2": 276, "y2": 326}, {"content": "Line 5-Col2", "x1": 276, "y1": 275, "x2": 494, "y2": 326}, {"content": "Line 3", "x1": 494, "y1": 275, "x2": 770, "y2": 326}]], [[{"content": "Test 1", "x1": 961, "y1": 21, "x2": 1058, "y2": 71}, {"content": "Test 2", "x1": 1058, "y1": 21, "x2": 1154, "y2": 71}], [{"content": "Test 3", "x1": 961, "y1": 71, "x2": 1058, "y2": 123}, {"content": "Test 4", "x1": 1058, "y1": 71, "x2": 1154, "y2": 123}]]]
[[[{"x1": 35, "y1": 20, "x2": 770, "y2": 71, "content": "Title"}, {"x1": 35, "y1": 20, "x2": 770, "y2": 71, "content": "Title"}, {"x1": 35, "y1": 20, "x2": 770, "y2": 71, "content": "Title"}], [{"x1": 35, "y1": 71, "x2": 276, "y2": 123, "content": "Line 1-Col 1"}, {"x1": 276, "y1": 71, "x2": 494, "y2": 123, "content": "Line Col 2"}, {"x1": 494, "y1": 71, "x2": 770, "y2": 123, "content": "Line 1-Col 3"}], [{"x1": 35, "y1": 123, "x2": 276, "y2": 174, "content": "Line Col 1"}, {"x1": 276, "y1": 123, "x2": 494, "y2": 276, "content": "Merged Cells"}, {"x1": 494, "y1": 123, "x2": 770, "y2": 174, "content": "Line 2-Col3"}], [{"x1": 35, "y1": 174, "x2": 276, "y2": 224, "content": "Line 3-Col1"}, {"x1": 276, "y1": 123, "x2": 494, "y2": 276, "content": "Merged Cells"}, {"x1": 494, "y1": 174, "x2": 770, "y2": 224, "content": "Line 3-Col3"}], [{"x1": 35, "y1": 224, "x2": 276, "y2": 276, "content": "Line 4-Col1"}, {"x1": 276, "y1": 123, "x2": 494, "y2": 276, "content": "Merged Cells"}, {"x1": 494, "y1": 224, "x2": 770, "y2": 276, "content": "Line 4-Col3"}], [{"x1": 35, "y1": 276, "x2": 276, "y2": 327, "content": "Line"}, {"x1": 276, "y1": 276, "x2": 494, "y2": 327, "content": "Line 5-Col2"}, {"x1": 494, "y1": 276, "x2": 770, "y2": 327, "content": "Line 3"}]], [[{"x1": 961, "y1": 21, "x2": 1058, "y2": 71, "content": "Test 1"}, {"x1": 1058, "y1": 21, "x2": 1154, "y2": 71, "content": "Test 2"}], [{"x1": 961, "y1": 71, "x2": 1058, "y2": 123, "content": "Test 3"}, {"x1": 1058, "y1": 71, "x2": 1154, "y2": 123, "content": "Test 4"}]]]

0 comments on commit 6f8e3ca

Please sign in to comment.