diff --git a/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java b/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java index 8520520..30df661 100644 --- a/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java +++ b/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java @@ -9,4 +9,6 @@ import org.springframework.stereotype.Component; @Component public class ApiHostProperty { private String dataTool; + + private String stirlingPdf; // pdf 处理相关 } diff --git a/src/main/java/mjkf/xinke/main/controller/PublicController.java b/src/main/java/mjkf/xinke/main/controller/PublicController.java index c8e5de6..79563f4 100644 --- a/src/main/java/mjkf/xinke/main/controller/PublicController.java +++ b/src/main/java/mjkf/xinke/main/controller/PublicController.java @@ -1,5 +1,6 @@ package mjkf.xinke.main.controller; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.URLUtil; import com.alibaba.excel.EasyExcel; @@ -11,14 +12,15 @@ import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.Data; -import mjkf.xinke.dev.modular.file.entity.DevFile; import mjkf.xinke.dev.modular.file.service.DevFileService; import mjkf.xinke.main.common.http.FuHttpResponse; import mjkf.xinke.main.constant.PricePublishStatus; import mjkf.xinke.main.constant.PricePublishType; +import mjkf.xinke.main.handler.CustomSheetWriteHandler; import mjkf.xinke.main.model.db.PricePublish; import mjkf.xinke.main.model.vo.PublicResponse; import mjkf.xinke.main.model.vo.PublicTrendResponse; +import mjkf.xinke.main.service.PdfService; import mjkf.xinke.main.service.PricePublishService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -29,6 +31,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; +import java.io.File; import java.io.Serializable; import java.nio.charset.StandardCharsets; import java.text.MessageFormat; @@ -48,6 +51,8 @@ import java.util.stream.Collectors; public class PublicController { @Resource PricePublishService pricePublishService; + @Resource + PdfService pdfService; @ApiOperation("查询") @GetMapping("/") @@ -142,12 +147,18 @@ public class PublicController { query.orderByAsc(PricePublish::getMaterialId); var result = pricePublishService.list(query); result = result.stream().filter(i->ObjectUtil.isNotEmpty(i.getMaterialId())).collect(Collectors.toList()); - - String filename = URLUtil.encode("历史文件", StandardCharsets.UTF_8) + ".xlsx"; + // excel + var tempFile = File.createTempFile("temp_history_file", ".xlsx"); + EasyExcel.write(tempFile, PricePublish.class) + .registerWriteHandler(new CustomSheetWriteHandler()) + .sheet("sheet1").doWrite(result); + // to pdf + var inputStream = pdfService.convertFilePdf(tempFile); + String filename = URLUtil.encode("历史文件", StandardCharsets.UTF_8) + ".pdf"; response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + filename); response.setHeader("filename", filename); - EasyExcel.write(response.getOutputStream(), PricePublish.class).sheet("sheet1").doWrite(result); + IoUtil.copy(inputStream, response.getOutputStream()); } @ApiOperation("历史文件列表") diff --git a/src/main/java/mjkf/xinke/main/handler/CustomSheetWriteHandler.java b/src/main/java/mjkf/xinke/main/handler/CustomSheetWriteHandler.java new file mode 100644 index 0000000..4173dc0 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/handler/CustomSheetWriteHandler.java @@ -0,0 +1,24 @@ +package mjkf.xinke.main.handler; + +import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; +import org.apache.poi.ss.usermodel.PrintSetup; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; + +public class CustomSheetWriteHandler implements SheetWriteHandler { + + @Override + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + Sheet sheet = writeSheetHolder.getSheet(); + // 获取打印设置 + PrintSetup printSetup = sheet.getPrintSetup(); + printSetup.setPaperSize(PrintSetup.A3_PAPERSIZE); // 设置页面大小为A3 + printSetup.setLandscape(true); // 横向 + // 设置每页都有表头 + sheet.setRepeatingRows(CellRangeAddress.valueOf("1:1")); + // 设置页面居中打印 + sheet.setHorizontallyCenter(true); // 水平居中 + } +} diff --git a/src/main/java/mjkf/xinke/main/model/db/PricePublish.java b/src/main/java/mjkf/xinke/main/model/db/PricePublish.java index 43758ad..47b537f 100644 --- a/src/main/java/mjkf/xinke/main/model/db/PricePublish.java +++ b/src/main/java/mjkf/xinke/main/model/db/PricePublish.java @@ -1,8 +1,12 @@ package mjkf.xinke.main.model.db; import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -19,6 +23,7 @@ import lombok.Getter; import lombok.Setter; import mjkf.xinke.auth.core.pojo.SaBaseLoginUser; import mjkf.xinke.main.model.vo.PricePublishEditRequest; +import org.apache.poi.ss.usermodel.BorderStyle; /** *
@@ -31,6 +36,10 @@ import mjkf.xinke.main.model.vo.PricePublishEditRequest;
@Getter
@Setter
@TableName("PRICE_PUBLISH")
+@ColumnWidth(8)
+@HeadRowHeight(40)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
@ApiModel(value = "PricePublish对象", description = "发布价格")
public class PricePublish extends Model