test_pdf_table_merge.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import unittest
  2. from pdf_table_to_docx.extractor import _merge_tables
  3. from pdf_table_to_docx.table_parser import CellInfo, TableInfo
  4. class PdfCrossPageMergeTests(unittest.TestCase):
  5. def test_continued_row_does_not_swallow_next_row_label(self):
  6. """跨页续行并入上一行后,纵向合并跨度必须收回。"""
  7. def cell(text, row_span=1, col_span=1):
  8. return CellInfo(
  9. text=text,
  10. row_span=row_span,
  11. col_span=col_span,
  12. )
  13. t1 = TableInfo(
  14. rows=4,
  15. cols=2,
  16. cells=[
  17. [cell("项目内容"), cell("要求")],
  18. [cell("投标文件内容"), cell("要求1")],
  19. [cell("投标有效期"), cell("90天")],
  20. [cell("投标报价"), cell("前半段")],
  21. ],
  22. )
  23. t2 = TableInfo(
  24. rows=2,
  25. cols=2,
  26. cells=[
  27. [cell(""), cell("后半段")],
  28. [cell("服务期限"), cell("三年")],
  29. ],
  30. )
  31. merged = _merge_tables(t1, t2)
  32. self.assertEqual(merged.rows, 5)
  33. quote_cell = merged.cells[3][0]
  34. self.assertEqual(quote_cell.text, "投标报价")
  35. self.assertEqual(quote_cell.row_span, 1)
  36. self.assertIn("前半段", merged.cells[3][1].text)
  37. self.assertIn("后半段", merged.cells[3][1].text)
  38. self.assertEqual(merged.cells[4][0].text, "服务期限")
  39. for row in merged.cells:
  40. for cell in row:
  41. self.assertLessEqual(cell.row_span, 1)
  42. if __name__ == "__main__":
  43. unittest.main()