修复PDF归档长字段排版错乱
This commit is contained in:
@@ -43,6 +43,7 @@ from app.services.document_archives import ( # noqa: E402
|
||||
get_latest_archive,
|
||||
render_pdf_archive,
|
||||
_archive_table_columns,
|
||||
_draw_archive_page_frame,
|
||||
_draw_cell,
|
||||
_draw_archive_footer,
|
||||
)
|
||||
@@ -732,6 +733,77 @@ class DocumentArchiveServiceTest(unittest.TestCase):
|
||||
rendered_width = pdfmetrics.stringWidth(line, fake_pdf.font_name, fake_pdf.size)
|
||||
self.assertLessEqual(rendered_width, 54)
|
||||
|
||||
def test_draw_archive_page_frame_wraps_long_metadata_inside_columns(self) -> None:
|
||||
class FakePdf:
|
||||
def __init__(self) -> None:
|
||||
self.font_name = "Helvetica"
|
||||
self.size = 10
|
||||
self.drawn_texts: list[tuple[float, float, str, str, int]] = []
|
||||
|
||||
def setFillColorRGB(self, *args, **kwargs) -> None:
|
||||
_ = args, kwargs
|
||||
|
||||
def rect(self, *args, **kwargs) -> None:
|
||||
_ = args, kwargs
|
||||
|
||||
def setStrokeColor(self, *args, **kwargs) -> None:
|
||||
_ = args, kwargs
|
||||
|
||||
def setStrokeColorRGB(self, *args, **kwargs) -> None:
|
||||
_ = args, kwargs
|
||||
|
||||
def setFillColor(self, *args, **kwargs) -> None:
|
||||
_ = args, kwargs
|
||||
|
||||
def setFont(self, font_name, size) -> None:
|
||||
self.font_name = font_name
|
||||
self.size = size
|
||||
|
||||
def drawRightString(self, x, y, text) -> None:
|
||||
_ = x, y, text
|
||||
|
||||
def drawCentredString(self, x, y, text) -> None:
|
||||
_ = x, y, text
|
||||
|
||||
def drawString(self, x, y, text) -> None:
|
||||
self.drawn_texts.append((x, y, text, self.font_name, self.size))
|
||||
|
||||
def rotate(self, *args, **kwargs) -> None:
|
||||
_ = args, kwargs
|
||||
|
||||
fake_pdf = FakePdf()
|
||||
context = ArchiveContext(
|
||||
document_type=DOCUMENT_TYPE_SALES_ORDER,
|
||||
business_id=100,
|
||||
document_no="生产领料-JH_不锈钢板-用于测试00101_0001-苹果电脑后盖-超长批次-客户特殊版本-返工追溯链路",
|
||||
title="生产领料出库单归档",
|
||||
partner_label="生产产品",
|
||||
partner_name="苹果电脑后盖-测试",
|
||||
document_date=date(2026, 6, 11),
|
||||
due_date_label="生产台账",
|
||||
due_date=2,
|
||||
status="在生产",
|
||||
tax_rate=0,
|
||||
total_amount=636,
|
||||
contact_name="",
|
||||
contact_phone="",
|
||||
address="原材料库",
|
||||
)
|
||||
|
||||
table_y = _draw_archive_page_frame(fake_pdf, context, "Helvetica", "Helvetica-Bold", 1, 1)
|
||||
|
||||
metadata_lines = [
|
||||
(text, font_name, size)
|
||||
for x, y, text, font_name, size in fake_pdf.drawn_texts
|
||||
if x == 42 and y > A4[1] - 190
|
||||
]
|
||||
document_no_lines = [text for text, _, _ in metadata_lines if "单据编号" in text or "返工追溯" in text]
|
||||
self.assertGreaterEqual(len(document_no_lines), 2)
|
||||
self.assertLess(table_y, A4[1] - 190)
|
||||
for text, font_name, size in metadata_lines:
|
||||
rendered_width = pdfmetrics.stringWidth(text, font_name, size)
|
||||
self.assertLessEqual(rendered_width, 288)
|
||||
|
||||
def test_generate_archive_failed_row_uses_free_version_after_collision(self) -> None:
|
||||
order = self._seed_sales_order()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user