|
|
@@ -4,6 +4,7 @@ import org.apache.poi.xwpf.usermodel.*;
|
|
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
|
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
+import java.math.BigInteger;
|
|
|
import java.util.List;
|
|
|
|
|
|
public class SafetyObservationCardGenerator {
|
|
|
@@ -39,17 +40,18 @@ public class SafetyObservationCardGenerator {
|
|
|
XWPFTableCell titleCell = titleRow.getCell(0);
|
|
|
setTitleStyle(titleCell, "行为安全观察与沟通卡", true, ParagraphAlignment.CENTER, "FFFFFF");
|
|
|
|
|
|
- // 黄色提示栏
|
|
|
+ // 黄色提示栏 - 核心修改:单独设置提示文字样式
|
|
|
XWPFTableRow tipRow = table.createRow();
|
|
|
mergeCellsHorizontally(tipRow, 0, 2);
|
|
|
XWPFTableCell tipCell = tipRow.getCell(0);
|
|
|
- setCellStyle(tipCell, "若有任何不安全,请在小项前面□内打√。大项完全安全,请在大项后面□内打√。", true, ParagraphAlignment.LEFT, "FFFF00");
|
|
|
+ // 调用自定义的提示文字样式方法
|
|
|
+ setTipTextStyle(tipCell, "若有任何不安全,请在小项前面□内打√。大项完全安全,请在大项后面□内打√。", true, ParagraphAlignment.LEFT, "FFFF00");
|
|
|
|
|
|
// 行3:个人防护 | 规范操作 | 观察描述
|
|
|
XWPFTableRow headerRow1 = table.createRow();
|
|
|
- setCellStyle(headerRow1.getCell(0), "个人防护□", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
- setCellStyle(headerRow1.getCell(1), "规范操作□", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
- setCellStyle(headerRow1.getCell(2), "观察描述:", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
+ setTipTextStyle(headerRow1.getCell(0), "个人防护□", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
+ setTipTextStyle(headerRow1.getCell(1), "规范操作□", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
+ setTipTextStyle(headerRow1.getCell(2), "观察描述:", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
|
|
|
// 行4:个人防护明细 | 规范操作明细 | 空(后续垂直合并)
|
|
|
XWPFTableRow row4 = table.createRow();
|
|
|
@@ -76,13 +78,15 @@ public class SafetyObservationCardGenerator {
|
|
|
XWPFTableRow row10 = table.createRow();
|
|
|
String cmdText1 = "是否违章指挥?\n□ 指挥信号不正确/不清楚\n□ 多人指挥,信号不统一\n□ 非特殊情况下越权指挥\n□ 明知危险仍强令冒险作业\n□ 特殊作业前没有进行作业申请/风险分析\n□ 其他 _______________";
|
|
|
String posText1 = "人员站位是否安全?\n□ 碰撞到物体\n□ 被物体夹住/手扶握物体部位不正确\n□ 跌倒/坠落/陷入物体之中\n□ 被物体砸到\n□ 接触极高/极低温度/电流/电击\n□ 吸入/吸收/吞食有害物质\n□ 姿势不良/用力过度\n□ 其他 _______________";
|
|
|
- String safeText1 = "-观察到的安全行为或安全状态\n-鼓励安全行为或安全状态所采取的行动";
|
|
|
+ String safeText1 = "·观察到的安全行为或安全状态\n·鼓励安全行为或安全状态所采取的行动";
|
|
|
setCellStyle(row10.getCell(0), cmdText1, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
setCellStyle(row10.getCell(1), posText1, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
setCellStyle(row10.getCell(2), safeText1, true, ParagraphAlignment.LEFT, "E6EBF5");
|
|
|
|
|
|
// 行6:规范指挥明细 | 人员位置明细 | 安全行为描述(后续垂直合并)
|
|
|
XWPFTableRow row6 = table.createRow();
|
|
|
+ // ========== 核心修改1:设置row6行高(增高,示例:800缇 ≈ 40磅) ==========
|
|
|
+ setRowHeight(row6, 1600);
|
|
|
String cmdText = "";
|
|
|
String posText = "";
|
|
|
String safeText = "";
|
|
|
@@ -90,11 +94,13 @@ public class SafetyObservationCardGenerator {
|
|
|
setCellStyle(row6.getCell(1), posText, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
setCellStyle(row6.getCell(2), safeText, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
|
|
|
- // 行6:规范指挥明细 | 人员位置明细 | 安全行为描述(后续垂直合并)
|
|
|
+ // 行7:规范指挥明细 | 人员位置明细 | 安全行为描述(后续垂直合并)
|
|
|
XWPFTableRow row7 = table.createRow();
|
|
|
+ // ========== 核心修改2:设置row7行高(降低,示例:200缇 ≈ 10磅) ==========
|
|
|
+ setRowHeight(row7, 500);
|
|
|
String cmdText2 = "";
|
|
|
String posText2 = "";
|
|
|
- String safeText2 = "-观察到的不安全行为或不安全状态\n-即刻的纠正行动\n-预防再发生的行动";
|
|
|
+ String safeText2 = "·观察到的不安全行为或不安全状态\n·即刻的纠正行动\n·预防再发生的行动";
|
|
|
setCellStyle(row7.getCell(0), cmdText2, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
setCellStyle(row7.getCell(1), posText2, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
setCellStyle(row7.getCell(2), safeText2, true, ParagraphAlignment.LEFT, "E6EBF5");
|
|
|
@@ -102,13 +108,13 @@ public class SafetyObservationCardGenerator {
|
|
|
// 行7:作业场所 | 空 | 空(后续垂直合并)
|
|
|
XWPFTableRow headerRow3 = table.createRow();
|
|
|
mergeCellsHorizontally(headerRow3, 0, 1);
|
|
|
- setCellStyle(headerRow3.getCell(0), "作业场所□", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
+ setCellStyle(headerRow3.getCell(0), "作业场所□ \n作业场所、工作环境是否存在不安全状态或其他安全隐患?", true, ParagraphAlignment.LEFT, "DCE6F1");
|
|
|
setCellStyle(headerRow3.getCell(2), "", false, ParagraphAlignment.LEFT, "E6EBF5");
|
|
|
|
|
|
// 行8:作业场所明细 | 空 | 不安全行为描述(后续垂直合并)
|
|
|
XWPFTableRow row8 = table.createRow();
|
|
|
mergeCellsHorizontally(row8, 0, 1);
|
|
|
- String houseText = "作业场所、工作环境是否存在不安全状态或其他安全隐患?\n□ 作业场所杂乱 □ 带电装置带电部分裸露\n□ 作业空间狭小 □ 设备无防护/防护装置不当\n□ 堵塞安全通道 □ 未工完料净场地清/垃圾未分类存放\n□ 地面滑(水/雨/雪/油污等) □ 通风不良/氧气含量未达标\n□ 物体/工具放置位置不当 □ 其他 _______________\n□ 危险场所没有标志/标志不清\n□ 照明光线不良";
|
|
|
+ String houseText = "□ 作业场所杂乱 □ 带电装置带电部分裸露\n□ 作业空间狭小 □ 设备无防护/防护装置不当\n□ 堵塞安全通道 □ 未工完料净场地清/垃圾未分类存放\n□ 地面滑(水/雨/雪/油污等) □ 通风不良/氧气含量未达标\n□ 物体/工具放置位置不当 □ 其他 _______________\n□ 危险场所没有标志/标志不清\n□ 照明光线不良";
|
|
|
String unsafeText = "";
|
|
|
setCellStyle(row8.getCell(0), houseText, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
setCellStyle(row8.getCell(2), unsafeText, false, ParagraphAlignment.LEFT, "E6EBF5");
|
|
|
@@ -116,8 +122,8 @@ public class SafetyObservationCardGenerator {
|
|
|
// 底部信息行
|
|
|
XWPFTableRow footerRow = table.createRow();
|
|
|
mergeCellsHorizontally(footerRow, 0, 2);
|
|
|
- String footerText = "观察区域: _______________ 实施观察人员: _______________ 被观察岗位:_______________\n被观察人员: □员工 □承包商 □供应商 日期: _______________ 时间:____点____分到____点____分";
|
|
|
- setCellStyle(footerRow.getCell(0), footerText, false, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
+ String footerText = "观察区域: ____________ 实施观察人员: ____________ 被观察岗位:____________ \n被观察人员:□员工 □承包商 □供应商 日期: __________ 时间:___点___分到___点___分";
|
|
|
+ setCellStyle(footerRow.getCell(0), footerText, true, ParagraphAlignment.LEFT, "FFFFFF");
|
|
|
|
|
|
// 核心修复:垂直合并第三列的单元格(行3到行8的第三列)
|
|
|
// 行索引说明:table.getRow(2) = 行3(标题行是0,提示行是1),table.getRow(7) = 行8
|
|
|
@@ -133,6 +139,15 @@ public class SafetyObservationCardGenerator {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // ========== 新增:设置行高的工具方法(适配POI 5.2.5) ==========
|
|
|
+ private static void setRowHeight(XWPFTableRow row, int heightInTwips) {
|
|
|
+ CTRow ctTr = row.getCtRow();
|
|
|
+ CTTrPr trPr = ctTr.getTrPr() == null ? ctTr.addNewTrPr() : ctTr.getTrPr();
|
|
|
+ CTHeight trHeight = trPr.addNewTrHeight();
|
|
|
+ trHeight.setVal(BigInteger.valueOf(heightInTwips));
|
|
|
+ trHeight.setHRule(STHeightRule.EXACT); // 强制使用固定行高(不自动适应内容)
|
|
|
+ }
|
|
|
+
|
|
|
// 标题样式设置
|
|
|
private static void setTitleStyle(XWPFTableCell cell, String text, boolean bold, ParagraphAlignment align, String bgColor) {
|
|
|
clearCellContent(cell);
|
|
|
@@ -149,6 +164,32 @@ public class SafetyObservationCardGenerator {
|
|
|
setCellBorder(cell);
|
|
|
}
|
|
|
|
|
|
+ // 新增:提示文字专属样式设置
|
|
|
+ private static void setTipTextStyle(XWPFTableCell cell, String text, boolean bold, ParagraphAlignment align, String bgColor) {
|
|
|
+ clearCellContent(cell);
|
|
|
+
|
|
|
+ // 设置单元格垂直对齐为顶部
|
|
|
+ CTTcPr tcPr = cell.getCTTc().getTcPr() != null ? cell.getCTTc().getTcPr() : cell.getCTTc().addNewTcPr();
|
|
|
+ CTVerticalJc vAlign = tcPr.addNewVAlign();
|
|
|
+ vAlign.setVal(STVerticalJc.TOP);
|
|
|
+
|
|
|
+ XWPFParagraph paragraph = cell.addParagraph();
|
|
|
+ paragraph.setAlignment(align);
|
|
|
+ paragraph.setSpacingAfter(0);
|
|
|
+ paragraph.setSpacingBefore(0);
|
|
|
+
|
|
|
+ XWPFRun run = paragraph.createRun();
|
|
|
+ run.setText(text.trim());
|
|
|
+ run.setFontSize(9); // 设置字体大小为11号
|
|
|
+ run.setFontFamily("宋体"); // 设置字体为微软雅黑
|
|
|
+ run.setBold(true); // 加粗
|
|
|
+ run.setColor("003366"); // 设置字体颜色为深蓝色(可自行修改)
|
|
|
+ run.setTextPosition(10); // 调整文字间距
|
|
|
+
|
|
|
+ cell.setColor(bgColor);
|
|
|
+ setCellBorder(cell);
|
|
|
+ }
|
|
|
+
|
|
|
// 单元格样式设置(支持换行)
|
|
|
private static void setCellStyle(XWPFTableCell cell, String text, boolean bold, ParagraphAlignment align, String bgColor) {
|
|
|
clearCellContent(cell);
|
|
|
@@ -168,7 +209,7 @@ public class SafetyObservationCardGenerator {
|
|
|
|
|
|
XWPFRun run = paragraph.createRun();
|
|
|
run.setText(line.trim());
|
|
|
- run.setFontSize(10);
|
|
|
+ run.setFontSize(9);
|
|
|
run.setFontFamily("宋体");
|
|
|
run.setBold(bold);
|
|
|
run.setTextPosition(0);
|