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

wiki.xsx.core.pdf.footer.XEasyPdfDefaultFooter Maven / Gradle / Ivy

package wiki.xsx.core.pdf.footer;

import wiki.xsx.core.pdf.component.XEasyPdfComponent;
import wiki.xsx.core.pdf.component.image.XEasyPdfImage;
import wiki.xsx.core.pdf.component.text.XEasyPdfText;
import wiki.xsx.core.pdf.doc.XEasyPdfDocument;
import wiki.xsx.core.pdf.doc.XEasyPdfPage;
import wiki.xsx.core.pdf.doc.XEasyPdfPositionStyle;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;

/**
 * pdf页脚组件
 *
 * @author xsx
 * @date 2020/6/7
 * @since 1.8
 * 

* Copyright (c) 2020-2023 xsx All Rights Reserved. * x-easypdf is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: * http://license.coscl.org.cn/MulanPSL2 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. *

*/ public class XEasyPdfDefaultFooter implements XEasyPdfFooter { private static final long serialVersionUID = 6124740112893964108L; /** * 页脚参数 */ private final XEasyPdfFooterParam param = new XEasyPdfFooterParam(); /** * 有参构造 * * @param component 自定义组件 */ public XEasyPdfDefaultFooter(XEasyPdfComponent component) { this.param.setComponent(component); } /** * 有参构造 * * @param image pdf图片 */ public XEasyPdfDefaultFooter(XEasyPdfImage image) { this(image, null); } /** * 有参构造 * * @param text pdf文本 */ public XEasyPdfDefaultFooter(XEasyPdfText text) { this(null, text); } /** * 有参构造 * * @param image pdf图片 * @param text pdf文本 */ public XEasyPdfDefaultFooter(XEasyPdfImage image, XEasyPdfText text) { this.param.setImage(image).setText(text); } /** * 开启上下文重置 * * @return 返回页脚组件 */ @Override public XEasyPdfDefaultFooter enableResetContext() { this.param.setIsResetContext(Boolean.TRUE); return this; } /** * 设置边距(左右下) * * @param margin 边距 * @return 返回页脚组件 */ @Override public XEasyPdfDefaultFooter setMargin(float margin) { this.param.setMarginLeft(margin).setMarginRight(margin).setMarginBottom(margin); return this; } /** * 设置左边距 * * @param margin 边距 * @return 返回页脚组件 */ @Override public XEasyPdfDefaultFooter setMarginLeft(float margin) { this.param.setMarginLeft(margin); return this; } /** * 设置右边距 * * @param margin 边距 * @return 返回页脚组件 */ @Override public XEasyPdfDefaultFooter setMarginRight(float margin) { this.param.setMarginRight(margin); return this; } /** * 设置下边距 * * @param margin 边距 * @return 返回页脚组件 */ @Override public XEasyPdfDefaultFooter setMarginBottom(float margin) { this.param.setMarginBottom(margin); return this; } /** * 设置高度 * * @param height 高度 * @return 返回页脚组件 */ @Override public XEasyPdfFooter setHeight(float height) { this.param.setHeight(Math.abs(height)); return this; } /** * 添加自定义组件 * * @param component pdf组件 * @return 返回页脚组件 */ @Override public XEasyPdfDefaultFooter addComponent(XEasyPdfComponent component) { this.param.setComponent(component); return this; } /** * 获取页脚高度 * * @param document pdf文档 * @param page pdf页面 * @return 返回页脚高度 */ @Override public float getHeight(XEasyPdfDocument document, XEasyPdfPage page) { // 初始化参数 this.param.init(document, page); // 返回高度 return this.param.getHeight(); } /** * 获取总页码占位符 * * @return 返回总页码占位符 */ @Override public String getTotalPagePlaceholder() { return XEasyPdfHandler.Page.getTotalPagePlaceholder(); } /** * 获取当前页码占位符 * * @return 返回当前页码占位符 */ @Override public String getCurrentPagePlaceholder() { return XEasyPdfHandler.Page.getCurrentPagePlaceholder(); } /** * 获取文本字体路径 * * @return 返回文本字体路径 */ @Override public String getTextFontPath() { if (this.param.getText() != null) { return this.param.getText().getFontPath(); } return null; } /** * 检查组件 * * @param component 组件 * @return 返回布尔值,true为是,false为否 */ @Override public boolean check(XEasyPdfComponent component) { // 如果组件不为空,则判断对应组件 if (component != null) { // 如果组件为图片,则判断图片是否相同 if (component instanceof XEasyPdfImage) { // 判断是否相同 return this.param.getImage() != null && this.param.getImage().equals(component); } // 如果组件为文本,则判断文本是否相同 if (component instanceof XEasyPdfText) { // 判断是否相同 return this.param.getText() != null && this.param.getText().equals(component); } } return false; } /** * 绘制 * * @param document pdf文档 * @param page pdf页面 */ @Override public void draw(XEasyPdfDocument document, XEasyPdfPage page) { // 初始化参数 this.param.init(document, page); // 关闭页面自动重置定位 page.disablePosition(); // 如果图片不为空,则绘制图片 if (this.param.getImage() != null) { // 获取图片 XEasyPdfImage image = this.param.getImage(); // 如果开启重置上下文,则设置图片开启重置上下文 if (this.param.getIsResetContext()) { // 图片开启重置上下文 image.enableResetContext(); } // 绘制图片 image.setContentMode(XEasyPdfComponent.ContentMode.PREPEND) .setPosition(this.param.getBeginX(), this.param.getBeginY() + this.param.getMarginBottom()) .draw(document, page); } // 如果文本不为空,则写入文本 if (this.param.getText() != null) { // 获取文本 XEasyPdfText text = this.param.getText(); // 如果开启重置上下文,则设置文本开启重置上下文 if (this.param.getIsResetContext()) { // 文本开启重置上下文 text.enableResetContext(); } // 设置文本参数 text.replaceAllPlaceholder( XEasyPdfHandler.Page.getCurrentPagePlaceholder(), page.getCurrentIndex(document) + "" ).setCheckPage(false); // 设置位置并绘制文本 text.setPosition( this.param.getBeginX(), this.initYForText(document, page, text) ).enableChildComponent().draw(document, page); // 关闭页面自动重置定位 page.disablePosition(); } // 如果自定义组件不为空,则进行自定义组件绘制 if (this.param.getComponent() != null) { // 绘制自定义组件 this.param.getComponent().draw(document, page); } // 开启页面自动重置定位 page.enablePosition(); } /** * 初始化文本Y轴起始坐标 * * @param document pdf文档 * @param page pdf页面 * @param text pdf文本 * @return 返回Y轴起始坐标 */ private float initYForText(XEasyPdfDocument document, XEasyPdfPage page, XEasyPdfText text) { // 获取页脚高度 float height = this.param.getHeight(); // 获取文本高度 float textHeight = text.getHeight(document, page); // 定义Y轴起始坐标为页面Y轴起始坐标+页脚高度+行间距/2 float y = this.param.getBeginY() + height + text.getLeading() / 2; // 如果垂直样式为居上,则重置Y轴起始坐标为Y轴起始坐标-字体大小 if (text.getVerticalStyle() == XEasyPdfPositionStyle.TOP) { // 重置Y轴起始坐标为Y轴起始坐标-字体大小 y = y - text.getFontSize(); return y; } // 如果垂直样式为居中,则重置Y轴起始坐标为Y轴起始坐标-字体大小-(页脚高度-文本高度)/2 if (text.getVerticalStyle() == XEasyPdfPositionStyle.CENTER) { // 重置Y轴起始坐标为Y轴起始坐标-字体大小-(页脚高度-文本高度)/2 y = y - text.getFontSize() - (height - textHeight) / 2; return y; } // 如果垂直样式为居下,则重置Y轴起始坐标为Y轴起始坐标-字体大小-页脚高度+文本高度 if (text.getVerticalStyle() == XEasyPdfPositionStyle.BOTTOM) { // 重置Y轴起始坐标为Y轴起始坐标-字体大小-单元格高度+文本高度 y = y - text.getFontSize() - height + textHeight; } return y; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy