All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ofdrw.layout.PageLayout Maven / Gradle / Ivy

The newest version!
package org.ofdrw.layout;

import org.ofdrw.core.basicStructure.doc.CT_PageArea;
import org.ofdrw.core.basicType.ST_Box;
import org.ofdrw.layout.element.ArrayParamTool;

import java.util.Arrays;

/**
 * 虚拟页面样式
 *
 * @author 权观宇
 * @since 2020-02-28 03:25:54
 */
public class PageLayout {

    public static PageLayout A0() {
        return new PageLayout(841d, 1189d);
    }

    public static PageLayout A1() {
        return new PageLayout(594d, 841d);
    }

    public static PageLayout A2() {
        return new PageLayout(420d, 594d);
    }

    public static PageLayout A3() {
        return new PageLayout(297d, 420d);
    }

    public static PageLayout A4() {
        return new PageLayout(210d, 297d);
    }

    public static PageLayout A5() {
        return new PageLayout(148d, 210d);
    }

    public static PageLayout A6() {
        return new PageLayout(105d, 148d);
    }

    public static PageLayout A7() {
        return new PageLayout(74d, 105d);
    }

    public static PageLayout A8() {
        return new PageLayout(52d, 74d);
    }

    public static PageLayout A9() {
        return new PageLayout(37d, 52d);
    }

    public static PageLayout A10() {
        return new PageLayout(26d, 37d);
    }

    /**
     * 页面宽度
     */
    Double width;
    /**
     * 页面高度
     */
    Double height;

    /**
     * 外边距
     * 

* 页边距:上下都是2.54厘米,左右都是3.17厘米。 * *

* 上 左 下 右 * [0 1 2 3] * 默认值 36 */ private Double[] margin = {25.4, 31.7, 25.4, 31.7}; public PageLayout(Double width, Double height) { this.width = width; this.height = height; } public PageLayout(ST_Box box) { if (box == null) { throw new IllegalArgumentException("box 为空"); } this.width = box.getWidth(); this.height = box.getHeight(); } public Double getWidth() { return width; } public PageLayout setWidth(Double width) { this.width = width; return this; } public Double getHeight() { return height; } public PageLayout setHeight(Double height) { this.height = height; return this; } public Double[] getMargin() { return margin; } public PageLayout setMargin(Double... margin) { this.margin = ArrayParamTool.arr4p(margin); return this; } public PageLayout setMarginTop(double top) { margin[0] = top; return this; } public double getMarginTop() { return margin[0]; } public PageLayout setMarginRight(double right) { margin[1] = right; return this; } public double getMarginRight() { return margin[1]; } public PageLayout setMarginBottom(double bottom) { margin[2] = bottom; return this; } public double getMarginBottom() { return margin[2]; } public PageLayout setMarginLeft(double left) { margin[3] = left; return this; } public double getMarginLeft() { return margin[3]; } /** * @return 实际能放置内容的宽度 */ public double contentWidth() { return width - getMarginLeft() - getMarginRight(); } /** * @return 实际能放置内容的高度 */ public double contentHeight() { return height - getMarginTop() - getMarginBottom(); } /** * 绘制区域原点X * * @return 起始X坐标 */ public double getStartX() { return getMarginLeft(); } /** * 绘制区域原点Y * * @return 起始Y坐标 */ public double getStartY() { return getMarginTop(); } /** * 页面正文的工作区域 * * @return 工作区域 */ public Rectangle getWorkerArea() { return new Rectangle( getStartX(), getStartY(), contentWidth(), contentHeight()); } /** * 获取OFD页面区域 * * @return OFD页面区域 */ public CT_PageArea getPageArea() { return new CT_PageArea() // 物理区域为实际页面大小 .setPhysicalBox(0, 0, this.getWidth(), this.getHeight()) // 为了兼容骑缝章,不减去页面边距 .setApplicationBox(0, 0, this.getWidth(), this.getHeight()); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof PageLayout) { PageLayout that = (PageLayout) obj; return (Arrays.equals(this.margin, that.margin) && this.width.equals(that.width) && this.height.equals(that.height)); } return false; } @Override public PageLayout clone() { PageLayout copy = new PageLayout(width, height); copy.margin = margin.clone(); return copy; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy