Browse Source

open

master
pioneer 2 years ago
commit
825dae1b24
  1. 6
      README.md
  2. BIN
      doc/jsd-9684-需求确认书v1.docx
  3. 36
      plugin.xml
  4. 37
      src/main/java/com/fr/plugin/ifhd/LocaleFinder.java
  5. 68
      src/main/java/com/fr/plugin/ifhd/excel/LayerExcelExportApp.java
  6. 39
      src/main/java/com/fr/plugin/ifhd/excel/LayerStreamExportFunctionProcessor.java
  7. 49
      src/main/java/com/fr/plugin/ifhd/excel/StreamExcelExportApp.java
  8. 68
      src/main/java/com/fr/plugin/ifhd/excel/StreamExcelExtensionButton.java
  9. 117
      src/main/java/com/fr/plugin/ifhd/excel/exporter/StreamExcel2007Exporter4Layer.java
  10. 39
      src/main/java/com/fr/plugin/ifhd/excel/exporter/StreamExcelExporter.java
  11. 41
      src/main/java/com/fr/plugin/ifhd/excel/ui/StreamExcelExportToolbarUI.java
  12. 54
      src/main/java/com/fr/plugin/ifhd/export/ExcelPlusExporter.java
  13. 43
      src/main/java/com/fr/plugin/ifhd/export/LargeDataPageExcelPlusExporter.java
  14. 39
      src/main/java/com/fr/plugin/ifhd/export/PageExcel2007PlusExporter.java
  15. 43
      src/main/java/com/fr/plugin/ifhd/export/PageExcelPlusExporter.java
  16. 38
      src/main/java/com/fr/plugin/ifhd/export/PageToSheetExcel2007PlusExporter.java
  17. 35
      src/main/java/com/fr/plugin/ifhd/export/PageToSheetExcelPlusExporter.java
  18. 45
      src/main/java/com/fr/plugin/ifhd/export/StreamExcel2007Exporter4LayerPlus.java
  19. 42
      src/main/java/com/fr/plugin/ifhd/export/StreamExcel2007PlusExporter.java
  20. 46
      src/main/java/com/fr/plugin/ifhd/export/WordOperate.java
  21. 27
      src/main/java/com/fr/plugin/ifhd/export/WordPlusExporter.java
  22. 41
      src/main/java/com/fr/plugin/ifhd/provider/PageExcelExportApp.java
  23. 41
      src/main/java/com/fr/plugin/ifhd/provider/SheetExcelExportApp.java
  24. 41
      src/main/java/com/fr/plugin/ifhd/provider/SimpleExcelExportApp.java
  25. 60
      src/main/java/com/fr/plugin/ifhd/provider/WordExportExtension.java
  26. 178
      src/main/java/com/fr/plugin/ifhd/utils/WaterMarkHandler.java
  27. 138
      src/main/java/com/fr/plugin/ifhd/utils/WordHandler.java
  28. BIN
      src/main/resources/com/fr/plugin/ifhd/excel/images/excel.png
  29. 8
      src/main/resources/com/fr/plugin/ifhd/locale/lang.properties
  30. 8
      src/main/resources/com/fr/plugin/ifhd/locale/lang_en.properties
  31. 8
      src/main/resources/com/fr/plugin/ifhd/locale/lang_zh_CN.properties

6
README.md

@ -0,0 +1,6 @@
# open-JSD-9684
JSD-9684 客户报表添加水印:姓名+手机尾号。需在excel导出将水印带上\
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\
仅作为开发者学习参考使用!禁止用于任何商业用途!\
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。

BIN
doc/jsd-9684-需求确认书v1.docx

Binary file not shown.

36
plugin.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<id>com.fr.plugin.ifhd.watermark</id>
<name><![CDATA[水印功能定制]]></name>
<active>yes</active>
<version>1.0</version>
<env-version>10.0~10.0</env-version>
<jartime>2018-07-31</jartime>
<vendor>fr.open</vendor>
<description><![CDATA[Excel水印功能定制]]></description>
<change-notes><![CDATA[
<p>Excel水印功能定制</p>
<p>集成Excel流式导出支持行式引擎插件功能</p>
]]></change-notes>
<main-package>com.fr.plugin.ifhd</main-package>
<prefer-packages>
<prefer-package>com.fanruan.api</prefer-package>
</prefer-packages>
<extra-core>
<LocaleFinder class="com.fr.plugin.ifhd.LocaleFinder"/>
</extra-core>
<extra-report>
<ExcelExportAppProvider class="com.fr.plugin.ifhd.provider.SimpleExcelExportApp"/>
<ExcelExportAppProvider class="com.fr.plugin.ifhd.provider.SheetExcelExportApp"/>
<ExcelExportAppProvider class="com.fr.plugin.ifhd.provider.PageExcelExportApp"/>
<ExtensionButtonProvider class="com.fr.plugin.ifhd.excel.StreamExcelExtensionButton"/>
<ExcelExportAppProvider class="com.fr.plugin.ifhd.excel.StreamExcelExportApp"/>
<ExcelExportAppProvider class="com.fr.plugin.ifhd.excel.LayerExcelExportApp"/>
</extra-report>
<extra-designer>
<ToolbarItemProvider class="com.fr.plugin.ifhd.excel.ui.StreamExcelExportToolbarUI"/>
</extra-designer>
<function-recorder class="com.fr.plugin.ifhd.LocaleFinder"/>
</plugin>

37
src/main/java/com/fr/plugin/ifhd/LocaleFinder.java

@ -0,0 +1,37 @@
/*
* Copyright (C), 2018-2020
* Project: starter
* FileName: LocaleFinder
* Author: Louis
* Date: 2020/8/31 22:19
*/
package com.fr.plugin.ifhd;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.fun.impl.AbstractLocaleFinder;
/**
* <Function Description><br>
* <LocaleFinder>
*
* @author Louis
* @since 1.0.0
*/
@EnableMetrics
public class LocaleFinder extends AbstractLocaleFinder {
public static final String PLUGIN_ID = "com.fr.plugin.ifhd.watermark";
@Override
@Focus(id = PLUGIN_ID, text = "Plugin-ifhd", source = Original.PLUGIN)
public String find() {
return "com/fr/plugin/ifhd/locale/lang";
}
@Override
public int currentAPILevel() {
return CURRENT_LEVEL;
}
}

68
src/main/java/com/fr/plugin/ifhd/excel/LayerExcelExportApp.java

@ -0,0 +1,68 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: LayerExcelExportApp
* Author: xxx
* Date: 2021/12/3 9:22
*/
package com.fr.plugin.ifhd.excel;
import com.fr.general.DeclareRecordType;
import com.fr.io.collection.ExportCollection;
import com.fr.io.exporter.ExcelExportType;
import com.fr.plugin.ExtraClassManager;
import com.fr.plugin.ifhd.export.StreamExcel2007Exporter4LayerPlus;
import com.fr.report.core.ReportUtils;
import com.fr.report.fun.impl.AbstractExcelExportAppProvider;
import com.fr.stable.ExportConstants;
import com.fr.stable.fun.Authorize;
import com.fr.stable.fun.FunctionProcessor;
import com.fr.web.core.ReportSessionIDInfor;
import com.fr.web.core.utils.ExportUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import static com.fr.plugin.ifhd.LocaleFinder.PLUGIN_ID;
/**
* <Function Description><br>
* <LayerExcelExportApp>
*
* @author xxx
* @since 1.0.0
*/
@Authorize(callSignKey = PLUGIN_ID)
public class LayerExcelExportApp extends AbstractExcelExportAppProvider {
public LayerExcelExportApp() {
}
private static void recordFunction() {
FunctionProcessor var0 = ExtraClassManager.getInstance().getFunctionProcessor();
if (var0 != null) {
var0.recordFunction(LayerStreamExportFunctionProcessor.getInstance());
}
}
public int currentAPILevel() {
return super.currentAPILevel();
}
public String exportType() {
return ExportConstants.TYPE_LARGEDATA_PAGE;
}
public ExportCollection createLargeDataExportCollection(HttpServletRequest var1, HttpServletResponse var2, ReportSessionIDInfor var3, String var4, ExcelExportType var5) {
ExportCollection var6 = ExportCollection.create();
if (var2 != null) {
ExportUtils.setExcel2007Content(var2, var4);
}
StreamExcel2007Exporter4LayerPlus var7 = new StreamExcel2007Exporter4LayerPlus(ReportUtils.getPaperSettingListFromWorkBook(var3.getContextBook()), var5.isPage());
var6.setExporter(var7);
var6.setRecordType(DeclareRecordType.EXPORT_TYPE_EXCEL_ORIGINAL);
recordFunction();
return var6;
}
}

39
src/main/java/com/fr/plugin/ifhd/excel/LayerStreamExportFunctionProcessor.java

@ -0,0 +1,39 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: LayerStreamExportFunctionProcessor
* Author: xxx
* Date: 2021/12/3 9:23
*/
package com.fr.plugin.ifhd.excel;
import com.fr.stable.fun.FunctionHelper;
import com.fr.stable.fun.impl.AbstractFunctionProcessor;
import static com.fr.plugin.ifhd.LocaleFinder.PLUGIN_ID;
/**
* <Function Description><br>
* <LayerStreamExportFunctionProcessor>
*
* @author xxx
* @since 1.0.0
*/
public class LayerStreamExportFunctionProcessor extends AbstractFunctionProcessor {
private static LayerStreamExportFunctionProcessor instance = new LayerStreamExportFunctionProcessor();
public LayerStreamExportFunctionProcessor() {
}
public static LayerStreamExportFunctionProcessor getInstance() {
return instance;
}
public int getId() {
return FunctionHelper.generateFunctionID(PLUGIN_ID);
}
public String getLocaleKey() {
return "Plugin-ifhd_Excel_Stream_Export_Layer";
}
}

49
src/main/java/com/fr/plugin/ifhd/excel/StreamExcelExportApp.java

@ -0,0 +1,49 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: StreamExcelExportApp
* Author: xxx
* Date: 2021/12/3 9:24
*/
package com.fr.plugin.ifhd.excel;
import com.fr.general.DeclareRecordType;
import com.fr.io.collection.ExportCollection;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.ExcelExportType;
import com.fr.plugin.ifhd.excel.exporter.StreamExcelExporter;
import com.fr.report.core.ReportUtils;
import com.fr.report.fun.impl.AbstractExcelExportAppProvider;
import com.fr.stable.ExportConstants;
import com.fr.stable.fun.Authorize;
import com.fr.web.core.ReportSessionIDInfor;
import static com.fr.plugin.ifhd.LocaleFinder.PLUGIN_ID;
/**
* <Function Description><br>
* <StreamExcelExportApp>
*
* @author xxx
* @since 1.0.0
*/
@Authorize(callSignKey = PLUGIN_ID)
public class StreamExcelExportApp extends AbstractExcelExportAppProvider {
public StreamExcelExportApp() {
}
public int currentAPILevel() {
return super.currentAPILevel();
}
public String exportType() {
return ExportConstants.TYPE_STREAM;
}
public AppExporter<Boolean> createAppExporter(ExportCollection var1, ExcelExportType var2, ReportSessionIDInfor var3) {
StreamExcelExporter var4 = new StreamExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(var3.getContextBook()));
var1.setExporter(var4);
var1.setRecordType(DeclareRecordType.EXPORT_TYPE_EXCEL_ORIGINAL);
return var4;
}
}

68
src/main/java/com/fr/plugin/ifhd/excel/StreamExcelExtensionButton.java

@ -0,0 +1,68 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: StreamExcelExtensionButton
* Author: xxx
* Date: 2021/12/3 9:24
*/
package com.fr.plugin.ifhd.excel;
import com.fr.base.IconManager;
import com.fr.form.ui.WebContentUtils;
import com.fr.form.ui.Widget;
import com.fr.general.Inter;
import com.fr.js.JavaScriptImpl;
import com.fr.report.fun.impl.AbstractExtensionButton;
import com.fr.stable.web.Repository;
/**
* <Function Description><br>
* <StreamExcelExtensionButton>
*
* @author xxx
* @since 1.0.0
*/
public class StreamExcelExtensionButton extends AbstractExtensionButton {
public StreamExcelExtensionButton() {
super(Inter.getLocText("Plugin-ifhd_Excel_Stream_Export"), IconManager.EXCEL.getName());
}
public StreamExcelExtensionButton(String var1) {
super(var1);
}
public StreamExcelExtensionButton(String var1, String var2) {
super(var1, var2);
}
public int currentAPILevel() {
return 2;
}
public Class<? extends Widget> classForDirectoryButton() {
return this.getClass();
}
public String getParentDirectory() {
return null;
}
public String getType() {
return "StreamExcelExport.class";
}
public String getRelatedCheckBoxTitle() {
return null;
}
public boolean isSelected() {
return false;
}
public void setSelected(boolean var1) {
}
protected JavaScriptImpl clickAction(Repository var1) {
return new JavaScriptImpl(WebContentUtils.getExcelExportAction(var1, "stream"));
}
}

117
src/main/java/com/fr/plugin/ifhd/excel/exporter/StreamExcel2007Exporter4Layer.java

@ -0,0 +1,117 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: StreamExcel2007Exporter4Layer
* Author: xxx
* Date: 2021/12/3 9:28
*/
package com.fr.plugin.ifhd.excel.exporter;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.io.core.LargeDataExcelExporterReport;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.io.exporter.poi.wrapper.XssfCellWrapper;
import com.fr.io.exporter.poi.wrapper.XssfWorkbookWrapper;
import com.fr.main.workbook.PageRWorkBook;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.PageSetProvider;
import com.fr.page.PaperSettingProvider;
import com.fr.report.report.Report;
import com.fr.report.report.ResultECReport;
import com.fr.report.stable.ReportSettings;
import com.fr.stable.ExportConstants;
import com.fr.stable.FT;
import com.fr.third.v2.org.apache.poi.ss.usermodel.Cell;
import com.fr.third.v2.org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* <Function Description><br>
* <StreamExcel2007Exporter4Layer>
*
* @author xxx
* @since 1.0.0
*/
public class StreamExcel2007Exporter4Layer<T> extends StreamExcel2007Exporter<T> {
private boolean isPage = false;
public StreamExcel2007Exporter4Layer(List<PaperSettingProvider> var1, boolean var2) {
super(var1);
this.isPage = var2;
}
public void export(OutputStream var1, ResultWorkBook var2, boolean var3) throws Exception {
this.defaultXSSFCellStyle = null;
this.hssfFontHash.clear();
this.hssfCellStyleHash.clear();
this.format = null;
SXSSFWorkbook var4 = new SXSSFWorkbook(10000);
ArrayList var5 = new ArrayList();
ArrayList var6 = new ArrayList();
XssfWorkbookWrapper var7 = new XssfWorkbookWrapper(var4);
this.setDefaultFont(var7);
for (int var8 = 0; var8 < var2.getReportCount(); ++var8) {
ResultECReport var9 = (ResultECReport) var2.getResultReport(var8);
if (var9 != null) {
if (var9.getReportSettings() == null) {
var9.setReportSettings(new ReportSettings());
}
var9.getReportSettings().setPageOrder(1);
PaperSettingProvider var10 = this.paperSettingList == null ? null : (PaperSettingProvider) this.paperSettingList.get(var8);
PageSetProvider var11 = var9.generateReportPageSet(var10);
var11 = this.isPage ? var11.traverse4Export() : var11.traverse4SimpleExport();
FT var12 = new FT(0, 0);
while (var12.to != -1) {
var12.from = var12.to;
PageRWorkBook var13 = new PageRWorkBook();
String var14 = var2.getReportName(var8);
var13.addReport(var14, new LargeDataExcelExporterReport(var9, var11, var12, false, ExportConstants.MAX_ROWS_2007));
this.exportBook(var13, var7, var5, var6, new ArrayList(), var3);
FRLogger.getLogger().info(var14 + Inter.getLocText("Plugin-ifhd_Engine_Finish_Export"));
}
if (!var3 && !var11.isPageCached()) {
var11.release();
}
}
}
this.dealWithFormula(var5, var6);
var4.write(var1);
var1.flush();
var4.dispose();
}
private void dealWithFormula(List<Cell> var1, List<String> var2) {
int var3 = 0;
for (int var4 = var1.size(); var3 < var4; ++var3) {
Cell var5 = (Cell) var1.get(var3);
this.dealWithFormula(new XssfCellWrapper(var5), (String) var2.get(var3));
}
}
protected void exportBook(ResultWorkBook var1, POIWorkbookAction var2, List var3, List<String> var4, List<Report> var5, boolean var6) throws Exception {
int var7;
Report var8;
for (var7 = 0; var7 < var1.getReportCount(); ++var7) {
var8 = var1.getReport(var7);
var5.add(var8);
}
for (var7 = 0; var7 < var1.getReportCount(); ++var7) {
var8 = (Report) var5.get(var7);
this.innerExportReport(var8, var1.getReportExportAttr(), var1.getReportName(var7), (SXSSFWorkbook) var2.getWorkbook(), var3, var4, var7);
}
}
}

39
src/main/java/com/fr/plugin/ifhd/excel/exporter/StreamExcelExporter.java

@ -0,0 +1,39 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: StreamExcelExporter
* Author: xxx
* Date: 2021/12/3 9:27
*/
package com.fr.plugin.ifhd.excel.exporter;
import com.fr.general.FRLogger;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.ExcelExporter;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.PaperSettingProvider;
import com.fr.plugin.ifhd.export.StreamExcel2007PlusExporter;
import java.io.OutputStream;
import java.util.List;
/**
* <Function Description><br>
* <StreamExcelExporter>
*
* @author xxx
* @since 1.0.0
*/
public class StreamExcelExporter extends ExcelExporter {
public StreamExcelExporter(List<PaperSettingProvider> var1) {
super(var1);
}
protected void exportFor2003(OutputStream var1, ResultWorkBook var2, boolean var3) throws Exception {
FRLogger.getLogger().error("StreamExcelExporter for 2003 is not supported");
}
protected AppExporter getExporterFor2007(List<PaperSettingProvider> var1) throws ClassNotFoundException {
return new StreamExcel2007PlusExporter(var1);
}
}

41
src/main/java/com/fr/plugin/ifhd/excel/ui/StreamExcelExportToolbarUI.java

@ -0,0 +1,41 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: StreamExcelExportToolbarUI
* Author: xxx
* Date: 2021/12/3 9:26
*/
package com.fr.plugin.ifhd.excel.ui;
import com.fanruan.api.design.DesignKit;
import com.fr.design.fun.impl.AbstractToolbarItem;
import com.fr.form.ui.Widget;
import com.fr.plugin.ifhd.excel.StreamExcelExtensionButton;
/**
* <Function Description><br>
* <StreamExcelExportToolbarUI>
*
* @author xxx
* @since 1.0.0
*/
public class StreamExcelExportToolbarUI extends AbstractToolbarItem {
public StreamExcelExportToolbarUI() {
}
public int currentAPILevel() {
return 1;
}
public Class<? extends Widget> classForWidget() {
return StreamExcelExtensionButton.class;
}
public String iconPathForWidget() {
return "/com/fr/plugin/ifhd/excel/images/excel.png";
}
public String nameForWidget() {
return DesignKit.i18nText("Plugin-ifhd_Excel_Stream_Export");
}
}

54
src/main/java/com/fr/plugin/ifhd/export/ExcelPlusExporter.java

@ -0,0 +1,54 @@
/**
* Copyright (C), 2015-2020
* FileName: ExcelPlusExporter
* Author: Louis
* Date: 2020/3/17 11:50
* Description: ExcelPlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.attr.ReportExportAttr;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.ExcelExporter;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.PaperSettingProvider;
import com.fr.report.report.Report;
import com.fr.report.report.ResultECReport;
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.util.List;
/**
* Function Description<br>
* ExcelPlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class ExcelPlusExporter extends ExcelExporter {
public ExcelPlusExporter() {
}
public ExcelPlusExporter(List list) {
super(list);
}
@Override
protected AppExporter getExporterFor2007(List<PaperSettingProvider> list) {
return new StreamExcel2007PlusExporter(list);
}
@Override
protected void innerExportReports(ResultECReport resultECReport, ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List<String> list1, List<Report> list2, int i) {
super.innerExportReports(resultECReport, resultWorkBook, poiWorkbookAction, list, list1, list2, i);
}
@Override
protected void innerExportReport(Report report, ReportExportAttr reportExportAttr, String s, HSSFWorkbook hssfWorkbook, List list, List<String> list1, int i) throws Exception {
super.innerExportReport(report, reportExportAttr, s, hssfWorkbook, list, list1, i);
}
}

43
src/main/java/com/fr/plugin/ifhd/export/LargeDataPageExcelPlusExporter.java

@ -0,0 +1,43 @@
/**
* Copyright (C), 2015-2020
* FileName: LargeDataPageExcelPlusExporter
* Author: Louis
* Date: 2020/3/23 17:01
* Description: LargeDataPageExcelPlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.attr.ReportExportAttr;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.LargeDataPageExcelExporter;
import com.fr.page.PaperSettingProvider;
import com.fr.report.report.Report;
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.util.List;
/**
* Function Description<br>
* LargeDataPageExcelPlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class LargeDataPageExcelPlusExporter extends LargeDataPageExcelExporter {
public LargeDataPageExcelPlusExporter(List list, boolean b) {
super(list, b);
}
@Override
protected AppExporter getExporterFor2007(List<PaperSettingProvider> list) {
return new StreamExcel2007PlusExporter(list);
}
@Override
protected void innerExportReport(Report report, ReportExportAttr reportExportAttr, String s, HSSFWorkbook hssfWorkbook, List list, List<String> list1, int i) throws Exception {
super.innerExportReport(report, reportExportAttr, s, hssfWorkbook, list, list1, i);
}
}

39
src/main/java/com/fr/plugin/ifhd/export/PageExcel2007PlusExporter.java

@ -0,0 +1,39 @@
/**
* Copyright (C), 2015-2020
* FileName: PageExcel2007PlusExporter
* Author: Louis
* Date: 2020/3/22 20:39
* Description: PageExcel2007PlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.exporter.PageExcel2007Exporter;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.PaperSettingProvider;
import com.fr.plugin.ifhd.utils.WaterMarkHandler;
import com.fr.report.report.Report;
import java.util.List;
/**
* Function Description<br>
* PageExcel2007PlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class PageExcel2007PlusExporter<T> extends PageExcel2007Exporter<T> {
public PageExcel2007PlusExporter(List<PaperSettingProvider> list) {
super(list);
}
@Override
protected void exportBook(ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List<String> list1, List<Report> list2, boolean b) throws Exception {
super.exportBook(resultWorkBook, poiWorkbookAction, list, list1, list2, b);
WaterMarkHandler.putWaterRemarkToExcel(resultWorkBook, poiWorkbookAction);
}
}

43
src/main/java/com/fr/plugin/ifhd/export/PageExcelPlusExporter.java

@ -0,0 +1,43 @@
/**
* Copyright (C), 2015-2020
* FileName: PageExcelPlusExporter
* Author: Louis
* Date: 2020/3/22 20:36
* Description: PageExcelPlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.attr.ReportExportAttr;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.PageExcelExporter;
import com.fr.page.PaperSettingProvider;
import com.fr.report.report.Report;
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.util.List;
/**
* Function Description<br>
* PageExcelPlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class PageExcelPlusExporter extends PageExcelExporter {
public PageExcelPlusExporter(List list) {
super(list);
}
@Override
protected AppExporter getExporterFor2007(List<PaperSettingProvider> list) throws ClassNotFoundException {
return new PageExcel2007PlusExporter(list);
}
@Override
protected void innerExportReport(Report report, ReportExportAttr reportExportAttr, String s, HSSFWorkbook hssfWorkbook, List list, List<String> list1, int i) throws Exception {
super.innerExportReport(report, reportExportAttr, s, hssfWorkbook, list, list1, i);
}
}

38
src/main/java/com/fr/plugin/ifhd/export/PageToSheetExcel2007PlusExporter.java

@ -0,0 +1,38 @@
/**
* Copyright (C), 2015-2020
* FileName: PageToSheetExcel2007PlusExporter
* Author: Louis
* Date: 2020/3/22 15:12
* Description: PageToSheetExcel2007PlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.exporter.PageToSheetExcel2007Exporter;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.plugin.ifhd.utils.WaterMarkHandler;
import com.fr.report.report.Report;
import java.util.List;
/**
* Function Description<br>
* PageToSheetExcel2007PlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class PageToSheetExcel2007PlusExporter<T> extends PageToSheetExcel2007Exporter<T> {
public PageToSheetExcel2007PlusExporter(List list) {
super(list);
}
@Override
protected void exportBook(ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List<String> list1, List<Report> list2, boolean b) throws Exception {
super.exportBook(resultWorkBook, poiWorkbookAction, list, list1, list2, b);
WaterMarkHandler.putWaterRemarkToExcel(resultWorkBook, poiWorkbookAction);
}
}

35
src/main/java/com/fr/plugin/ifhd/export/PageToSheetExcelPlusExporter.java

@ -0,0 +1,35 @@
/**
* Copyright (C), 2015-2020
* FileName: PageToSheetExcelPlusExporter
* Author: Louis
* Date: 2020/3/22 15:07
* Description: PageToSheetExcelPlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.PageToSheetExcelExporter;
import com.fr.page.PaperSettingProvider;
import java.util.List;
/**
* Function Description<br>
* PageToSheetExcelPlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class PageToSheetExcelPlusExporter extends PageToSheetExcelExporter {
public PageToSheetExcelPlusExporter(List<PaperSettingProvider> list) {
super(list);
}
@Override
protected AppExporter getExporterFor2007(List<PaperSettingProvider> list) {
return new PageToSheetExcel2007PlusExporter(list);
}
}

45
src/main/java/com/fr/plugin/ifhd/export/StreamExcel2007Exporter4LayerPlus.java

@ -0,0 +1,45 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: StreamExcel2007Exporter4LayerPlus
* Author: Louis
* Date: 2021/12/3 11:55
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.PaperSettingProvider;
import com.fr.plugin.ifhd.excel.exporter.StreamExcel2007Exporter4Layer;
import com.fr.plugin.ifhd.utils.WaterMarkHandler;
import com.fr.report.report.Report;
import java.io.OutputStream;
import java.util.List;
/**
* <Function Description><br>
* <StreamExcel2007Exporter4LayerPlus>
*
* @author Louis
* @since 1.0.0
*/
public class StreamExcel2007Exporter4LayerPlus<T> extends StreamExcel2007Exporter4Layer<T> {
private ResultWorkBook resultWorkBook;
public StreamExcel2007Exporter4LayerPlus(List<PaperSettingProvider> paperSettingProviders, boolean b) {
super(paperSettingProviders, b);
}
@Override
public void export(OutputStream outputStream, ResultWorkBook resultWorkBook, boolean b) throws Exception {
this.resultWorkBook = resultWorkBook;
super.export(outputStream, resultWorkBook, b);
}
@Override
protected void exportBook(ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List<String> list1, List<Report> reports, boolean b) throws Exception {
super.exportBook(resultWorkBook, poiWorkbookAction, list, list1, reports, b);
WaterMarkHandler.putWaterRemarkToExcel(this.resultWorkBook, poiWorkbookAction);
}
}

