Jasperreport+ireport 实践操作及web应用
1.字段,变量,參数,传參
2.矢量图,位图
3.超链接,锚
4.数据源,自己定义数据源
5.国际化(I18N)
6.脚本
7.子报表
8.图表(饼图,柱图,线图)
9.导出pdf,xls,html...
操作版本号:jasperreports2.0.2+ireport2.0.2
下面针对每一个知识点,解说在ireport中是怎样操作,以及在真实项目中怎样部署.
点击 Parameters 菜单,此时弹出一个操作參数的窗体,单击 New button,输入參数名(Parameter Name),选择參数类型(Parameter Class Type),如要赋一个默认值则填写默认值表达式(Default Value Expression)(默认值如为字符串则以"string"形式填写,如为整形则以 new Integer(1) 形式填写,以此类推.),填好后,点 OK 就新建了一个參数了.
定义字段与定义參数是一样的操作,至于定义变量操作差点儿相同,也相对少用一些,在此就不讲述.
在ireport中怎样引用字段,变量,參数?
引用字段使用 $F{field_name}
引用变量使用 $V{variable_name}
引用參数使用 $P{param_name} 或 $P!{param_name}
$P!{param_name}一般用于拼接sql语句,它的值能够与sql语句拼接后,再去运行查询.
例:定义一个參数名为 where 类型为String 默认值为 "where id=100"
有一查询语句:select * from user $P!{where}
则运行查询时会替换成:select * from user where id=100
$P{param_name}在sql语句中使用时,也有一特殊情况.
例:有一參数名为 id,类型为Integer,默认值为 new Integer(100)
有一查询语句:select * from user where id=$P{id}
运行查询可正常查询,但假设有一參数名为 name,类型为String,默认值为"zhanngle"
有一查询语句:select * from user where name=$P{name}
运行查询时出错,不知道为什么(即使数据库中有该条记录),不知是不是bug,还是自已哪里弄错了.解决的方法是,将查询语句改为:select * from user where name='$P!{name}'
能够证明$P!{}语法,仅仅做替换操作,如上仅仅将$P!{name}替换成zhanngle.
也能够证明$P{}语法,在sql语句中使用时,值为数字类型还能够正常运行,如为字符串类型则会出错.
在程序中怎样传參?
如上例定义了一个name參数,那么在程序中怎样动态传參查询出不同的记录呢,也非常easy.
程序代码例如以下:
params.put("name","zhanngle");
JasperPrint print=JasperFillManager.fillReport(jasper, params,conn);
就是将參数名和值put进入一map,然后再填充报表时将map传过去即可了.
你也能够设置使用我们配制的外部程序来预览,点Build -> PDF Preview,再点Execute (empty data source)button,就可以预览PDF文件。点Build -> HTML Preview,再点Execute (empty data source)button。就可以预览HTML文件。
Map params=new HashMap();
Params.put(“imageName”,context.getRealPath(“/reports/test.jpg”));
JasperPrint print=JasperFillManager.fillReport(jasper, params,conn);
<servlet-name>JasperreportsImageServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JasperreportsImageServlet</servlet-name>
<url-pattern>/servlets/image</url-pattern>
</servlet-mapping>
2.程序代码按下面方式编写
Map params=new HashMap();
Params.put(“imageName”,context.getRealPath(“/reports/test.jpg”));
Map imageMap=new HashMap();
request.getSession().setAttribute("IMAGES_MAP", imageMap);
JasperPrint print=JasperFillManager.fillReport(jasper,params,conn);
request.getSession().setAttribute(net.sf.jasperreports.j2ee.servlets.ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,print);
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter());
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,imageMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath()+"/servlets/image?
image=
");
exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
否则配制错误,请检查哪里出错。
调整好Detail区域的高度,执行(Build -> Execute (whit active connection))一下看看吧,假设你看到有正确数据,那恭喜你,你试验成功了!
...{
public boolean next() throws JRException;
public Object getFieldValue(JRField jrField) throws
JRException;
}
下面我是我自己定义的一个数据源码:
import java.sql.Timestamp;
publicclass Bean ...{
privateintID;
private String NAME;
private String NICKNAME;
privateintSCORE;
privatefloatBALANCE;
private Timestamp LASTLOGINDATE;
publicfloat getBALANCE() ...{
returnBALANCE;
}
publicvoid setBALANCE(float balance) ...{
this.BALANCE = balance;
}
publicint getID() ...{
returnID;
}
publicvoid setID(int id) ...{
this.ID = id;
}
public Timestamp getLASTLOGINDATE() ...{
returnLASTLOGINDATE;
}
publicvoid setLASTLOGINDATE(Timestamp lastLoginDate) ...{
this.LASTLOGINDATE = lastLoginDate;
}
public String getNAME() ...{
returnNAME;
}
publicvoid setNAME(String name) ...{
this.NAME = name;
}
public String getNICKNAME() ...{
returnNICKNAME;
}
publicvoid setNICKNAME(String nickname) ...{
this.NICKNAME = nickname;
}
publicint getSCORE() ...{
returnSCORE;
}
publicvoid setSCORE(int score) ...{
this.SCORE = score;
}
}
2.创建实现数据源类
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
publicclass TestBeanDataSource implements JRDataSource ...{
private List list;
privateintindex=-1;
public TestBeanDataSource() ...{
list=new ArrayList();
Bean bean=null;
for(int i=0;i<100;i++) ...{
bean=new Bean();
bean.setID(i);
bean.setNAME("name"+i);
bean.setNICKNAME("nickname"+i);
bean.setBALANCE((float)(Math.random()*100*i));
bean.setSCORE(i*2);
bean.setLASTLOGINDATE(new Timestamp(System.currentTimeMillis()));
list.add(bean);
}
}
publicboolean next() throws JRException ...{
return ++index<list.size();
// return false;
}
public Object getFieldValue(JRField field) throws JRException ...{
Bean bean=(Bean)list.get(index);
String fieldName=field.getName();
try ...{
return PropertyUtils.getProperty(bean,fieldName);
} catch (Exception e) ...{
thrownew JRException(e);
}
}
public List getList() ...{
returnlist;
}
publicvoid setList(List list) ...{
this.list = list;
}
}
3.在填充报表时将该DataSource传进去即可了。
JRHtmlExporter exporter = new JRHtmlExporter();
…
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
…
exporter.exportReport();
此时报表数据的来源。就是从自己定义数据源中得到的100条记录。
import net.sf.jasperreports.engine.JRDataSource;
publicclass TestCustomJRDataSourceFactory ...{
publicstatic JRDataSource test() ...{
returnnew TestBeanDataSource();
}
}
2.因为是自己定义数据源,因此要将数据源引用的相关类,所有引入ireport的classpath。以供ireport调用,否则ireport会抛java.lang.ClassNotFoundException。比如我以上三个类都是放在d:/workspace/jasperreports/classes文件夹下,那么点 Options -> Classpath -> Add Folder 选择d:/workspace/jasperreports/classes,选择好后,点Save Classpath。
5.国际化(I18N)
假设你对ResourceBundle类有些了解,那么你就会知道输入的是什么意思。
国际化,然后保存。
再编辑I18NTest_en.properties,在属性文件里添加一条i18n=hello I18n,保存。
arg1
)
脚本中的一些方法被报表引擎的调用,当一些特殊的事件,像创建一个新页或者处理detail 行。
/** *//**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRDefaultScriptlet.java,v 1.3 2004/06/01 20:28:22
teodord Exp $
*/
public class JRDefaultScriptlet extends JRAbstractScriptlet
...{
public JRDefaultScriptlet() ...{ }
public void beforeReportInit() throws JRScriptletException
...{
}
public void afterReportInit() throws JRScriptletException
...{
}
public void beforePageInit() throws JRScriptletException
...{
}
public void afterPageInit() throws JRScriptletException
...{
}
public void beforeColumnInit() throws JRScriptletException
...{
}
public void afterColumnInit() throws JRScriptletException
...{
}
public void beforeGroupInit(String groupName) throws
JRScriptletException
...{
}
public void afterGroupInit(String groupName) throws
JRScriptletException
...{
}
public void beforeDetailEval() throws JRScriptletException
...{
}
public void afterDetailEval() throws JRScriptletException
...{
}
}
public class <ScriptletClassName> extends it.businesslogic.ireport.IReportScriptlet ...{
/** *//** Creates a new instance of JRIreportDefaultScriptlet */
public <ScriptletClassName>() ...{
System.out.println("create scriptlet...");
}
public int max(int a,int b) ...{
if(a>=b) return a;
return b;
}
}
然后点Save保存。即创建了一个脚本。并再保存报表文件,此时你能够到报表文件文件夹找到一个TestScriptleScriptlet的java文件。这就是ireport自己主动生成的脚本类文件(脚本类名= 报表名+Scriptlet)。
8.图表(饼图,柱图,线图)
9.导出pdf,xls,html...
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oracle.jdbc.driver.OracleDriver;
import test.TestBeanDataSource;
import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.base.JRBaseReport;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;
publicclass ExportReportServlet extends HttpServlet ...{
/** *//**
*Destructionoftheservlet.<br>
*/
publicvoid destroy() ...{
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
String view=request.getParameter("view");
if(view==null || view.trim().length()==0) return;
if(view.equalsIgnoreCase("html")) doHtml(request,response);
if(view.equalsIgnoreCase("pdf")) doPdf(request,response);
if(view.equalsIgnoreCase("xls")) doExcel(request,response);
if(view.equalsIgnoreCase("xml")) doXml(request,response);
}
privatevoid doHtml(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
ServletContext context=getServletContext();
//String jrxml=context.getRealPath("/WEB-INF/reports/Test1.jrxml");
/**//*
try {
String jasper=context.getRealPath("/WEB-INF/reports/Test1.jasper");
String html="/reports/"+System.currentTimeMillis()+".html";
JasperRunManager.runReportToHtmlFile(jasper,context.getRealPath(html),new HashMap(),getConn());
response.sendRedirect(request.getContextPath()+html);
} catch (JRException e) { e.printStackTrace(); }
*/
String reportDir=context.getRealPath("/WEB-INF/reports");
String jasper=reportDir+"/Test1.jasper";
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
Map map=new HashMap();
Map imageMap=new HashMap();
map.put("exportType","html");
map.put("imageTest",context.getRealPath("/reports/star.gif"));
map.put("SUBREPORT_DIR",reportDir+"/");
request.getSession().setAttribute("IMAGES_MAP", imageMap);
Connection conn=getConn();
try ...{
// JasperPrint print=JasperFillManager.fillReport(jasper,map,new TestBeanDataSource());
JasperPrint print=JasperFillManager.fillReport(jasper,map,conn);
// JasperPrint print=JasperFillManager.fillReport(jasper,map,new JREmptyDataSource());
JRHtmlExporter exporter = new JRHtmlExporter();
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,print);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter());
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,imageMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath()+"/servlets/image?image=");
exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
exporter.exportReport();
} catch (JRException e) ...{
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
e.printStackTrace(pw);
response.setContentType("text/plain");
response.getOutputStream().print(sw.toString());
} finally ...{
if(conn!=null)
try ...{
if(!conn.isClosed()) conn.close();
} catch (SQLException e) ...{
e.printStackTrace();
}
}
}
privatevoid doPdf(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
ServletContext context=getServletContext();
//String jrxml=context.getRealPath("/WEB-INF/reports/Test1.jrxml");
String reportDir=context.getRealPath("/WEB-INF/reports");
String jasper=reportDir+"/Test1.jasper";
response.setContentType("application/pdf");
Map map=new HashMap();
map.put("exportType","pdf");
map.put("imageTest",context.getRealPath("/reports/star.gif"));
map.put("SUBREPORT_DIR",reportDir+"/");
Connection conn=getConn();
try ...{
OutputStream os=response.getOutputStream();
InputStream is=new FileInputStream(jasper);
JasperRunManager.runReportToPdfStream(is,os,map,conn);
// JasperRunManager.runReportToPdfStream(is,os,map,new TestBeanDataSource());
os.flush();
os.close();
} catch (JRException e) ...{
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
e.printStackTrace(pw);
response.setContentType("text/plain");
response.getOutputStream().print(sw.toString());
} finally ...{
if(conn!=null)
try ...{
if(!conn.isClosed()) conn.close();
} catch (SQLException e) ...{
e.printStackTrace();
}
}
}
privatevoid doExcel(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
ServletContext context=getServletContext();
String reportDir=context.getRealPath("/WEB-INF/reports");
String jasper=reportDir+"/Test1.jasper";
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename=Test1.xls");
Map map=new HashMap();
map.put("exportType","xls");//设置參数,导出类型为xls
map.put("imageTest",context.getRealPath("/reports/star.gif"));// 设置參数,图片路径
map.put("SUBREPORT_DIR",reportDir+"/");
Connection conn=getConn();
try ...{
JasperReport report=(JasperReport)JRLoader.loadObject(jasper);
try ...{//设置上边距,左边距,右边距,下边距为0
java.lang.reflect.Field margin = JRBaseReport.class.getDeclaredField("leftMargin");
margin.setAccessible(true);
margin.setInt(report, 0);
margin = JRBaseReport.class.getDeclaredField("topMargin");
margin.setAccessible(true);
margin.setInt(report, 0);
margin = JRBaseReport.class.getDeclaredField("rightMargin");
margin.setAccessible(true);
margin.setInt(report, 0);
margin = JRBaseReport.class.getDeclaredField("bottomMargin");
margin.setAccessible(true);
margin.setInt(report, 0);
//去掉Excel中隐藏的行,技巧
java.lang.reflect.Field pageHeight = JRBaseReport.class.getDeclaredField("pageHeight");
pageHeight.setAccessible(true);
pageHeight.setInt(report, Integer.MAX_VALUE);
//Don't print group header on each page
if (null != report.getGroups())
...{
for (int i = 0; i < report.getGroups().length; i++)
...{
report.getGroups()[i].setReprintHeaderOnEachPage(false);
}
}
} catch(Exception e) ...{ e.printStackTrace(); }
JasperPrint print=JasperFillManager.fillReport(report,map,conn);//填充数据
// JasperPrint print=JasperFillManager.fillReport(report,map,new TestBeanDataSource());//填充数据
JRAbstractExporter exporter=new JExcelApiExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,print);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,response.getOutputStream());
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE);//删除空白行
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);//是否是每一页产生一个工作表
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);//是否为空白背景
exporter.exportReport();
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (JRException e) ...{
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
e.printStackTrace(pw);
response.setContentType("text/plain");
response.getOutputStream().print(sw.toString());
} finally ...{
if(conn!=null)
try ...{
if(!conn.isClosed()) conn.close();
} catch (SQLException e) ...{
e.printStackTrace();
}
}
}
privatevoid doXml(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{
ServletContext context=getServletContext();
//String jrxml=context.getRealPath("/WEB-INF/reports/Test1.jrxml");
String reportDir=context.getRealPath("/WEB-INF/reports");
String jasper=reportDir+"/Test1.jasper";
response.setContentType("text/xml");
Map map=new HashMap();
map.put("exportType","xml");
map.put("imageTest",context.getRealPath("/reports/star.gif"));
map.put("SUBREPORT_DIR",reportDir+"/");
Connection conn=getConn();
try ...{
JasperPrint print=JasperFillManager.fillReport(jasper,map,conn);
OutputStream os=response.getOutputStream();
JasperExportManager.exportReportToXmlStream(print,os);
os.flush();
os.close();
} catch (JRException e) ...{
StringWriter sw=new StringWriter();
PrintWriter pw=new PrintWriter(sw);
e.printStackTrace(pw);
response.setContentType("text/plain");
response.getOutputStream().print(sw.toString());
} finally ...{
if(conn!=null)
try ...{
if(!conn.isClosed()) conn.close();
} catch (SQLException e) ...{
e.printStackTrace();
}
}
}
privatestatic Connection getConn() ...{
try ...{
Class.forName(OracleDriver.class.getName());
return DriverManager.getConnection("jdbc:oracle:thin:@202.192.xxx.xxx:1521:orc92","name","password");
} catch (Exception e) ...{
e.printStackTrace();
}
returnnull;
}
/** *//**
*Initializationoftheservlet.<br>
*
*@throwsServletExceptionifanerroroccure
*/
publicvoid init() throws ServletException ...{
// Put your code here
}
}
转载于:https://www.cnblogs.com/yutingliuyl/p/7096304.html
Jasperreport+ireport 实践操作及web应用相关推荐
- 详解Docker的基本原理与实践操作
详解Docker的基本原理与实践操作,Web时代,应用变得越来越强大,与此同时也越来越复杂.集群部署.隔离环境.灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁. 本文我们就来探索Docke ...
- 利用JasperReport+iReport进行Web报表开发
用JasperReport+iReport进行Web报表开发 序言 在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥 ...
- 使用JasperReport+iReport进行Web报表开发
使用JasperReport+iReport进行Web报表开发 前言 在实际工程中非常,报告是其中很重要的一部分,结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥有复杂表头的.多维 ...
- java点餐系统实验报告_JAVA课程实践报告 基于web的点餐系统毕业设计.doc
JAVA课程实践报告 基于web的点餐系统毕业设计 大连理工大学城市学院 JAVA课程实践报告 题目:基于web点餐系统 学院:计算机工程学院 班级:07软日3班 指导教师: 杨俊生 学生姓名:李杰伟 ...
- 《SaltStack技术入门与实践》—— 实践案例 中小型Web架构1 初始化和Haproxy
实践案例 <中小型Web架构> 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 实践.实践.再实践,这是熟练掌握SaltStack的真理. ...
- kmeans算法原理以及实践操作
原文:http://www.cnblogs.com/dudumiaomiao/p/5839905.html kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法) kmeans一般在数 ...
- 分享:Python fabric实践操作
Python fabric实践操作 http://my.oschina.net/guol/blog/97607
- doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件。包含多项功能改进,及Bug修复。...
2019独角兽企业重金招聘Python工程师标准>>> doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.j ...
- 深度学习技巧应用7-K折交叉验证的实践操作
大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用7-K折交叉验证的实践操作.K折交叉验证是一种机器学习中常用的模型验证和选择方式,它可以将数据集分为K个互斥的子集,其中K-1个子集作为训练集, ...
最新文章
- ionic之点击放大图片
- R语言实战应用精讲50篇(二十七)-时空数据分析-经验空间/时间均值(latex公式+R代码绘图)
- 嵌入式系统 Boot Loader 技术内幕
- maven中snapshot快照库与maven-metadata.xml
- Javascript之全局变量和局部变量部分讲解
- 特斯拉上市十年回报率高达12倍,马斯克做对了什么?
- iOS多线程编程之锁的理解
- Selenium select-下拉列表处理
- 今日头条电脑版官方版_imclass电脑版下载-imclass在线教室pc版下载 v1.0.2 官方版...
- 安卓修复已遭在野利用的内核 0day 漏洞
- 数据库连接池配置和优化
- 有监督的神经网络模型
- [转载]Unicode、ANSI、UTF-8、Unicode Big Endian的故事
- 如何升级maven版本
- 易基因 | 项目文章 | oxBS-seq揭示了宫颈癌发生过程中的表观遗传特征变化
- Deepin安装搜狗中文输入法
- 微信小程序--个人主页的制作
- 【数据分析与挖掘(二)】面试题汇总(附答案)
- Matlab syms 矩阵变量,matlab syms.m
- 企业IT资产年终盘点实录——踩过的坑如月球表面
热门文章
- 阿里巴巴数据分析实战:超详细的母婴电商分析流程
- 数据模型篇:二、阿里巴巴数据整合及管理体系
- 嘿来电app v6.6.6.1
- 智慧档案馆之档案库房温湿度监控系统方案
- 2:VX2TEXT基于多模态输入的视频文本生成的端到端
- QT-将应用程序打包成安装程序
- php74 骑士 火车头采集简历 接口及采集规则
- 人工智能之机器学习-逻辑回归、回归(Regression)-Pytorch快速实现
- 【安骑士】配置不进行基线检测方法 1
- 计算机无法写入U盘,解决Mac无法写入U盘问题:无需安装软件,让Mac支持NTFS读写...