feat: generate dispatch BOL PDFs

This commit is contained in:
2026-09-11 10:09:06 +08:00
parent 81f4f9163c
commit 220d159cec
16 changed files with 484 additions and 4 deletions
@@ -6,6 +6,7 @@ import com.baiyue.common.web.GlobalExceptionHandler;
import com.baiyue.print.dto.FreightA4PdfDtos;
import com.baiyue.print.dto.InboundMarkPdfDtos;
import com.baiyue.print.service.FreightA4PdfService;
import com.baiyue.print.service.DispatchBolPdfService;
import com.baiyue.print.service.InboundMarkPdfService;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.BeforeEach;
@@ -42,6 +43,8 @@ class InternalPdfControllerTest {
private InboundMarkPdfService service;
@MockBean
private FreightA4PdfService freightA4PdfService;
@MockBean
private DispatchBolPdfService dispatchBolPdfService;
@Resource
private InternalPdfController controller;
private MockMvc mockMvc;
@@ -0,0 +1,43 @@
package com.baiyue.print.service;
import static org.assertj.core.api.Assertions.assertThat;
import com.baiyue.print.config.PrintPdfProperties;
import com.baiyue.print.dto.DispatchBolPdfDtos;
import com.baiyue.print.renderer.DispatchBolRenderer;
import com.baiyue.print.renderer.PdfUnits;
import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.junit.jupiter.api.Test;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@SpringJUnitConfig(classes = {DispatchBolPdfService.class, PrintPdfProperties.class,
PdfGenerationLimiter.class, DispatchBolRenderer.class})
class DispatchBolPdfServiceGenerationTest {
@Resource private DispatchBolPdfService service;
@Test
void generatesStableA4BolWithEmbeddedChineseFontAndBlackHeaders() throws Exception {
DispatchBolPdfDtos.Document page = new DispatchBolPdfDtos.Document(
"洛杉矶仓", "—", "五月开发验收车队", "ISA-446646", "2026-09-11 18:39:37",
"DEV-83222028", "—", "ABE4", "ABE4", "—", "DS-WH-20260911-692865",
"FBA-SHIP-1", "PO-1", 4, 1, 1,
List.of(new DispatchBolPdfDtos.CargoRow("TSTU2186171", "TSTU2186171-126-001", "ABE4",
"NYEXX2609110181", "FBA-SHIP-1", "PO-1", 4)));
var generated = service.generate(new DispatchBolPdfDtos.Request(DispatchBolPdfDtos.TEMPLATE,
new DispatchBolPdfDtos.PageSpec(new BigDecimal("210"), new BigDecimal("297")),
"DS-WH-20260911-692865-BOL.pdf", List.of(page)));
assertThat(generated.content()).startsWith("%PDF-".getBytes(java.nio.charset.StandardCharsets.US_ASCII));
try (PDDocument pdf = Loader.loadPDF(generated.content())) {
assertThat(pdf.getNumberOfPages()).isEqualTo(1);
assertThat(pdf.getPage(0).getMediaBox().getWidth()).isCloseTo(PdfUnits.mmToPt(210), org.assertj.core.data.Offset.offset(.002f));
assertThat(pdf.getPage(0).getMediaBox().getHeight()).isCloseTo(PdfUnits.mmToPt(297), org.assertj.core.data.Offset.offset(.002f));
assertThat(new PDFTextStripper().getText(pdf)).contains("BILL OF LADING", "洛杉矶仓", "DS-WH-20260911-692865", "TSTU2186171", "Total CTNS:", "4");
}
}
}