42
src/main/java/com/fr/plugin/ifhd/export/StreamExcel2007PlusExporter.java

@ -0,0 +1,42 @@
/**
* Copyright (C), 2015-2020
* FileName: StreamExcel2007PlusExporter
* Author: Louis
* Date: 2020/3/17 16:18
* Description: StreamExcel2007PlusExporter
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.page.PaperSettingProvider;
import com.fr.plugin.ifhd.utils.WaterMarkHandler;
import com.fr.report.report.Report;
import java.util.List;
/**
* Function Description<br>
* StreamExcel2007PlusExporter
*
* @author Louis
* @since 1.0.0
*/
public class StreamExcel2007PlusExporter<T> extends StreamExcel2007Exporter<T> {
public StreamExcel2007PlusExporter() {
}
public StreamExcel2007PlusExporter(List<PaperSettingProvider> list) {
super(list);
}
@Override
protected void exportBook(ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction, List list, List<String> list1, List<Report> list2, boolean b) throws Exception {
super.exportBook(resultWorkBook, poiWorkbookAction, list, list1, list2, b);
WaterMarkHandler.putWaterRemarkToExcel(resultWorkBook, poiWorkbookAction);
}
}

46
src/main/java/com/fr/plugin/ifhd/export/WordOperate.java

@ -0,0 +1,46 @@
/*
* Copyright (C), 2018-2022
* Project: starter
* FileName: WordOperate
* Author: Louis
* Date: 2022/2/23 15:26
*/
package com.fr.plugin.ifhd.export;
import com.fr.general.ReportDeclareRecordType;
import com.fr.io.collection.ExportCollection;
import com.fr.io.exporter.ExportChecker;
import com.fr.io.exporter.WordExportChecker;
import com.fr.stable.web.SessionProvider;
import com.fr.web.core.reserve.DefaultOperate;
import com.fr.web.core.utils.ExportUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* <Function Description><br>
* <WordOperate>
*
* @author Louis
* @since 1.0.0
*/
public class WordOperate extends DefaultOperate {
@Override
public void setContent(HttpServletRequest request, HttpServletResponse response, String fileName, boolean isEmbed) {
ExportUtils.setWordConetent(response, fileName);
}
@Override
public ExportCollection newExportCollection(HttpServletRequest request, HttpServletResponse response, SessionProvider sessionIDInfor, String fileName) {
ExportCollection exportCollection = ExportCollection.create();
exportCollection.setExporter(new WordPlusExporter());
exportCollection.setRecordType(ReportDeclareRecordType.EXPORT_TYPE_WORD);
return exportCollection;
}
@Override
public ExportChecker newExportChecker(HttpServletRequest request) {
return new WordExportChecker();
}
}

27
src/main/java/com/fr/plugin/ifhd/export/WordPlusExporter.java

@ -0,0 +1,27 @@
/*
* Copyright (C), 2018-2022
* Project: starter
* FileName: WordPlusExporter
* Author: Louis
* Date: 2022/2/23 15:38
*/
package com.fr.plugin.ifhd.export;
import com.fr.io.exporter.WordExporter;
import com.fr.main.workbook.ResultWorkBook;
import java.io.OutputStream;
/**
* <Function Description><br>
* <WordPlusExporter>
*
* @author Louis
* @since 1.0.0
*/
public class WordPlusExporter extends WordExporter {
@Override
public void export(OutputStream outputStream, ResultWorkBook resultWorkBook) throws Exception {
super.export(outputStream, resultWorkBook);
}
}

41
src/main/java/com/fr/plugin/ifhd/provider/PageExcelExportApp.java

@ -0,0 +1,41 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: PageExcelExportApp
* Author: Louis
* Date: 2021/12/6 9:07
*/
package com.fr.plugin.ifhd.provider;
import com.fr.general.ReportDeclareRecordType;
import com.fr.io.collection.ExportCollection;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.ExcelExportType;
import com.fr.plugin.ifhd.export.PageExcelPlusExporter;
import com.fr.report.core.ReportUtils;
import com.fr.report.fun.impl.AbstractExcelExportAppProvider;
import com.fr.stable.ExportConstants;
import com.fr.stable.web.SessionProvider;
/**
* <Function Description><br>
* <分页导出PageExcelExportApp>
*
* @author Louis
* @since 1.0.0
*/
public class PageExcelExportApp extends AbstractExcelExportAppProvider {
@Override
public String exportType() {
return ExportConstants.TYPE_PAGE;
}
@Override
public AppExporter<Boolean> newAppExporter(ExportCollection collection, ExcelExportType exportType, SessionProvider sessionIDInfor) {
AppExporter<Boolean> exporter = new PageExcelPlusExporter(ReportUtils.getPaperSettingListFromWorkBook(sessionIDInfor.getOriginalObject()));
collection.setExporter(exporter);
collection.setRecordType(ReportDeclareRecordType.EXPORT_TYPE_EXCEL_PAGE);
return exporter;
}
}

