|
|
@@ -85,6 +85,28 @@ class InvoiceProofPdfRendererTest {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Test void simplifiedTraditionalAndEnglishCanRenderTogetherInProofAndDetail() throws Exception {
|
|
|
+ var response = InvoicePrintSnapshotTest.data();
|
|
|
+ response.getJSONArray("ItemDetail").getJSONObject(0).put("ItemName", "草莓冰淇淋 Strawberry 123,简体繁體");
|
|
|
+ var snapshot = InvoicePrintSnapshot.from(response, InvoicePrintSnapshotTest.invoice(),
|
|
|
+ InvoicePrintSnapshotTest.config(), "测试門店 Foodie 123");
|
|
|
+ var renderer = new InvoiceProofPdfRenderer();
|
|
|
+ byte[] detail = assertDoesNotThrow(() -> renderer.detail(snapshot));
|
|
|
+ byte[] proof = assertDoesNotThrow(() -> renderer.proof(snapshot, false));
|
|
|
+ write("mixed-language-detail.pdf", detail); write("mixed-language-proof.pdf", proof);
|
|
|
+ for (byte[] bytes : java.util.List.of(detail, proof)) {
|
|
|
+ try (var doc = Loader.loadPDF(bytes)) {
|
|
|
+ String text = new PDFTextStripper().getText(doc).replaceAll("\\s", "");
|
|
|
+ assertTrue(text.contains("测试門店Foodie123"));
|
|
|
+ assertTrue(text.contains("草莓冰淇淋Strawberry123,简体繁體"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var images = assertDoesNotThrow(() -> new InvoicePrintImageRenderer().render(proof));
|
|
|
+ assertEquals(384, images.getFirst().width());
|
|
|
+ Files.write(Path.of("target/invoice-print-samples/mixed-language-proof.png"),
|
|
|
+ java.util.Base64.getDecoder().decode(images.getFirst().pngBase64()));
|
|
|
+ }
|
|
|
+
|
|
|
private static BufferedImage crop(BufferedImage image, float x, float y, float w, float h) {
|
|
|
double scale = 203 / 25.4;
|
|
|
int left = (int) (x * scale), top = (int) (y * scale);
|