44 lines
1.9 KiB
Java
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();
|
|
}
|
|
}
|