直接上代码:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.poi.xwpf.usermodel.Borders; import org.apache.poi.xwpf.usermodel.BreakType; import org.apache.poi.xwpf.usermodel.Document; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TextAlignment; import org.apache.poi.xwpf.usermodel.UnderlinePatterns; import org.apache.poi.xwpf.usermodel.VerticalAlign; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRelation; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlToken; import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute; import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTColor; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSignedTwipsMeasure; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_图文混排_S3_Test { public static void main(String[] args) throws Exception { POI_图文混排_S3_Test t = new POI_图文混排_S3_Test(); CustomXWPFDocument_S_2 document = new CustomXWPFDocument_S_2(); //设置页边距 t.setDocumentMargin(document, "1797", "1440", "1797", "1440"); //测试添加文字与图片 t.testAddTextParagraph(document); //测试设置段落间距 t.testParagraphSpacingInfo(document); //测试设置段落缩进 t.testParagraphIndInfo(document); //测试表格单元格合并 t.testMegerTableCell(document); //测试添加超链接 t.testAddHyperlink(document); //测试添加页眉页脚 t.testAddHeaderFooter(document); t.saveDocument(document, "f:/saveFile/temp/sys_" + System.currentTimeMillis() + ".docx"); } public void testAddTextParagraph(CustomXWPFDocument_S_2 document) throws Exception { XWPFParagraph p = document.createParagraph(); setTextFontInfo(p, false, false, "基本实验技能(常见实验仪器及基本操作)", "宋体", "000000", "40", true, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.CENTER, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "班级:________ 姓名:________", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.CENTER, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "一、单选题(共10道,每道10分)", "宋体", "000000", "21", true, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "100", null, true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "1.下列有关仪器用途的说法错误的是( )", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "A.烧杯用于较多量试剂的反应容器", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "100", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "B.烧杯用于较多量试剂的反应容器", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "C.烧杯用于较多量试剂的反应容器", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "D.烧杯用于较多量试剂的反应容器", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "2.下列实验操作中,正确的是( ) ", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "100", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "A.", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "100", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); String blipId = p.getDocument().addPictureData( new FileInputStream(new File("f:/saveFile/temp/image1.png")), Document.PICTURE_TYPE_PNG); document.createPicture(blipId, document.getNextPicNameNumber(Document.PICTURE_TYPE_PNG), 90, 93, p); setTextFontInfo(p, true, false, StringUtils.leftPad("B.", 10), "宋体", "000000", "21", false, null, false, false, null, 0,null); blipId = p.getDocument().addPictureData( new FileInputStream(new File("f:/saveFile/temp/image2.png")), Document.PICTURE_TYPE_PNG); document.createPicture(blipId, document.getNextPicNameNumber(Document.PICTURE_TYPE_PNG), 90, 93, p); setTextFontInfo(p, true, true, "C.", "宋体", "000000", "21", false, null, false, false, null, 0,null); blipId = p.getDocument().addPictureData( new FileInputStream(new File("f:/saveFile/temp/image3.png")), Document.PICTURE_TYPE_PNG); document.createPicture(blipId, document.getNextPicNameNumber(Document.PICTURE_TYPE_PNG), 90, 93, p); setTextFontInfo(p, true, false, StringUtils.leftPad("D.", 10), "宋体", "000000", "21", false, null, false, false, null, 0,null); blipId = p.getDocument().addPictureData( new FileInputStream(new File("f:/saveFile/temp/image4.png")), Document.PICTURE_TYPE_PNG); document.createPicture(blipId, document.getNextPicNameNumber(Document.PICTURE_TYPE_PNG), 90, 93, p); } public void testParagraphSpacingInfo(XWPFDocument document) { addNewPage(document, BreakType.PAGE); XWPFParagraph p = document.createParagraph(); setTextFontInfo(p, false, false, "测试单倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, true, false, "测试最小值10磅", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "200", STLineSpacingRule.Enum.forString("atLeast")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试固定值12磅", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "240", STLineSpacingRule.Enum.forString("exact")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试1.5倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "360", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试2倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "480", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试多倍行距3", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "0", "0", true, "720", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试段前2行段后2行单倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "0", "0", "200", "200", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试段前2磅段后2磅单倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "40", "40", null, null, true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试段前2行段后2磅单倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, null, "40", "200", null, true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试段前2磅段后2行单倍行距", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphSpacingInfo(p, true, "40", null, null, "200", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); } public void testAddHyperlink(XWPFDocument document) { addNewPage(document, BreakType.TEXT_WRAPPING); XWPFParagraph p = document.createParagraph(); setTextFontInfo(p, false, true, "", "宋体", "ff0000", "24", false, null, false, false, null, 0,null); setTextFontInfo(p, true, false, "测试", "宋体", "ff0000", "24", false, null, false, false, null, 0,"20"); appendExternalHyperlink("mailto:1329186624@qq.com?subject=测试poi超链接", "联系我", p, "微软雅黑", "28", true, true, false, null, "4","80"); setTextFontInfo(p, true, false, "测试", "黑体", "00ff00", "26", false, null, false, false, null, 0,"20"); setTextFontInfo(p, true, true, "", "宋体", "ff0000", "24", false, null, false, false, null, 0,null); setParagraphAlignInfo(p, ParagraphAlignment.CENTER, TextAlignment.CENTER); setParagraphSpacingInfo(p, true, "0", "0", "100", "100", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphBorder(p, Borders.DOUBLE, Borders.DOUBLE, Borders.DOUBLE, Borders.DOUBLE, null); } public void testParagraphIndInfo(XWPFDocument document) { addNewPage(document, BreakType.PAGE); XWPFParagraph p = document.createParagraph(); setTextFontInfo(p, false, false, "测试首行缩进2字符", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphIndInfo(p, "440", "200", null, null, null, null, null, null); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试悬挂缩进2字符", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphIndInfo(p, null, null, "440", "200", null, null, null, null); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试左侧缩进2字符", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphIndInfo(p, null, null, null, null, null, null, "440", "200"); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); p = document.createParagraph(); setTextFontInfo(p, false, false, "测试右侧缩进2字符", "宋体", "000000", "21", false, null, false, false, null, 0,null); setParagraphIndInfo(p, null, null, null, null, "440", "200", null, null); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); } public void testMegerTableCell(XWPFDocument doc) { addNewPage(doc, BreakType.PAGE); List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); columnList.add("字"); XWPFTable table = doc.createTable(4, 6); setTableWidth(table, "8000"); XWPFTableRow firstRow = table.getRow(0); XWPFTableRow secondRow = table.getRow(1); firstRow.setHeight(400); secondRow.setHeight(400); XWPFTableCell firstCell = null; XWPFTableCell secondCell = null; int firstCellIndex = 0; for (String str : columnList) { if (str.indexOf("|") == -1) { firstCell = firstRow.getCell(firstCellIndex); setCellText(firstCell, str, "CCCCCC", 1600); firstCellIndex++; } else { String[] strArr = str.split("\\|"); for (int i = 1; i < strArr.length; i++) { firstCell = firstRow.getCell(firstCellIndex); setCellText(firstCell, strArr[0], "CCCCCC", 1600); secondCell = secondRow.getCell(firstCellIndex); setCellText(secondCell, strArr[i], "CCCCCC", 1600); firstCellIndex++; } } } // 合并行(跨列) firstCellIndex = 0; for (String str : columnList) { if (str.indexOf("|") == -1) { firstCellIndex++; } else { String[] strArr = str.split("\\|"); mergeCellsHorizontal(table, 0, firstCellIndex, firstCellIndex + strArr.length - 2); firstCellIndex += strArr.length - 1; } } // 合并列(跨行) firstCellIndex = 0; for (String str : columnList) { if (str.indexOf("|") == -1) { mergeCellsVertically(table, firstCellIndex, 0, 1); firstCellIndex++; } else { String[] strArr = str.split("\\|"); firstCellIndex += strArr.length - 1; } } // 数据 for (int i = 2; i < 4; i++) { firstRow = table.getRow(i); firstRow.setHeight(380); for (int j = 0; j < 6; j++) { firstCell = firstRow.getCell(j); setCellText(firstCell, "测试", "FFFFC9", 1600); } } } public void testAddHeaderFooter(XWPFDocument doc) throws Exception { simpleDateHeader(doc); simpleNumberFooter(doc); } // 页脚:显示页码信息 public void simpleNumberFooter(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph codePara = new XWPFParagraph(ctp, document); XWPFRun r1 = codePara.createRun(); r1.setText("第"); r1.setFontSize(11); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr .addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); r1 = codePara.createRun(); CTFldChar fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); CTText ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("页 总共"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("NUMPAGES \\* MERGEFORMAT "); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("页"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); codePara.setBorderTop(Borders.THICK); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy( document, sectPr); headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, newparagraphs); } public void simpleDateHeader(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph codePara = new XWPFParagraph(ctp, document); XWPFRun r1 = codePara.createRun(); CTFldChar fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); CTText ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"EEEE\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr .addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("年"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"O\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("月"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"A\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("日"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR() .addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); codePara.setBorderBottom(Borders.THICK); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy( document, sectPr); headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs); } public void setCellText(XWPFTableCell cell, String text, String bgcolor, int width) { CTTc cttc = cell.getCTTc(); CTTcPr ctPr = cttc.addNewTcPr(); CTShd ctshd = ctPr.addNewShd(); ctPr.addNewTcW().setW(BigInteger.valueOf(width)); ctshd.setFill(bgcolor); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { XWPFTableCell cell = table.getRow(row).getCell(cellIndex); if (cellIndex == fromCell) { cell.getCTTc().addNewTcPr().addNewHMerge() .setVal(STMerge.RESTART); } else { cell.getCTTc().addNewTcPr().addNewHMerge() .setVal(STMerge.CONTINUE); } } } /** * @Description: 跨行合并 */ public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { XWPFTableCell cell = table.getRow(rowIndex).getCell(col); if (rowIndex == fromRow) { cell.getCTTc().addNewTcPr().addNewVMerge() .setVal(STMerge.RESTART); } else { cell.getCTTc().addNewTcPr().addNewVMerge() .setVal(STMerge.CONTINUE); } } } public void setTableWidth(XWPFTable table, String width) { CTTbl ttbl = table.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl .getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr .addNewTblW(); CTJc cTJc = tblPr.addNewJc(); cTJc.setVal(STJc.Enum.forString("center")); tblWidth.setW(new BigInteger(width)); tblWidth.setType(STTblWidth.DXA); } // 设置段落边框 public void setParagraphBorder(XWPFParagraph p, Borders lborder, Borders tBorders, Borders rBorders, Borders bBorders, Borders btborders) { if (lborder != null) { p.setBorderLeft(lborder); } if (tBorders != null) { p.setBorderTop(tBorders); } if (rBorders != null) { p.setBorderRight(rBorders); } if (bBorders != null) { p.setBorderBottom(bBorders); } if (btborders != null) { p.setBorderBetween(btborders); } } // 设置段落对齐 public void setParagraphAlignInfo(XWPFParagraph p, ParagraphAlignment pAlign, TextAlignment valign) { p.setAlignment(pAlign); p.setVerticalAlignment(valign); } // 设置段落缩进信息 1厘米≈567 public void setParagraphIndInfo(XWPFParagraph p, String firstLine, String firstLineChar, String hanging, String hangingChar, String right, String rigthChar, String left, String leftChar) { CTPPr pPPr = null; if (p.getCTP() != null) { if (p.getCTP().getPPr() != null) { pPPr = p.getCTP().getPPr(); } else { pPPr = p.getCTP().addNewPPr(); } } CTInd pInd = pPPr.getInd() != null ? pPPr.getInd() : pPPr.addNewInd(); if (firstLine != null) { pInd.setFirstLine(new BigInteger(firstLine)); } if (firstLineChar != null) { pInd.setFirstLineChars(new BigInteger(firstLineChar)); } if (hanging != null) { pInd.setHanging(new BigInteger(hanging)); } if (hangingChar != null) { pInd.setHangingChars(new BigInteger(hangingChar)); } if (left != null) { pInd.setLeft(new BigInteger(left)); } if (leftChar != null) { pInd.setLeftChars(new BigInteger(leftChar)); } if (right != null) { pInd.setRight(new BigInteger(right)); } if (rigthChar != null) { pInd.setRightChars(new BigInteger(rigthChar)); } } // 设置段落间距信息 // 一行=100 一磅=20 public void setParagraphSpacingInfo(XWPFParagraph p, boolean isSpace, String before, String after, String beforeLines, String afterLines, boolean isLine, String line, STLineSpacingRule.Enum lineValue) { CTPPr pPPr = null; if (p.getCTP() != null) { if (p.getCTP().getPPr() != null) { pPPr = p.getCTP().getPPr(); } else { pPPr = p.getCTP().addNewPPr(); } } CTSpacing pSpacing = pPPr.getSpacing() != null ? pPPr.getSpacing() : pPPr.addNewSpacing(); if (isSpace) { // 段前磅数 if (before != null) { pSpacing.setBefore(new BigInteger(before)); } // 段后磅数 if (after != null) { pSpacing.setAfter(new BigInteger(after)); } // 段前行数 if (beforeLines != null) { pSpacing.setBeforeLines(new BigInteger(beforeLines)); } // 段后行数 if (afterLines != null) { pSpacing.setAfterLines(new BigInteger(afterLines)); } } if (isLine) { if (line != null) { pSpacing.setLine(new BigInteger(line)); } if (lineValue != null) { pSpacing.setLineRule(lineValue); } } } /** * @param verticalAlign * SUPERSCRIPT上标 SUBSCRIPT下标 * @param position * 字符位置 1磅=2 */ // 设置字体信息 设置字符间距信息(CTSignedTwipsMeasure) public void setTextFontInfo(XWPFParagraph p, boolean isInsert, boolean isNewLine, String content, String fontFamily, String colorVal, String fontSize, boolean isBlod, UnderlinePatterns underPatterns, boolean isItalic, boolean isStrike, VerticalAlign verticalAlign, int position,String spacingValue) { XWPFRun pRun = null; if (isInsert) { pRun = p.createRun(); } else { if (p.getRuns() != null && p.getRuns().size() > 0) { pRun = p.getRuns().get(0); } else { pRun = p.createRun(); } } if (isNewLine) { pRun.addBreak(); } pRun.setText(content); // 设置字体样式 pRun.setBold(isBlod); pRun.setItalic(isItalic); pRun.setStrike(isStrike); if (underPatterns != null) { pRun.setUnderline(underPatterns); } pRun.setColor(colorVal); if (verticalAlign != null) { pRun.setSubscript(verticalAlign); } pRun.setTextPosition(position); CTRPr pRpr = null; if (pRun.getCTR() != null) { pRpr = pRun.getCTR().getRPr(); if (pRpr == null) { pRpr = pRun.getCTR().addNewRPr(); } } else { // pRpr = p.getCTP().addNewR().addNewRPr(); } // 设置字体 CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr .addNewRFonts(); fonts.setAscii(fontFamily); fonts.setEastAsia(fontFamily); fonts.setHAnsi(fontFamily); // 设置字体大小 CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz(); sz.setVal(new BigInteger(fontSize)); CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr .addNewSzCs(); szCs.setVal(new BigInteger(fontSize)); if(spacingValue!=null){ //设置字符间距信息 CTSignedTwipsMeasure ctSTwipsMeasure=pRpr.isSetSpacing()?pRpr.getSpacing(): pRpr.addNewSpacing(); ctSTwipsMeasure.setVal(new BigInteger(spacingValue)); } } /** * * @Description: 添加超链接 * @param position * 1磅=2 */ // 为段落添加超链接 public void appendExternalHyperlink(String url, String text, XWPFParagraph paragraph, String fontFamily, String fontSize, boolean isBlod, boolean isItalic, boolean isStrike, String verticalAlign, String position,String spacingValue) { // Add the link as External relationship String id = paragraph .getDocument() .getPackagePart() .addExternalRelationship(url, XWPFRelation.HYPERLINK.getRelation()).getId(); // Append the link and bind it to the relationship CTHyperlink cLink = paragraph.getCTP().addNewHyperlink(); cLink.setId(id); // Create the linked text CTText ctText = CTText.Factory.newInstance(); ctText.setStringValue(text); CTR ctr = CTR.Factory.newInstance(); CTRPr rpr = ctr.addNewRPr(); // 设置超链接样式 CTColor color = CTColor.Factory.newInstance(); color.setVal("0000FF"); rpr.setColor(color); rpr.addNewU().setVal(STUnderline.SINGLE); if (isBlod) { rpr.addNewB().setVal(STOnOff.Enum.forString("true")); } if (isItalic) { rpr.addNewI().setVal(STOnOff.Enum.forString("true")); } if (isStrike) { rpr.addNewStrike().setVal(STOnOff.Enum.forString("true")); } if (verticalAlign != null) { rpr.addNewVertAlign().setVal( STVerticalAlignRun.Enum.forString(verticalAlign)); } rpr.addNewPosition().setVal(new BigInteger(position)); // 设置字体 CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr .addNewRFonts(); fonts.setAscii(fontFamily); fonts.setEastAsia(fontFamily); fonts.setHAnsi(fontFamily); // 设置字体大小 CTHpsMeasure sz = rpr.isSetSz() ? rpr.getSz() : rpr.addNewSz(); sz.setVal(new BigInteger(fontSize)); CTHpsMeasure szCs = rpr.isSetSzCs() ? rpr.getSzCs() : rpr.addNewSzCs(); szCs.setVal(new BigInteger(fontSize)); if(spacingValue!=null){ //设置字符间距信息 CTSignedTwipsMeasure ctSTwipsMeasure=rpr.isSetSpacing()?rpr.getSpacing(): rpr.addNewSpacing(); ctSTwipsMeasure.setVal(new BigInteger(spacingValue)); } ctr.setTArray(new CTText[] { ctText }); cLink.setRArray(new CTR[] { ctr }); } public void addNewPage(XWPFDocument document, BreakType breakType) { XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakType); } //设置页边距 1厘米约等于567 public void setDocumentMargin(XWPFDocument document,String left,String top,String right,String bottom){ CTSectPr sectPr =document.getDocument().getBody().isSetSectPr()?document.getDocument().getBody().getSectPr():document.getDocument().getBody().addNewSectPr(); CTPageMar ctpagemar=sectPr.addNewPgMar(); ctpagemar.setLeft(new BigInteger(left)); ctpagemar.setTop(new BigInteger(top)); ctpagemar.setRight(new BigInteger(right)); ctpagemar.setBottom(new BigInteger(bottom)); } public void saveDocument(XWPFDocument document, String savePath) throws Exception { FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } } class CustomXWPFDocument_S_2 extends XWPFDocument { public CustomXWPFDocument_S_2() { super(); } public CustomXWPFDocument_S_2(InputStream in) throws IOException { super(in); } public CustomXWPFDocument_S_2(OPCPackage pkg) throws IOException { super(pkg); } public void createPicture(String blipId, int id, int width, int height, XWPFParagraph paragraph) { final int EMU = 9525; width *= EMU; height *= EMU; // String blipId = // getAllPictures().get(id).getPackageRelationship().getId(); if (paragraph == null) { paragraph = createParagraph(); } CTInline inline = paragraph.createRun().getCTR().addNewDrawing() .addNewInline(); String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"img_" + id + "\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" + " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>" + " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>" + " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">" + " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>" + " </pic:pic>" + " </a:graphicData>" + "</a:graphic>"; // CTGraphicalObjectData graphicData = // inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch (XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); // graphicData.set(xmlToken); inline.setDistT(0); inline.setDistB(0); inline.setDistL(0); inline.setDistR(0); CTPositiveSize2D extent = inline.addNewExtent(); extent.setCx(width); extent.setCy(height); CTNonVisualDrawingProps docPr = inline.addNewDocPr(); docPr.setId(id); docPr.setName("img_ " + id); docPr.setDescr("Picture"); } }
结果如下:
需要的jar包如下:
本文系原创,转载请注明出处,原文链接:http://53873039oycg.iteye.com/blog/2153194 ,谢谢。
全文完。
相关推荐
在Android平台上,开发人员...通过以上步骤,你可以在Android应用中实现读取和显示Word文档的功能,覆盖了从doc到docx的格式,并能正确处理图文混排的内容。实际开发中,可以根据需求进行调整,优化性能和用户体验。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/146960240
【ThingsBoard初体验】本地编译踩坑记录.html
摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用社团管理系统可以有效管理,使信息管理能够更加科学和规范。 社团管理系统在Eclipse环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员增删改查社团信息和社团信息资料,审核社团预订信息。总之,社团管理系统集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。 关键词:社团管理系统;Java语言;Mysql
内容概要:HPS700A是一款高精度气压传感器,具有1.8V到3.6V的工作电压范围,测量压力范围为0到1600KPa,温度范围为-40℃到85℃。它采用MEMS技术并通过I²C接口提供温度和压力数据,内部集成24位ADC进行数字化处理,并内置补偿算法确保数据准确性。传感器具备低功耗特性,待机电流小于0.1μA。该器件广泛应用于便携式气泵、移动气压计、工业压力温度监测等领域。文档详细描述了HPS700A的功能特性、电气参数、命令集、I²C通信协议及其典型应用。 适合人群:电子工程师、硬件开发者以及对高精度气压传感器感兴趣的科研人员。 使用场景及目标:①用于需要精确测量环境压力和温度的应用场合;②帮助工程师理解并掌握I²C接口的使用方法;③适用于开发小型化、低功耗的产品设计。 其他说明:HPS700A出厂时已进行校准,用户通常无需再做额外校正。此外,该传感器支持多种OSR(过采样率)设置,允许用户根据精度需求选择不同的转换时间和功耗水平。同时,提供了详细的引脚定义、封装信息及批量生产规格,方便产品集成与大规模制造。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:本文介绍了一款国内首家推出的车载DC/DC转换器解决方案,旨在解决传统电源方案的诸多痛点并助力车载电源智能化升级。硬件设计方面,采用TI C2000系列主控芯片,搭配进口功率器件和高精度采样电路,提供了高可靠性的电源方案,甚至将输入级EMI滤波部分进行了模块化设计,并给出了不同功率等级下的元器件选型表。软件部分实现了电压环、电流环双闭环控制,采用了动态调整算法,创新地使用DMA搬运PWM占空比参数,降低CPU占用率,同时在输入电压异常时自动切换硬件保护模式。上位机工具提供实时数据显示、参数设置、波形分析等功能,开放了协议栈源码,内置自动标定功能。; 适合人群:从事车载电源开发的工程师,尤其是希望提升产品开发效率和技术水平的专业人士。; 使用场景及目标:①硬件工程师可以借鉴模块化设计思路和详细的元器件选型表,优化电路设计;②软件工程师可以从双闭环控制算法、DMA传输机制等方面学习先进的编程技巧;③调试人员利用上位机工具进行便捷高效的参数调整和故障排查。; 其他说明:该方案不仅提供了完整的技术文档支持,而且开放的软件架构和配套调试工具极大地方便了二次开发,提高了开发效率。建议对车载电源开发感兴趣的工程师获取相关资料深入学习。
内容概要:本文档是为华为C语言面试设计的试卷,旨在评估应聘者的C语言掌握程度。试卷分为三个主要部分:选择题、填空题和代码题。选择题涵盖了基础语法、指针、内存管理、数据结构等核心知识点,例如动态内存分配、指针操作、结构体大小、位运算等。填空题进一步考察了指针、函数声明、宏定义、内存管理等实际编程技能。代码题则侧重于算法实现,包括单链表反转、字符串逆序、二分查找、内存拷贝、统计二进制中1的个数、删除链表节点、快速排序、判断回文链表、大端小端检测以及线程安全单例模式的实现。所有题目难度适中且贴近实际开发场景,有助于全面评估应聘者的编程能力和问题解决能力。; 适合人群:具备一定C语言基础,有志于应聘华为或其他相关企业的软件开发岗位的求职者。; 使用场景及目标:①帮助求职者复习C语言基础知识,熟悉常见的面试考点;②通过实际编程题目的练习,提高解决问题的能力;③模拟真实面试环境,提升面试自信心。; 其他说明:此试卷不仅测试应聘者的理论知识,还注重实际编程能力的考察。建议考生在准备过程中,不仅要掌握语法和概念,还要多动手实践,理解每个知识点的具体应用。同时,注意代码的规范性和鲁棒性,确保在面试中能够写出高质量的代码。
汛期安全知识教育课件教案资料
《人工智能在智能客服领域的应用方案》:在当今数字化时代,企业与客户之间的互动日益频繁,客户服务的质量和效率成为企业竞争的关键因素之一。传统的客服模式面临着诸多挑战,如人工客服成本高昂、工作时间受限、服务质量参差不齐、难以应对大量并发的客户咨询等问题。随着人工智能技术的飞速发展,智能客服应运而生,它能够为企业提供高效、便捷、低成本的客户服务解决方案,极大地提升客户体验和企业运营效率。无论是电商、金融、电信、教育等行业,都可以通过对客服数据的分析,优化自身的业务流程和服务质量,提升企业的竞争力。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
该资源为scipy-0.10.1-cp27-cp27mu-manylinux1_x86_64.whl,欢迎下载使用哦!
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
hive电商案例分析30.zip
# 基于蓝牙技术的多通道键盘 ## 项目简介 在多设备工作环境中,用户常常需要在家庭电脑、工作笔记本或平板电脑之间频繁切换键盘输入,这不仅占用了大量桌面空间,而且操作不便。本项目旨在通过蓝牙技术,设计一款能够同时连接多个设备并实现一键切换的多通道键盘,从而简化用户的操作流程,提高工作效率。 ## 项目的主要特性和功能 1. 多设备连接键盘可以同时连接多达三个不同的设备。 2. 一键切换通过按键即可快速切换输入目标设备。 3. 高性能微控制器采用ATMega32u4微控制器,提供足够的GPIO引脚,支持Arduino编程环境,便于固件开发和升级。 4. 蓝牙模块使用RN42蓝牙模块,确保稳定的设备连接和数据传输。 5. 电压调节器使用MIC4680电压调节器,确保系统稳定供电。 ## 安装使用步骤 1. 硬件准备 获取ATMega32u4微控制器、RN42蓝牙模块、MIC4680电压调节器等硬件组件。 2. 电路设计
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:本文详细解析了一个用于电动汽车转弯制动时ABS(防抱死系统)与DYC(横摆力矩控制)协同工作的Simulink模型。模型采用7自由度设计,涵盖纵向、横向、横摆运动及四轮旋转自由度,并引入轮胎魔术公式来精确模拟轮胎力特性。文章重点介绍了ABS系统中的滑移率观测与PID控制策略,以及DYC系统的滑模控制设计,特别是两者之间的协同控制逻辑。通过双移线工况测试验证,该模型能够显著提高车辆稳定性,将横摆角控制在3度以内,并缩短制动距离1.2米。文中还提供了关于模型优化、参数调试的具体建议,以及针对特定工况的仿真技巧。 适合人群:从事车辆控制系统开发的工程师、研究生及对汽车主动安全技术感兴趣的科研人员。 使用场景及目标:①研究ABS与DYC在电动汽车中的协同控制机制;②探索不同路面条件下车辆动态性能优化;③为ESP或TCS系统开发提供参考模型;④比较滑模控制与LQR控制在车辆控制中的应用效果。 阅读建议:建议读者重点关注7自由度模型的设计思路、轮胎魔术公式的实现方式、滑模控制参数调试过程以及ABS和DYC协同控制策略。由于模型涉及较多数学公式和Simulink实现细节,建议结合相关文献深入理解,并通过实际仿真加深认识。