41
src/main/java/com/fr/plugin/ifhd/provider/SheetExcelExportApp.java

@ -0,0 +1,41 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: SheetExcelExportApp
* Author: Louis
* Date: 2021/12/6 8:44
*/
package com.fr.plugin.ifhd.provider;
import com.fr.general.ReportDeclareRecordType;
import com.fr.io.collection.ExportCollection;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.ExcelExportType;
import com.fr.plugin.ifhd.export.PageToSheetExcelPlusExporter;
import com.fr.report.core.ReportUtils;
import com.fr.report.fun.impl.AbstractExcelExportAppProvider;
import com.fr.stable.ExportConstants;
import com.fr.stable.web.SessionProvider;
/**
* <Function Description><br>
* <分页分sheet导出SheetExcelExportApp>
*
* @author Louis
* @since 1.0.0
*/
public class SheetExcelExportApp extends AbstractExcelExportAppProvider {
@Override
public String exportType() {
return ExportConstants.TYPE_PAGETOSHETT;
}
@Override
public AppExporter<Boolean> newAppExporter(ExportCollection collection, ExcelExportType exportType, SessionProvider sessionIDInfor) {
AppExporter<Boolean> exporter = new PageToSheetExcelPlusExporter(ReportUtils.getPaperSettingListFromWorkBook(sessionIDInfor.getOriginalObject()));
collection.setExporter(exporter);
collection.setRecordType(ReportDeclareRecordType.EXPORT_TYPE_EXCEL_PAGESHEET);
return exporter;
}
}

41
src/main/java/com/fr/plugin/ifhd/provider/SimpleExcelExportApp.java

@ -0,0 +1,41 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: SimpleExcelExportApp
* Author: Louis
* Date: 2021/12/6 8:27
*/
package com.fr.plugin.ifhd.provider;
import com.fr.general.ReportDeclareRecordType;
import com.fr.io.collection.ExportCollection;
import com.fr.io.exporter.AppExporter;
import com.fr.io.exporter.ExcelExportType;
import com.fr.plugin.ifhd.export.ExcelPlusExporter;
import com.fr.report.core.ReportUtils;
import com.fr.report.fun.impl.AbstractExcelExportAppProvider;
import com.fr.stable.ExportConstants;
import com.fr.stable.web.SessionProvider;
/**
* <Function Description><br>
* <原样导出SimpleExcelExportApp>
*
* @author Louis
* @since 1.0.0
*/
public class SimpleExcelExportApp extends AbstractExcelExportAppProvider {
@Override
public String exportType() {
return ExportConstants.TYPE_SIMPLE;
}
@Override
public AppExporter<Boolean> newAppExporter(ExportCollection collection, ExcelExportType exportType, SessionProvider sessionIDInfor) {
AppExporter<Boolean> exporter = new ExcelPlusExporter(ReportUtils.getPaperSettingListFromWorkBook(sessionIDInfor.getOriginalObject()));
collection.setExporter(exporter);
collection.setRecordType(ReportDeclareRecordType.EXPORT_TYPE_EXCEL_ORIGINAL);
return exporter;
}
}

60
src/main/java/com/fr/plugin/ifhd/provider/WordExportExtension.java

@ -0,0 +1,60 @@
/*
* Copyright (C), 2018-2022
* Project: starter
* FileName: WordExportExtension
* Author: Louis
* Date: 2022/2/23 15:17
*/
package com.fr.plugin.ifhd.provider;
import com.fanruan.api.log.LogKit;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.io.collection.ExportCollection;
import com.fr.plugin.context.PluginContexts;
import com.fr.plugin.ifhd.export.WordOperate;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.fun.Authorize;
import com.fr.web.core.ReportSessionIDInfor;
import com.fr.web.core.reserve.DefaultExportExtension;
import com.fr.web.core.reserve.Operate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import static com.fr.plugin.ifhd.LocaleFinder.PLUGIN_ID;
/**
* <Function Description><br>
* <WordExportExtension>
*
* @author Louis
* @since 1.0.0
*/
@EnableMetrics
@Authorize(callSignKey = PLUGIN_ID)
public class WordExportExtension extends DefaultExportExtension {
private static final String FORMAT_WORD = "word";
private static final Map<String, Operate> OPERATE_MAP;
static {
OPERATE_MAP = new HashMap<String, Operate>();
// 导出类型参考com.fr.web.core.reserve.ExportFactory
OPERATE_MAP.put(FORMAT_WORD, new WordOperate());
}
@Override
@Focus(id = PLUGIN_ID, text = "Plugin-ifhd", source = Original.PLUGIN)
public ExportCollection createCollection(HttpServletRequest req, HttpServletResponse res, ReportSessionIDInfor reportSessionIDInfor, String format, String fileName, boolean isEmbed) throws Exception {
LogKit.info("ifhd-WordExportExtension-createCollection-format:{}", format);
Operate operate = OPERATE_MAP.get(format.toLowerCase());
if (operate != null && PluginContexts.currentContext().isAvailable()) {
operate.setContent(req, res, reportSessionIDInfor, fileName, isEmbed);
return operate.newExportCollection(req, res, reportSessionIDInfor, fileName);
}
return super.createCollection(req, res, reportSessionIDInfor, format, fileName, isEmbed);
}
}

178
src/main/java/com/fr/plugin/ifhd/utils/WaterMarkHandler.java

