Files
baiyue-firstleg/print/src/main/java/com/baiyue/print/renderer/GenericPalletRenderer.java
T

44 lines
1.9 KiB
Java

package com.baiyue.print.renderer;
import com.baiyue.print.dto.GenericPalletPdfDtos;
import com.google.zxing.common.BitMatrix;
import jakarta.annotation.Resource;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.springframework.stereotype.Component;
@Component
public class GenericPalletRenderer {
@Resource private PdfBarcodeRenderer barcodeRenderer;
public void renderPage(PDDocument pdf, PDFont font, GenericPalletPdfDtos.Label label, BitMatrix barcode)
throws IOException {
PDPage page = new PDPage(new PDRectangle(PdfUnits.mmToPt(297), PdfUnits.mmToPt(210)));
pdf.addPage(page);
PdfUnits units = new PdfUnits(210);
try (PDPageContentStream stream = new PDPageContentStream(pdf, page)) {
centered(stream, units, font, label.heading(), 80, 43);
centered(stream, units, font, label.reference(), 30, 76);
barcodeRenderer.draw(stream, barcode, PdfUnits.mmToPt(33.5), units.topDownMmToPdfY(145),
PdfUnits.mmToPt(230), PdfUnits.mmToPt(34));
centered(stream, units, font, label.palletCode(), 58, 175);
}
}
private void centered(PDPageContentStream stream, PdfUnits units, PDFont font, String value,
float preferredSize, double centerY) throws IOException {
float unitWidth = font.getStringWidth(value) / 1000;
float size = Math.min(preferredSize, PdfUnits.mmToPt(267) / unitWidth);
stream.beginText();
stream.setFont(font, size);
stream.newLineAtOffset((PdfUnits.mmToPt(297) - unitWidth * size) / 2,
units.centeredTextBaseline(font, size, centerY));
stream.showText(value);
stream.endText();
}
}