Commit 2ff2bf5962e57af15958e23e2cae714a78ce5b60

Authored by 房远帅
1 parent f150f018

合同、订货单导出模板修改

@@ -480,6 +480,8 @@ public class PurchaseOrderInfoController extends DefaultBaseController { @@ -480,6 +480,8 @@ public class PurchaseOrderInfoController extends DefaultBaseController {
480 processTemplate(workbook, dataMap); 480 processTemplate(workbook, dataMap);
481 481
482 if ("PDF".equals(exportType)) { 482 if ("PDF".equals(exportType)) {
  483 + ExcelUtil.adjustVerticalTitleForPdf(workbook, sheet, "具体质量要求", true);
  484 + ExcelUtil.adjustVerticalTitleForPdf(workbook, sheet, "生产工艺", false);
483 ResponseUtil.setPDFResponseHead(response, data.getOrderNo() + "-订货单打印.pdf"); 485 ResponseUtil.setPDFResponseHead(response, data.getOrderNo() + "-订货单打印.pdf");
484 486
485 // === 写入临时 .xlsx 文件 === 487 // === 写入临时 .xlsx 文件 ===
@@ -270,6 +270,8 @@ public class BusinessDataExportHandler implements ExportHandler { @@ -270,6 +270,8 @@ public class BusinessDataExportHandler implements ExportHandler {
270 270
271 String createTime = orderInfo.getCreateTime().format(dateTimeFormatter); 271 String createTime = orderInfo.getCreateTime().format(dateTimeFormatter);
272 if ("PDF".equals(queryVo.getExportFileType())) { 272 if ("PDF".equals(queryVo.getExportFileType())) {
  273 + ExcelUtil.adjustVerticalTitleForPdf(workbook, sheet, "具体质量要求", true);
  274 + ExcelUtil.adjustVerticalTitleForPdf(workbook, sheet, "生产工艺", false);
273 // 输出PDF 275 // 输出PDF
274 File tempExcel = File.createTempFile("purchase_order_" + orderInfo.getOrderNo(), ".xlsx"); 276 File tempExcel = File.createTempFile("purchase_order_" + orderInfo.getOrderNo(), ".xlsx");
275 try (FileOutputStream fos = new FileOutputStream(tempExcel)) { 277 try (FileOutputStream fos = new FileOutputStream(tempExcel)) {
@@ -278,4 +278,92 @@ public class ExcelUtil { @@ -278,4 +278,92 @@ public class ExcelUtil {
278 } 278 }
279 return pdfFile; 279 return pdfFile;
280 } 280 }
  281 +
  282 + public static void adjustVerticalTitleForPdf(Workbook workbook, Sheet sheet, String text, boolean mergedCell) {
  283 + for (Row row : sheet) {
  284 + for (Cell cell : row) {
  285 + if (cell == null || cell.getCellTypeEnum() != CellType.STRING) {
  286 + continue;
  287 + }
  288 + String cellValue = normalizeCellText(cell.getStringCellValue());
  289 + if (!normalizeCellText(text).equals(cellValue)) {
  290 + continue;
  291 + }
  292 +
  293 + cell.setCellValue(buildVerticalText(text));
  294 +
  295 + CellStyle baseStyle = cell.getCellStyle();
  296 + CellStyle pdfStyle = workbook.createCellStyle();
  297 + if (baseStyle != null) {
  298 + pdfStyle.cloneStyleFrom(baseStyle);
  299 + }
  300 + pdfStyle.setAlignment(HorizontalAlignment.CENTER);
  301 + pdfStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  302 + pdfStyle.setWrapText(true);
  303 + pdfStyle.setRotation((short) 0);
  304 + pdfStyle.setIndention((short) 0);
  305 +
  306 + if (mergedCell) {
  307 + CellRangeAddress mergedRegion = findMergedRegion(sheet, cell.getRowIndex(), cell.getColumnIndex());
  308 + if (mergedRegion != null) {
  309 + for (int r = mergedRegion.getFirstRow(); r <= mergedRegion.getLastRow(); r++) {
  310 + Row currentRow = sheet.getRow(r);
  311 + if (currentRow == null) {
  312 + currentRow = sheet.createRow(r);
  313 + }
  314 + for (int c = mergedRegion.getFirstColumn(); c <= mergedRegion.getLastColumn(); c++) {
  315 + Cell currentCell = currentRow.getCell(c);
  316 + if (currentCell == null) {
  317 + currentCell = currentRow.createCell(c);
  318 + }
  319 + currentCell.setCellStyle(pdfStyle);
  320 + }
  321 + }
  322 + } else {
  323 + cell.setCellStyle(pdfStyle);
  324 + }
  325 + } else {
  326 + cell.setCellStyle(pdfStyle);
  327 + }
  328 + return;
  329 + }
  330 + }
  331 + }
  332 +
  333 + private static String buildVerticalText(String text) {
  334 + StringBuilder builder = new StringBuilder();
  335 + for (int i = 0; i < text.length(); i++) {
  336 + if (i > 0) {
  337 + builder.append("\n");
  338 + }
  339 + builder.append(text.charAt(i));
  340 + }
  341 + return builder.toString();
  342 + }
  343 +
  344 + private static String normalizeCellText(String text) {
  345 + if (text == null) {
  346 + return "";
  347 + }
  348 + return text.replace("\r", "")
  349 + .replace("\n", "")
  350 + .replace(" ", "")
  351 + .trim();
  352 + }
  353 +
  354 + private static CellRangeAddress findMergedRegion(Sheet sheet, int rowIndex, int colIndex) {
  355 + for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
  356 + CellRangeAddress region = sheet.getMergedRegion(i);
  357 + if (region == null) {
  358 + continue;
  359 + }
  360 + if (rowIndex >= region.getFirstRow()
  361 + && rowIndex <= region.getLastRow()
  362 + && colIndex >= region.getFirstColumn()
  363 + && colIndex <= region.getLastColumn()) {
  364 + return region;
  365 + }
  366 + }
  367 + return null;
  368 + }
281 } 369 }
@@ -106,7 +106,7 @@ public class LatexFormulaExcelExporterUtil { @@ -106,7 +106,7 @@ public class LatexFormulaExcelExporterUtil {
106 actual = actual + "\\phantom{" + phantom + "}"; 106 actual = actual + "\\phantom{" + phantom + "}";
107 } 107 }
108 108
109 - return "\\mathbf{" + actual + "}"; 109 + return "\\mathbf{\\mathrm{" + actual + "}}";
110 } 110 }
111 111
112 private static String buildLatexLine(List<FormulaComponent> componentList, int startIndex, int endIndexExclusive) { 112 private static String buildLatexLine(List<FormulaComponent> componentList, int startIndex, int endIndexExclusive) {
@@ -192,6 +192,8 @@ public class LatexFormulaExcelExporterUtil { @@ -192,6 +192,8 @@ public class LatexFormulaExcelExporterUtil {
192 g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 192 g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
193 g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 193 g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
194 g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 194 g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
  195 + java.awt.Font renderFont = new java.awt.Font("宋体", java.awt.Font.BOLD, fontSize);
  196 + g2.setFont(renderFont);
195 197
196 // 绘制白色背景 198 // 绘制白色背景
197 g2.setColor(Color.WHITE); 199 g2.setColor(Color.WHITE);
@@ -202,6 +204,7 @@ public class LatexFormulaExcelExporterUtil { @@ -202,6 +204,7 @@ public class LatexFormulaExcelExporterUtil {
202 204
203 // 绘制公式 205 // 绘制公式
204 JLabel label = new JLabel(); 206 JLabel label = new JLabel();
  207 + label.setFont(renderFont);
205 label.setForeground(Color.BLACK); 208 label.setForeground(Color.BLACK);
206 icon.paintIcon(label, g2, 0, 0); 209 icon.paintIcon(label, g2, 0, 0);
207 210