package cn.iocoder.yudao.module.qcreport.engine; import java.util.Map; /** * 纸张尺寸换算。 *

* 与前端 {@code engine/page.ts} 一一对应,取值同 {@code QcReportEnums.PageSizeEnum}。 * 设计器换算画布像素、渲染引擎换算 {@code @page} 都用这一份,避免两处各写一遍后对不上。 */ public final class PageSizes { /** 纸张尺寸(毫米),数组为 {宽, 高} */ private static final Map SIZE_MM = Map.of( "A3", new double[]{297, 420}, "A4", new double[]{210, 297}, "A5", new double[]{148, 210}, "Letter", new double[]{215.9, 279.4}); /** 默认纸张,未列出的尺寸回退到它 */ public static final String DEFAULT_SIZE = "A4"; /** 默认页边距(毫米) */ public static final double DEFAULT_MARGIN_MM = 10; private PageSizes() { } /** 解析纸张尺寸与页边距(毫米),横向时翻转宽高 */ public static ResolvedPage resolve(PageSetting page) { String size = page == null || page.size() == null ? DEFAULT_SIZE : page.size(); double[] base = SIZE_MM.getOrDefault(size, SIZE_MM.get(DEFAULT_SIZE)); boolean landscape = page != null && "landscape".equals(page.orientation()); PageMargin margin = page == null ? null : page.margin(); return new ResolvedPage( landscape ? base[1] : base[0], landscape ? base[0] : base[1], marginOf(margin == null ? null : margin.top()), marginOf(margin == null ? null : margin.right()), marginOf(margin == null ? null : margin.bottom()), marginOf(margin == null ? null : margin.left())); } private static double marginOf(Double value) { return value == null ? DEFAULT_MARGIN_MM : value; } }