`
uule
  • 浏览: 6373610 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

导出PDF (iText实现) PdfDownloadDS

 
阅读更多

调用:

导出 export-pdf-20141023135557的压缩包,包含PDF文件

多个服务内容在一个Service specification.pdf中

 

@RequestMapping(value = "esbService/exportPdf.do", method = RequestMethod.GET)
@ResponseBody
public void exportPdf(@RequestParam String srvIds, HttpServletResponse response){
	//logger.debug("exportPdf begin ..");
	
	//logger.debug("srvIds : " + srvIds);
	
	if(StringUtils.isNotBlank(srvIds)){
		List<Long> srvIdList = new ArrayList<Long>();
		String[] srvIdArr = srvIds.split(",");
		
		for(String ids : srvIdArr){
			Long id = null;
			try{
				id = Long.parseLong(ids);
			}catch(Exception e){
				logger.error("parse param error .." + e.getMessage());
				continue;
			}
			srvIdList.add(id);
		}
		//logger.debug("parse param pass ..");
		
		List<EsbServiceV> srvList = esbServiceVDS.getServiceList(srvIdList);
		
		// httpheader设置
		// 导出 export-pdf-20141023135557的压缩包,包含PDF文件
		response.setContentType("application/x-msdownload;");  
		response.setHeader("Content-disposition", "attachment; filename = export-pdf-" + String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", timestamp) + ".zip");
    
		/*若导出PDF
		response.setContentType("application/pdf");  
		response.setHeader("Content-disposition", "attachment; filename=export-pdf-" + String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", System.currentTimeMillis()) + ".pdf");*/
		
		Map<String, InputStream> in = new HashMap<String, InputStream>();
		try {
			byte[] out = esbPdfDownload.exportPdf(srvList);
			InputStream datas = new ByteArrayInputStream(out);
			in.put("Service specification.pdf", datas);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
        
		//logger.debug("zip file param : " + in);
		//logger.debug("compress file begin ..");
    
		try {
			CompressionUtil.zip2(in, response.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();			
		}
		
		//logger.debug("compress file end ..");
	}

	//logger.debug("exportPdf end ..");
}

 

MAVEN POM:

<dependency>
	<groupId>com.itextpdf</groupId>
	<artifactId>itextpdf</artifactId>
	<version>5.4.3</version>
</dependency>
<dependency>
	<groupId>com.itextpdf</groupId>
	<artifactId>itext-asian</artifactId>
	<version>5.2.0</version>
</dependency>	

 

 

 参考:

Java导出pdf (iText.jar)
http://sishuok.com/forum/blogPost/list/4378.html
http://90songjian.blog.51cto.com/2264714/649602

http://blog.csdn.net/uniorg/article/details/2219137
http://hintcnuie.iteye.com/blog/183690
http://quicker.iteye.com/blog/548805

 

工具类:

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;
import javax.swing.JTextField;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

@Service("iEsbPdfDownload")
public class EsbPdfDownloadDS implements IEsbPdfDownload {

	private static final Logger logger = LoggerFactory.getLogger(EsbPdfDownloadDS.class);
	
	@Autowired
	private IEsbServiceParaDao esbServiceParaDao;
	
	private Document doc = null;
	private String indentation = "   ";
	private BaseFont bfChinese = null;
	private Font fontChinese = null;
	private Font title = null;
	private Font title1 = null;
	private Font tableTitle = null;
	private Font tableFont = null;
	private Font tableEn = null;
	private float[] relativeWidths = null;
	private float[] relativeOutputWidths = null;
	private float[] baseSrvWidths = null;
	private ByteArrayOutputStream byteArray = null;
	private PdfPTable t1 = null;
	
/*程序入口:*/
	@Override
	public byte[] exportPdf(EsbServiceV srv) throws Exception{
		
		writePdfHeader(srv.getServiceNameEn());
		
		//doc.add(new Paragraph("Hello World, Hello iText"));
		
		writeBaseInfo(srv);// 写入基本信息
		// 写输入信息
		writeInputMes(srv);
		// 写输出信息
		writeOutPut(srv);
		
		doc.close();
			
		//byteArray.writeTo(response.getOutputStream());
		//response.getOutputStream().flush();
		return byteArray.toByteArray();
	}
	
	/**
	 * 写文件头 方法名称:writePdfHeader 功能描述:
	 * 
	 * @throws Exception
	 */
	private void writePdfHeader(String srvName) throws Exception {
		logger.debug("writePdfHeader begin ..");
		
		byteArray = new ByteArrayOutputStream();
		doc = new Document(PageSize.A4, 36, 36, 50, 50);
		relativeWidths = new float[] { 6f, 25f, 25f, 18f, 6f, 20f };// 设置表格宽度
		relativeOutputWidths = new float[] { 6f, 25f, 25f, 18f, 26f };// 设置表格宽度
		baseSrvWidths = new float[]{25f,75f};
		PdfWriter.getInstance(doc, byteArray);// 打开监听
		doc.open();
		doc.addTitle(srvName);
		// 设置中文字体
		bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
		fontChinese = new Font(bfChinese, 11, Font.NORMAL, BaseColor.BLACK);
		title = new Font(bfChinese, 15, Font.BOLD, BaseColor.BLACK);
		title1 = new Font(bfChinese, 10, Font.BOLD, BaseColor.BLACK);
		
		tableTitle = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLACK);
		tableFont = new Font(bfChinese, 10, Font.NORMAL, BaseColor.BLACK);
		tableEn = new Font();
		tableEn.setSize(9);
		
		logger.debug("writePdfHeader end ..");
	}
		
	/**
	 * 写输出参数信息 方法名称:writeOutPut 功能描述:
	 * 
	 * @param es
	 * @throws Exception
	 */
	private void writeOutPut(EsbServiceV v) throws Exception {
		doc.add(new Paragraph("2.输出", tableFont));
		// doc.add(new Paragraph(" "));
		t1 = getOutputTableHerder("");
		int i = 1;
		List<EsbServiceParameter> dataObject1 = new ArrayList<EsbServiceParameter>();
		List<EsbServiceParameter> outList = getEsbServiceParameter("PARAMETER_OUTPUT", v.getId(), -1L);
		for (EsbServiceParameter sp : outList) {
			if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) {
				dataObject1.add(sp);
			}
			writeOutputBody(sp, t1, i);
			i++;
		}
		// 如果没有参数,输出“无”
		if (null != outList && outList.size() > 0) {
			doc.add(new Paragraph(" "));
			doc.add(t1);
		} else {
			doc.add(new Paragraph(indentation + indentation + "无", fontChinese));
		}

		while (dataObject1.size() > 0) {
			i = 1;
			List<EsbServiceParameter> temp = new ArrayList<EsbServiceParameter>();
			EsbServiceParameter p = dataObject1.get(0);
			String title = p.getParameterNameCh().equals(p.getParameterNameEn()) ? p.getParameterNameEn() : p.getParameterNameCh() + "(" + p.getParameterNameEn() + ")";
			
			PdfPTable t = getOutputTableHerder(title);
			List<EsbServiceParameter> inListNode1 = getEsbServiceParameter("PARAMETER_OUTPUT", v.getId(), p.getId());
			for (EsbServiceParameter sp : inListNode1) {
				if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) {
					temp.add(sp);
				}
				writeOutputBody(sp, t, i);
				i++;
			}
			doc.add(t);
			dataObject1.remove(0);
			// 调整输出顺序
			for (EsbServiceParameter sp : dataObject1) {
				temp.add(sp);
			}
			dataObject1 = temp;
		}
	}
	
	
	private PdfPTable getOutputTableHerder(String mes) throws DocumentException {
		PdfPTable t1 = new PdfPTable(5);
		t1.setWidthPercentage(95f);
		t1.setWidths(relativeOutputWidths);

		// 设置标题信息
		if (!"".equals(mes)) {
			Font ft = null;
			if(mes.indexOf("(") >= 0){
				ft = tableTitle;
			}else{
				ft = tableEn;
			}
			PdfPCell p = new PdfPCell(new Paragraph(mes, ft));
			p.setColspan(5);
			p.setBorder(0);
			t1.addCell(p);
		}

		// ///////////表头
		PdfPCell p1 = new PdfPCell(new Paragraph("序号", tableTitle));
		p1.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p1);

		PdfPCell p3 = new PdfPCell(new Paragraph("字段名称", tableTitle));
		p3.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p3);

		PdfPCell p4 = new PdfPCell(new Paragraph("字段描述", tableTitle));
		p4.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p4);

		PdfPCell p5 = new PdfPCell(new Paragraph("数据类型", tableTitle));
		p5.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p5);

		PdfPCell p6 = new PdfPCell(new Paragraph("备注", tableTitle));
		p6.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p6);

		return t1;
	}
	
	/**
	 * 写输入参数 方法名称:writeInputMes 功能描述:
	 * 
	 * @param es
	 * @throws Exception
	 */
	private void writeInputMes(EsbServiceV srv) throws Exception {
		doc.add(new Paragraph("2.输入", tableFont));
		// doc.add(new Paragraph(" "));
		t1 = getInputTableHerder("");
		// 获取输入参数,一级参数
		int i = 1;
		List<EsbServiceParameter> dataObject = new ArrayList<EsbServiceParameter>();
		List<EsbServiceParameter> inList = getEsbServiceParameter("PARAMETER_INPUT", srv.getId(), -1L);
		for (EsbServiceParameter sp : inList) {
			if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) {
				dataObject.add(sp);
			}
			writeInputBody(sp, t1, i);
			i++;
		}
		// 如果没有参数,输出“无”
		if (null != inList && inList.size() > 0) {
			doc.add(new Paragraph(" "));
			doc.add(t1);
		} else {
			doc.add(new Paragraph("无", fontChinese));
		}
		while (dataObject.size() > 0) {
			i = 1;
			List<EsbServiceParameter> temp = new ArrayList<EsbServiceParameter>();
			EsbServiceParameter p = dataObject.get(0);
			String title = p.getParameterNameCh().equals(p.getParameterNameEn()) ? p.getParameterNameEn() : p.getParameterNameCh() + "(" + p.getParameterNameEn() + ")";
			
			PdfPTable t = getInputTableHerder(title);
			List<EsbServiceParameter> inListNode = getEsbServiceParameter("PARAMETER_INPUT", srv.getId(), p.getId());
			for (EsbServiceParameter sp : inListNode) {
				if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) {
					temp.add(sp);
				}
				writeInputBody(sp, t, i);
				i++;
			}
			doc.add(t);
			dataObject.remove(0);
			// 调整输出顺序
			for (EsbServiceParameter sp : dataObject) {
				temp.add(sp);
			}
			dataObject = temp;
		}
	}
	
	private List<EsbServiceParameter> getEsbServiceParameter(String parameterType, Long srvId , Long parentParameterId) {
		List<EsbServiceParameter> list = new ArrayList<EsbServiceParameter>();
		String hql = "from EsbServiceParameter o where o.serviceId = "+ srvId +" and o.parameterType = '"+parameterType+"' and o.parameterParentId = "+parentParameterId+" and o.enabledFlag='Y' order by o.id asc";
		list = (List<EsbServiceParameter>) esbServiceParaDao.findByHql(hql);
		return list;
	}
	
	/**
	 * 写表体 方法名称:writeBody 功能描述:
	 * 
	 * @param sp
	 * @param t1
	 * @param i
	 * @throws DocumentException
	 */
	private void writeInputBody(EsbServiceParameter sp, PdfPTable t1, int i) throws DocumentException {
		t1.addCell(new Paragraph(i + ".", tableEn));
		t1.addCell(new Paragraph(sp.getParameterNameEn(),tableEn));
		String cn = sp.getParameterNameCh().trim();
		if(cn.indexOf("_") >= 0 || "MsgHeader".equals(cn)){
			t1.addCell(new Paragraph(cn, tableEn));
		}else{
			t1.addCell(new Paragraph(cn, tableFont));
		}
//		t1.addCell(new Paragraph(sp.getParameterNameCh(), tableFont));
		String cellText = getCellTextForDataType(sp);
		t1.addCell(new Paragraph(cellText, tableEn));
		t1.addCell(new Paragraph(sp.getIsNullFlag(), tableFont));
		t1.addCell(new Paragraph(sp.getConstraints(), tableFont));
		// doc.add(t1);
	}
	
	/**
	 * 写表体 方法名称:writeBody 功能描述:
	 * 
	 * @param sp
	 * @param t1
	 * @param i
	 * @throws DocumentException
	 */
	private void writeOutputBody(EsbServiceParameter sp, PdfPTable t1, int i) throws DocumentException {
		t1.addCell(new Paragraph(i + ".", tableEn));
		t1.addCell(new Paragraph(sp.getParameterNameEn(), tableEn));
		String cn = sp.getParameterNameCh().trim();
		if(cn.indexOf("_") >= 0 || "MsgHeader".equals(cn)){
			t1.addCell(new Paragraph(cn, tableEn));
		}else{
			t1.addCell(new Paragraph(cn, tableFont));
		}
		
		String cellText = getCellTextForDataType(sp);
		t1.addCell(new Paragraph(cellText, tableEn));
		t1.addCell(new Paragraph(sp.getRemark(), tableFont));
		// doc.add(t1);
	}
	
	private String getCellTextForDataType(EsbServiceParameter sp) {
		String cellText = "";
		String dataType = sp.getDataType();
		if (Constants.SRV_PARAM_DATA_TYPE_VARCHAR.equals(dataType) || Constants.SRV_PARAM_DATA_TYPE_VARCHAR2.equals(dataType)) {
			Long len = sp.getDataLength();
			if (len != null) {
				cellText = dataType + "(" + len + ")";
			} else {
				cellText = dataType;
			}
			return cellText;
		}
		cellText = dataType;
		return cellText;
	}
	
	private PdfPTable getInputTableHerder(String mes) throws DocumentException {
		PdfPTable t1 = new PdfPTable(6);
		t1.setWidthPercentage(95f);
		t1.setWidths(relativeWidths);

		// 设置标题信息
		if (!"".equals(mes)) {
			Font ft = null;
			if(mes.indexOf("(") >= 0){
				ft = tableTitle;
			}else{
				ft = tableEn;
			}
			PdfPCell p = new PdfPCell(new Paragraph(mes, ft));
			p.setColspan(6);
			p.setBorder(0);
			t1.addCell(p);
		}

		// ///////////表头
		PdfPCell p1 = new PdfPCell(new Paragraph("序号", tableTitle));
		p1.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p1);

		PdfPCell p3 = new PdfPCell(new Paragraph("字段名称", tableTitle));
		p3.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p3);

		PdfPCell p4 = new PdfPCell(new Paragraph("字段描述", tableTitle));
		p4.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p4);

		PdfPCell p5 = new PdfPCell(new Paragraph("数据类型", tableTitle));
		p5.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p5);

		PdfPCell p2 = new PdfPCell(new Paragraph("要求", tableTitle));
		p2.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p2);
		
		PdfPCell p6 = new PdfPCell(new Paragraph("字段约束", tableTitle));
		p6.setBackgroundColor(BaseColor.GRAY);
		t1.addCell(p6);

		return t1;
	}
	
	public String setDefaultValue(String value){
		if(StringUtils.isBlank(value)){
			value = "无";
		}
		return value;
	}
	
	/**
	 * 写服务的基本信息 方法名称:writeBaseInfo 功能描述: 写服务的基本信息
	 * 
	 * @param es
	 * @param i
	 * @throws Exception
	 */
	private void writeBaseInfo(EsbServiceV srv) throws Exception {
		
		PdfPTable t1 = new PdfPTable(2);
		t1.setWidthPercentage(95f);
		t1.setWidths(baseSrvWidths);

		Paragraph pf = new Paragraph();
		pf.setAlignment(Element.ALIGN_CENTER);
		pf.add(new Paragraph(srv.getServiceNameCN(), title));
		PdfPCell name = new PdfPCell(pf);
		name.setColspan(2);
		name.setBorder(0);
		name.setHorizontalAlignment(JTextField.CENTER);
		t1.addCell(name);
		
		PdfPCell p1 = new PdfPCell(new Paragraph("1、服务信息", tableFont));
		p1.setColspan(2);
		p1.setBorder(0);
		t1.addCell(p1);
		
		PdfPCell p11 = new PdfPCell(new Paragraph("服务标识", title1));
		t1.addCell(p11);
		PdfPCell p12 = new PdfPCell(new Paragraph(srv.getServiceNumber(), tableEn));
		t1.addCell(p12);
		
		
		PdfPCell p21 = new PdfPCell(new Paragraph("服务名称", title1));
		t1.addCell(p21);
		PdfPCell p22 = new PdfPCell(new Paragraph(srv.getServiceNameCN() + "(" + srv.getServiceNameEn() + ")", tableFont));
		t1.addCell(p22);
		
		PdfPCell p31 = new PdfPCell(new Paragraph("服务描述", title1));
		t1.addCell(p31);		
		PdfPCell p32 = new PdfPCell(new Paragraph(setDefaultValue(srv.getDescription()), tableFont));
		t1.addCell(p32);
		
		PdfPCell p41 = new PdfPCell(new Paragraph("服务类型", title1));
		t1.addCell(p41);
		PdfPCell p42 = new PdfPCell(new Paragraph(srv.getServiceTypeName(), tableFont));
		t1.addCell(p42);
		
		PdfPCell p51 = new PdfPCell(new Paragraph("同步/异步方式", title1));
		t1.addCell(p51);		
		PdfPCell p52 = new PdfPCell(new Paragraph(setDefaultValue(srv.getSynOrAsyncName()), tableFont));
		t1.addCell(p52);
		
		PdfPCell p61 = new PdfPCell(new Paragraph("实现方式", title1));
		t1.addCell(p61);
		PdfPCell p62 = new PdfPCell(new Paragraph(setDefaultValue(srv.getMethodName()), tableEn));
		t1.addCell(p62);
		
		PdfPCell p71 = new PdfPCell(new Paragraph("业务场景说明", title1));
		t1.addCell(p71);
		PdfPCell p72 = new PdfPCell(new Paragraph(setDefaultValue(srv.getApplicationSence()), tableFont));
		t1.addCell(p72);
		
		PdfPCell p81 = new PdfPCell(new Paragraph("业务规则和逻辑", title1));
		t1.addCell(p81);
		PdfPCell p82 = new PdfPCell(new Paragraph(setDefaultValue(srv.getBussnessLogic()), tableFont));
		t1.addCell(p82);
		
		PdfPCell p91 = new PdfPCell(new Paragraph("出错和异常处理机制", title1));
		t1.addCell(p91);
		PdfPCell p92 = new PdfPCell(new Paragraph(setDefaultValue(srv.getExceptionHandle()), tableFont));
		t1.addCell(p92);
		
		PdfPCell p101 = new PdfPCell(new Paragraph("数据量", title1));
		t1.addCell(p101);
		PdfPCell p102 = new PdfPCell(new Paragraph(setDefaultValue(srv.getDataLength()), tableFont));
		t1.addCell(p102);
		
		PdfPCell p111 = new PdfPCell(new Paragraph("响应时间要求", title1));
		t1.addCell(p111);
		PdfPCell p112 = new PdfPCell(new Paragraph(setDefaultValue(srv.getTimeResponse()), tableFont));
		t1.addCell(p112);
		
		PdfPCell p121 = new PdfPCell(new Paragraph("服务安全和权限要求", title1));
		t1.addCell(p121);
		PdfPCell p122 = new PdfPCell(new Paragraph(setDefaultValue(srv.getSecurityPermission()), tableFont));
		t1.addCell(p122);
		
		PdfPCell p131 = new PdfPCell(new Paragraph("使用建议", title1));
		t1.addCell(p131);
		PdfPCell p132 = new PdfPCell(new Paragraph(setDefaultValue(srv.getSuggestion()), tableFont));
		t1.addCell(p132);
		
		doc.add(t1);

	}
	
	
}

 

 结果样式:



 

 

  • 大小: 101.5 KB
  • 大小: 110.9 KB
分享到:
评论

相关推荐

    多目标白鲸优化算法MOBWO:在多目标测试函数中的实证与应用分析,多目标白鲸优化算法MOBWO的实证研究:在九个测试函数中的表现与评估,多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Mat

    多目标白鲸优化算法MOBWO:在多目标测试函数中的实证与应用分析,多目标白鲸优化算法MOBWO的实证研究:在九个测试函数中的表现与评估,多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好,可直接运行,算法新颖 1将蛇优化算法的优良策略与多目标优化算法框架(网格法)结合形成多目标蛇优化算法(MOSO),为了验证所提的MOSO的有效性,将其在9个多目标测试函数 (ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、Kursawe、Poloni,Viennet2、Viennet3) 上实验,并采用IGD、GD、HV、SP四种评价指标进行评价,部分效果如图1所示,可完全满足您的需求~ 2源文件夹包含MOBWO所有代码(含9个多目标测试函数)以及原始白鲸优化算法文献 3代码适合新手小白学习,一键运行main文件即可轻松出图 4仅包含Matlab代码,后可保证原始程序运行~ ,多目标白鲸优化算法(MOBWO); 测试函数; Matlab语言; 程序调试; 算法新颖; 多目标蛇优化算法(MOSO); IGD、GD、HV、SP评价指标; 代码学习; 轻松出图。,基于

    【图像加密】基于matlab图像加密的混沌地图晶格系统的评估【含Matlab源码 9901期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像融合】基于matlab像素的多焦点和多光谱图像融合【含Matlab源码 7572期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    中国石油微服务开发REST API接口定义规范及其安全设计

    内容概要:本文介绍了在中国石油勘探开发梦想云平台上定义REST API接口的基本规范,旨在提高接口质量,便于开发、测试和维护。主要内容包括REST API的基础概念,设计流程,URI、HTTP方法及响应状态码的运用,API文档的管理以及Swagger工具的应用,还详细阐述了API安全认证,特别是JWT的应用。通过这份文档能够帮助开发者理解和实施高质量的微服务架构。 适用人群:适用于参与或计划参与微服务项目的开发团队,尤其是那些致力于提升REST API接口质量和效率的专业技术人员。 使用场景及目标:文档的目标在于引导用户理解REST API接口设计的关键要素,如资源命名、方法选择等,并教会他们如何有效管理和保护这些API,确保其稳定性和安全性。通过实践本指南的原则,用户可以构建出更加健壮的分布式应用程序接口。 其他说明:此外,文中提供了大量关于API文档生成与维护的最佳做法,强调了文档更新须与代码同步,同时也探讨了API变更管理的有效方法。在安全方面,重点讲述了JWT的构成及其工作机制,展示了利用JWT实现高效认证的具体实例。

    【电力变压器】基于matlab电力变压器能量限制【含Matlab源码 10013期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习多输入单输出时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:该文档详细介绍了基于双向长短期记忆(BiLSTM)神经网络与Adaboost集成学习的时间序列预测模型及其应用。文中阐述了项目背景,指出了传统LSTM在复杂数据下存在的局限,提出了通过BiLSTM增强前后依赖关系,并结合Adaboost优化模型精度与泛化能力的方法。全文涵盖了从数据预处理、特征提取到建模、评估、以及GUI设计在内的全过程,并展示了该模型在金融预测、气象预报、能源管理和生产调度等多个领域的广泛应用潜力。文章还包括对代码片段的具体解析、模型部署的考量及未来发展的展望。 适合人群:拥有基本的机器学习与神经网络基础的研究人员和技术开发者,尤其是那些正在寻找时间序列数据分析解决方案的专业人士。 使用场景及目标:1. 多个领域如金融市场、气象预测等的时间序列数据处理任务中;2. 解决传统单一神经网络可能出现的过拟合并优化模型的鲁棒性和准确性。 其他说明:除了详细讲解如何使用Matlab实施完整的BiLSTM和Adaboost集成外,文中还特别注意到了模型调优的重要性——通过超参数搜索、早停策略和其他正则化技巧以预防过拟合情况的发生。此外,文档还讨论了有关实时数据处理、模型安全性和可移植性的要点。附带完整的Matlab代码实现了从环境准备直到预测结果可视化的每一个步骤,使读者可以很容易地复现和定制整个工作流程。

    【重力仿真】基于matlab GUI水平圆柱体重力异常正演【含Matlab源码 11176期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Go语言1.24版本新特性详解与高性能博客系统miniblog实战项目

    内容概要:Go 1.24 版本引入了多项关键改进,其中包括:泛型类型别名,允许类型别名携带类型参数,简化代码实现;弱指针避免对象因包含在缓存中而无法被释放的问题;改进了终结器,提供了新的运行时函数 AddCleanup 以增强对象清理的灵活性和可靠性。另外,Go 1.24 改善了 map 的默认实现,显著提升了其运行时性能。与此同时,开源项目 miniblog 是一个功能全面、易于理解的 Go 实战项目。该项目采用了类似 Kubernetes 的三层架构设计,涵盖了许多 Go 项目开发的最佳实践和技术栈,不仅有助于开发者理解 Go 项目的核心理念和实施方法,还能提供一系列开发脚手架工具、配套课程和支持材料,以便更轻松地开展实际项目。 适合人群:1年以上 Go 开发经验的研发人员或正在寻找优秀 Go 项目充实自己简历的技术人员。 使用场景及目标:该总结的目标是帮助有一定 Go 基础的知识分子迅速了解新特性及其实用价值。miniblog 项目特别适用于希望加深对 Go 实践认识的学习者,尤其是那些想要通过参与实际编码练习和深入理解 Go 内部工作机制的人群。通过这两个方面的内容学习可以帮助使用者更好地理解 Go 新增特性的应用前景和发展方向,并能够在实践中灵活应用。 其他说明:本文档不仅涵盖了新特性的技术和理论要点,同时也展示了如何通过动手实践强化技能的具体例子。阅读本文不仅可以学到最新的 Go 编程技巧,还将了解到实际开发过程中面临的挑战及其解决方案。此外,还提供了一份详细的安装指导,以及一些常见的操作指南。对于新手而言,可以通过提供的完整配套资料逐步建立起个人的知识体系;而对于资深开发者,则可以在更高层次上审视自身项目的架构设计,进而推动技术创新和个人职业发展。

    智能对话机器人+deepseek+支持微信公众号、企业微信应用、飞书、钉钉接入+基于大模型的智能对话机器人,支持微信公众号、企业

    CoW项目是基于大模型的智能对话机器人,支持微信公众号、企业微信应用、飞书、钉钉接入,可选择GPT3.5/GPT4.0/Claude/Gemini/LinkAI/ChatGLM/KIMI/文心一言/讯飞星火/通义千问/LinkAI,能处理文本、语音和图片,通过插件访问操作系统和互联网等外部资源,支持基于自有知识库定制企业AI应用。 功能如下: 1、 多端部署: 有多种部署方式可选择且功能完备,目前已支持微信公众号、企业微信应用、飞书、钉钉等部署方式 2、 基础对话: 私聊及群聊的消息智能回复,支持多轮会话上下文记忆,支持 GPT-3.5, GPT-4o-mini, GPT-4o, GPT-4, Claude-3.5, Gemini, 文心一言, 讯飞星火, 通义千问,ChatGLM-4,Kimi(月之暗面), MiniMax, GiteeAI 3、 语音能力: 可识别语音消息,通过文字或语音回复,支持 azure, baidu, google, openai(whisper/tts) 等多种语音模型 4、 图像能力: 支持图片生等

    【车间调度】基于matlab哈里斯鹰算法HHO求解分布式置换流水车间调度DPFSP【含Matlab源码 6143期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像处理】颜色恒常性算法水下图像处理【含Matlab源码 474期】.md

    CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像去噪】基于matlab中值滤波、均值滤波和非局部均值滤波NLM图像去噪【含Matlab源码 10364期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于LabVIEW的滚动轴承故障诊断系统:一种振动信号采集与故障诊断的实用设计与实践验证,基于LabVIEW的滚动轴承高效故障诊断系统设计与应用研究,基于LabVIEW的滚动轴承故障诊断系统. 实现对

    基于LabVIEW的滚动轴承故障诊断系统:一种振动信号采集与故障诊断的实用设计与实践验证,基于LabVIEW的滚动轴承高效故障诊断系统设计与应用研究,基于LabVIEW的滚动轴承故障诊断系统. 实现对滚动轴承工作状态的监测,提出了一种基于 Lab VIEW 的滚动轴承故障诊断系统的设计方案,给出了滚动轴承振动信号的采集与故障诊断方法,在 Lab VIEW 的诊断平台下进行信号处理与分析,然后结合滚动轴承故障诊断理论与信号分析结果来对该轴承运行状态进行判断。 最后利用旋转机械振动及故障模拟试验平台对该系统进行验证,验证结果体现了该系统具有可行性和适用性。 ,LabVIEW; 滚动轴承故障诊断系统; 振动信号采集; 故障诊断方法; 信号处理与分析; 验证测试; 可行性; 适用性,基于LabVIEW的滚动轴承故障诊断系统设计与验证

    Javascript语言视频教程.zip

    Javascript语言视频教程,涵盖Javascript语言基础和高级教程,零基础入门。

    在链表的前面-开头插入一个节点

    python在链表的前面-开头插入一个节点

    【图像融合】加权平均+HIS+高通滤波+灰度调制图像融合【含Matlab源码 8041期】.md

    CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    《基于改进动态窗口DWA模糊自适应调整权重的路径规划算法研究及其MATLAB实现》,《基于改进动态窗口DWA的模糊自适应权重调整路径规划算法及其MATLAB实现》,基于改进动态窗口 DWA 模糊自适应

    《基于改进动态窗口DWA模糊自适应调整权重的路径规划算法研究及其MATLAB实现》,《基于改进动态窗口DWA的模糊自适应权重调整路径规划算法及其MATLAB实现》,基于改进动态窗口 DWA 模糊自适应调整权重的路径基于改进动态窗口 DWA 模糊自适应调整权重的路径规划算法 MATLAB 源码+文档 《栅格地图可修改》 基本DWA算法能够有效地避免碰撞并尽可能接近目标点,但评价函数的权重因子需要根据实际情况进行调整。 为了提高DWA算法的性能,本文提出了一种改进DWA算法,通过模糊控制自适应调整评价因子权重,改进DWA算法的实现过程如下: 定义模糊评价函数。 模糊评价函数是一种能够处理不确定性和模糊性的评价函数。 它将输入值映射到模糊隶属度,根据规则计算输出值。 在改进DWA算法中,我们定义了一个三输入一输出的模糊评价函数,输入包括距离、航向和速度,输出为权重因子。 [1]实时调整权重因子。 在基本DWA算法中,权重因子需要根据实际情况进行调整,这需要人工干预。 在改进DWA算法中,我们通过模糊控制实现自适应调整,以提高算法的性能。 [2]评估路径。 通过路径的长度和避障情况等指标评估路

    基于MATLAB平台PCA算法的人脸识别系统:程序调试成功,可替换数据获取高准确率识别结果,基于MATLAB平台PCA算法的人脸识别系统:程序调试与自我数据替换实现高精度识别结果,基于MATLAB平台

    基于MATLAB平台PCA算法的人脸识别系统:程序调试成功,可替换数据获取高准确率识别结果,基于MATLAB平台PCA算法的人脸识别系统:程序调试与自我数据替换实现高精度识别结果,基于MATLAB平台PCA的人脸识别,程序已调通,可将自己的数据替进行识别。 得到识别准确率结果。 ,基于MATLAB平台PCA的人脸识别; 程序已调通; 数据替换; 识别准确率。,MATLAB平台PCA人脸识别程序:调通后实现高准确率识别

    【潮流计算】基于matlab GUI牛顿拉夫逊法解潮流【含Matlab源码 11034期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

Global site tag (gtag.js) - Google Analytics