feat: match warehouse BOL print layout

This commit is contained in:
2026-09-11 11:35:37 +08:00
parent 7fd2e70024
commit d60689ce02
8 changed files with 191 additions and 47 deletions
@@ -8,6 +8,7 @@ import com.baiyue.print.renderer.DispatchBolRenderer;
import com.baiyue.print.renderer.PdfUnits;
import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
@@ -40,4 +41,45 @@ class DispatchBolPdfServiceGenerationTest {
assertThat(new PDFTextStripper().getText(pdf)).contains("BILL OF LADING", "洛杉矶仓", "DS-WH-20260911-692865", "TSTU2186171", "Total CTNS:", "4");
}
}
@Test
void rendersDenseContinuationPageAndPrintsTotalOnlyOnLastPage() throws Exception {
List<DispatchBolPdfDtos.CargoRow> firstRows = rows(1, 18);
List<DispatchBolPdfDtos.CargoRow> continuationRows = rows(19, 44);
DispatchBolPdfDtos.Document first = page(1, 2, firstRows);
DispatchBolPdfDtos.Document second = page(2, 2, continuationRows);
var generated = service.generate(new DispatchBolPdfDtos.Request(DispatchBolPdfDtos.TEMPLATE,
new DispatchBolPdfDtos.PageSpec(new BigDecimal("210"), new BigDecimal("297")),
"dense-bol.pdf", List.of(first, second)));
try (PDDocument pdf = Loader.loadPDF(generated.content())) {
assertThat(pdf.getNumberOfPages()).isEqualTo(2);
PDFTextStripper stripper = new PDFTextStripper();
stripper.setStartPage(1);
stripper.setEndPage(1);
String firstText = stripper.getText(pdf);
stripper.setStartPage(2);
stripper.setEndPage(2);
String secondText = stripper.getText(pdf);
assertThat(firstText).contains("BILL OF LADING", "PALLET-01", "1 / 2").doesNotContain("Total CTNS:");
assertThat(secondText).contains("PALLET-44", "Total CTNS:", "44", "2 / 2").doesNotContain("SHIP FROM");
}
}
private DispatchBolPdfDtos.Document page(int pageNumber, int pageCount, List<DispatchBolPdfDtos.CargoRow> rows) {
return new DispatchBolPdfDtos.Document("NOBLE LOGISTICS INC", "10767 7th Street", "ECHO", "14068390973 F",
"09/14/2026 08:00 EDT", "—", "—", "IND9", "IND9", "—", "DS-WH-20260911-692865",
"FBA19TEST", "PO-TEST", 44, pageNumber, pageCount, rows);
}
private List<DispatchBolPdfDtos.CargoRow> rows(int start, int end) {
List<DispatchBolPdfDtos.CargoRow> rows = new ArrayList<>();
for (int index = start; index <= end; index++) {
String pallet = index <= 4 ? "PALLET-01" : "PALLET-" + String.format("%02d", index);
rows.add(new DispatchBolPdfDtos.CargoRow("D2250", pallet, "CLT2转IND9", "HDHK2608" + String.format("%06d", index),
"FBA19TEST" + index + "-" + index + "件", "PO" + index, 1));
}
return rows;
}
}