@ -0,0 +1,178 @@
/**
* Copyright (C), 2015-2021
* FileName: WaterMarkHandler
* Author: Louis
* Date: 2020/3/16 21:55
* Description: WaterMarkHandler
* History:
* <author> <time> <version> <desc>
*/
package com.fr.plugin.ifhd.utils;
import com.fanruan.api.log.LogKit;
import com.fr.base.iofile.attr.WatermarkAttr;
import com.fr.io.exporter.poi.wrapper.POIWorkbookAction;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.plugin.context.PluginContexts;
import com.fr.report.core.ReportUtils;
import com.fr.third.v2.org.apache.poi.ss.usermodel.Workbook;
import com.fr.third.v2.org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFRelation;
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFSheet;
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class WaterMarkHandler {
private final String WATER_MARK;
public WaterMarkHandler(String water_mark) {
WATER_MARK = water_mark;
}
public static ByteArrayOutputStream createWaterMark(WatermarkAttr watermarkAttr) throws IOException {
Color color = new Color(watermarkAttr.getColor().getRed(), watermarkAttr.getColor().getGreen(), watermarkAttr.getColor().getBlue(), 100);
int width = 300;
int height = 150;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取bufferedImage对象
String fontType = "仿宋";
int fontStyle = Font.BOLD;
int fontSize = watermarkAttr.getFontSize();
Font font = new Font(fontType, fontStyle, fontSize);
Graphics2D g2d = image.createGraphics(); // 获取Graphics2d对象
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
g2d.setColor(color); //设置字体颜色和透明度,最后一个参数为透明度
g2d.setStroke(new BasicStroke(1)); // 设置字体
g2d.setFont(font); // 设置字体类型 加粗 大小
g2d.rotate(-0.3, (double) image.getWidth() / 2, (double) image.getHeight() / 2);//设置倾斜度
FontRenderContext context = g2d.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(watermarkAttr.getText(), context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
// 写入水印文字原定高度过小,所以累计写水印,增加高度
String[] info = watermarkAttr.getText().split("\\;");
if (info.length > 0) {
for (int i = 0; i < info.length; i++) {
String s = info[i];
g2d.drawString(s, 1 + (i * 40), (int) baseY + (i * 25));
}
} else {
g2d.drawString(watermarkAttr.getText(), 0, (int) baseY);
}
// 设置透明度
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 释放对象
g2d.dispose();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
return os;
}
/**
* 为Excel打上水印工具函数
*
* @param sheet excel sheet
* @param bytes 水印图片字节数组
*/
public static void putWaterRemarkToExcel(XSSFSheet sheet, byte[] bytes) {
//add relation from sheet to the picture data
XSSFWorkbook workbook = sheet.getWorkbook();
int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
String rID = sheet.addRelation(null, XSSFRelation.IMAGES, workbook.getAllPictures().get(pictureIdx))
.getRelationship().getId();
//set background picture to sheet
sheet.getCTWorksheet().addNewPicture().setId(rID);
}
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\aa.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
WatermarkAttr watermarkAttr = new WatermarkAttr();
watermarkAttr.setText("内部信息,严禁外传;2021-09-14;曲君阳");
watermarkAttr.setFontSize(16);
watermarkAttr.setColor(new Color(0, 0, 0, 100));
try (ByteArrayOutputStream byteArrayOutputStream = WaterMarkHandler.createWaterMark(watermarkAttr)) {
int pictureIdx = workbook.addPicture(byteArrayOutputStream.toByteArray(), Workbook.PICTURE_TYPE_PNG);
//add relation from sheet to the picture data
String rID = sheet.addRelation(null, XSSFRelation.IMAGES, workbook.getAllPictures().get(pictureIdx))
.getRelationship().getId();
//set background picture to sheet
sheet.getCTWorksheet().addNewPicture().setId(rID);
workbook.write(fileOutputStream);
}
}
public static void setWartMark(XSSFWorkbook workbook, XSSFSheet sheet, WatermarkAttr wartInfo) {
try (ByteArrayOutputStream byteArrayOutputStream = WaterMarkHandler.createWaterMark(wartInfo)) {
int pictureIdx = workbook.addPicture(byteArrayOutputStream.toByteArray(), Workbook.PICTURE_TYPE_PNG);
//add relation from sheet to the picture data
String rID = sheet.addRelation(null, XSSFRelation.IMAGES, workbook.getAllPictures().get(pictureIdx))
.getRelationship().getId();
//set background picture to sheet
sheet.getCTWorksheet().addNewPicture().setId(rID);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 设定水印图片Idx
*
* @param resultWorkBook
* @param poiWorkbookAction
* @return
*/
private static int getPictureIdx(ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction) {
WatermarkAttr watermarkAttr = ReportUtils.getWatermarkAttrFromTemplate(resultWorkBook);
if (watermarkAttr == null || watermarkAttr.isEmpty()) {
return 0;
}
try {
LogKit.info("ifhd-WaterMarkHandler-watermarkAttr:{}", watermarkAttr.getText());
ByteArrayOutputStream byteArrayOutputStream = createWaterMark(watermarkAttr);
return poiWorkbookAction.addPicture(byteArrayOutputStream.toByteArray(), Workbook.PICTURE_TYPE_PNG);
} catch (IOException e) {
LogKit.error(e.getMessage(), e);
return 0;
}
}
/**
* 关联sheet和水印图片
*
* @param sxssfWorkbook
*/
private static void sheetAddPicture(SXSSFWorkbook sxssfWorkbook, int pictureIdx) {
if (!PluginContexts.currentContext().isAvailable()) {
return;
}
XSSFSheet xssfSheet;
String rID;
XSSFWorkbook xssfWorkbook = sxssfWorkbook.getXSSFWorkbook();
for (int j = 0; j < xssfWorkbook.getNumberOfSheets(); j++) {
xssfSheet = xssfWorkbook.getSheetAt(j);
rID = xssfSheet.addRelation(null, XSSFRelation.IMAGES, xssfWorkbook.getAllPictures().get(pictureIdx))
.getRelationship().getId();
xssfSheet.getCTWorksheet().addNewPicture().setId(rID);
}
}
public static void putWaterRemarkToExcel(ResultWorkBook resultWorkBook, POIWorkbookAction poiWorkbookAction) {
int pictureIdx = getPictureIdx(resultWorkBook, poiWorkbookAction);
sheetAddPicture((SXSSFWorkbook) poiWorkbookAction.getWorkbook(), pictureIdx);
}
}

138
src/main/java/com/fr/plugin/ifhd/utils/WordHandler.java

@ -0,0 +1,138 @@
/*
* Copyright (C), 2018-2022
* Project: starter
* FileName: WordHandler
* Author: Louis
* Date: 2022/2/23 21:47
*/
package com.fr.plugin.ifhd.utils;
import com.fanruan.api.log.LogKit;
import com.fr.third.org.apache.commons.io.FileUtils;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.xmlbeans.XmlObject;
import javax.xml.namespace.QName;
import java.io.*;
import java.util.regex.Pattern;
/**
* <Function Description><br>
* <WordHandler>
*
* @author Louis
* @since 1.0.0
*/
public class WordHandler {
public WordHandler() {
}
public static void main(String[] args) {
try {
String inputSrc = "E:\\GettingStarted.doc";
String outputSrc = "E:\\test_temp.docx";
File file = new File(inputSrc);
byte[] bytes = FileUtils.readFileToByteArray(file);
addWordWaterMark(bytes, outputSrc, "内部资料 严禁外传");
// String inputSrc2 = "E:\\test.doc";
// String outputSrc2 = "E:\\test_temp.doc";
// File file2 = new File(inputSrc2);
// byte[] bytes2 = FileUtils.readFileToByteArray(file2);
// addWordWaterMark2003(bytes2, outputSrc2, "内部资料 严禁外传");
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
}
}
/**
* word文件添加文字水印
*
* @param fileData 原始文件字节数组
* @param outputSrc 文件输出路径
* @param waterMarkName 水印内容
*/
// private static void addWordWaterMark2003(byte[] fileData, String outputSrc, String waterMarkName) throws Exception {
// InputStream input = new ByteArrayInputStream(fileData);
// HWPFDocument doc = new HWPFDocument(input);
// XWPFHeaderFooterPolicy headerFooterPolicy = doc.createHeaderFooterPolicy();
// //添加文字水印
// headerFooterPolicy.createWatermark(waterMarkName);
// HWPFHeader header = headerFooterPolicy.getHeader(XWPFHeaderFooterPolicy.DEFAULT);
// XWPFParagraph paragraph = header.getParagraphArray(0);
// paragraph.getCTP().newCursor();
// XmlObject[] xmlobjects = paragraph.getCTP().getRArray(0).getPictArray(0).selectChildren(new QName("urn:schemas-microsoft-com:vml", "shape"));
// if (xmlobjects.length > 0) {
// com.microsoft.schemas.vml.CTShape ctshape = (com.microsoft.schemas.vml.CTShape) xmlobjects[0];
// //设置水印颜色
// ctshape.setFillcolor("#828282");
// //修改水印样式
// ctshape.setStyle(getWaterMarkStyle(ctshape.getStyle(), 23) + ";rotation:315");
// }
// ByteArrayOutputStream out = new ByteArrayOutputStream();
// try {
// doc.write(out);
// } finally {
// out.close();
// }
// out.writeTo(new BufferedOutputStream(new FileOutputStream(outputSrc)));
// }
/**
* word文件添加文字水印
*
* @param fileData 原始文件字节数组
* @param outputSrc 文件输出路径
* @param waterMarkName 水印内容
*/
private static void addWordWaterMark(byte[] fileData, String outputSrc, String waterMarkName) throws Exception {
InputStream input = new ByteArrayInputStream(fileData);
XWPFDocument doc = new XWPFDocument(input);
XWPFHeaderFooterPolicy headerFooterPolicy = doc.createHeaderFooterPolicy();
//添加文字水印
headerFooterPolicy.createWatermark(waterMarkName);
XWPFHeader header = headerFooterPolicy.getHeader(XWPFHeaderFooterPolicy.DEFAULT);
XWPFParagraph paragraph = header.getParagraphArray(0);
paragraph.getCTP().newCursor();
XmlObject[] xmlobjects = paragraph.getCTP().getRArray(0).getPictArray(0).selectChildren(new QName("urn:schemas-microsoft-com:vml", "shape"));
if (xmlobjects.length > 0) {
com.microsoft.schemas.vml.CTShape ctshape = (com.microsoft.schemas.vml.CTShape) xmlobjects[0];
//设置水印颜色
ctshape.setFillcolor("#828282");
//修改水印样式
ctshape.setStyle(getWaterMarkStyle(ctshape.getStyle(), 23) + ";rotation:315");
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
doc.write(out);
} finally {
out.close();
}
out.writeTo(new BufferedOutputStream(new FileOutputStream(outputSrc)));
}
/**
* 设置水印格式
* word
*
* @param styleStr
* @param height
* @return
*/
public static String getWaterMarkStyle(String styleStr, double height) {
Pattern p = Pattern.compile(";");
String[] strs = p.split(styleStr);
for (String str : strs) {
if (str.startsWith("height:")) {
String heightStr = "height:" + height + "pt";
styleStr = styleStr.replace(str, heightStr);
break;
}
}
return styleStr;
}
}

BIN
src/main/resources/com/fr/plugin/ifhd/excel/images/excel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

8
src/main/resources/com/fr/plugin/ifhd/locale/lang.properties

@ -0,0 +1,8 @@
Plugin-ifhd=Watermark Plugin
Plugin-ifhd_Group=Watermark Plugin
Plugin-ifhd_Config_UriBase=Uri Base
Plugin-ifhd_Config_UriBase_Description=Uri Base
Plugin-ifhd_Licence_Expired=Watermark Plugin Licence Expired
Plugin-ifhd_Engine_Finish_Export=Has been exported
Plugin-ifhd_Excel_Stream_Export=Excel streaming export
Plugin-ifhd_Excel_Stream_Export_Layer=Streaming export supports line engine

8
src/main/resources/com/fr/plugin/ifhd/locale/lang_en.properties

@ -0,0 +1,8 @@
Plugin-ifhd=Watermark Plugin
Plugin-ifhd_Group=Watermark Plugin
Plugin-ifhd_Config_UriBase=Uri Base
Plugin-ifhd_Config_UriBase_Description=Uri Base
Plugin-ifhd_Licence_Expired=Watermark Plugin Licence Expired
Plugin-ifhd_Engine_Finish_Export=Has been exported
Plugin-ifhd_Excel_Stream_Export=Excel streaming export
Plugin-ifhd_Excel_Stream_Export_Layer=Streaming export supports line engine

8
src/main/resources/com/fr/plugin/ifhd/locale/lang_zh_CN.properties

@ -0,0 +1,8 @@
Plugin-ifhd=\u6C34\u5370\u63D2\u4EF6
Plugin-ifhd_Group=\u6C34\u5370\u63D2\u4EF6
Plugin-ifhd_Config_UriBase=jwt\u6821\u9A8C\u63A5\u53E3\u5730\u5740
Plugin-ifhd_Config_UriBase_Description=jwt\u6821\u9A8C\u63A5\u53E3\u5730\u5740
Plugin-ifhd_Licence_Expired=\u6C34\u5370\u63D2\u4EF6\u8BB8\u53EF\u8FC7\u671F
Plugin-ifhd_Engine_Finish_Export=\u5DF2\u7ECF\u5BFC\u51FA\u7ED3\u675F
Plugin-ifhd_Excel_Stream_Export=Excel\u6D41\u5F0F\u5BFC\u51FA
Plugin-ifhd_Excel_Stream_Export_Layer=\u6D41\u5F0F\u5BFC\u51FA\u652F\u6301\u884C\u5F0F\u5F15\u64CE
Loading…
Cancel
Save