package com.fanruan.api.report; import com.fanruan.api.log.LogKit; import com.fr.base.Margin; import com.fr.main.FineBook; import com.fr.page.ClippedPageProvider; import com.fr.page.PaperSettingProvider; import com.fr.page.ReportPageProvider; import com.fr.page.ReportSettingsProvider; import com.fr.report.cell.CellElement; import com.fr.report.cell.cellattr.CellGUIAttr; import com.fr.report.stable.ReportSettings; import com.fr.stable.Constants; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; /** * @author richie * @version 10.0 * Created by richie on 2019/9/25 * 报表打印导出相关工具类 */ public class PrintKit { private PrintKit() { } /** * 根据模板获取打印/导出的页面设置 * * @param book 模板 * @return 多个待打印对象的页面设置集合 */ public static List getPaperSettings(FineBook book) { return PrintKit.getPaperSettings(book, null); } /** * 根据模板获取打印/导出的页面设置 * * @param book 模板 * @param offsetMargin 偏移量 * @return 多个待打印对象的页面设置集合 */ public static @Nullable List getPaperSettings(FineBook book, Margin offsetMargin) { if (book == null) { return null; } List list = new ArrayList<>(); ReportSettingsProvider reportSettings; for (int i = 0; i < book.getReportCount(); i++) { reportSettings = book.getReport(i).getReportSettings(); if (reportSettings == null) { reportSettings = ReportSettings.DEFAULTSETTINGS; } try { PaperSettingProvider setting = (PaperSettingProvider) reportSettings.getPaperSetting().clone(); Margin margin = setting.getMargin(); /* * 偏移量top、left为加,button 、right为减 */ if (offsetMargin != null) { margin.setTop(margin.getTop().add(offsetMargin.getTop())); margin.setLeft(margin.getLeft().add(offsetMargin.getLeft())); margin.setBottom(margin.getBottom().subtract(offsetMargin.getBottom())); margin.setRight(margin.getRight().subtract(offsetMargin.getRight())); } list.add(setting); } catch (CloneNotSupportedException e) { LogKit.error(e.getMessage(), e); break; } } return list; } /** * 选取分页结果对象中可导出的对象,如果没有可导出对象,会返回null。 * * @param reportPage 分页结果对象 * @return 可导出对象 */ public static @Nullable ClippedPageProvider pick(ReportPageProvider reportPage) { if (reportPage == null) { return null; } ClippedPageProvider[] clippers = reportPage.getPages(); if (clippers.length == 1 && clippers[0] != null) { ClippedPageProvider cp = clippers[0]; cp.deriveResolution(Constants.FR_PAINT_RESOLUTION); return cp; } return null; } /** * 单元格是否可打印/导出,典型的如:以html格式显示的单元格,就是不可打印/导出的 * * @param cell 单元格 * @return 单元格内容可打印/导出则返回true,否则返回false */ public static boolean isCellPrintable(CellElement cell) { if (cell == null) { return false; } CellGUIAttr gui = cell.getCellGUIAttr(); return gui == null || gui.isPrintContent(); } }