# JzyOABackend
黑龙江某医学检验中心的新冠病毒OA系统后端,主要给医学检验中心做核酸、抗体、双联(抗体+核酸)报告的生成与导出。截至到目前(2020年11月3日)已经生成了50多万个核酸、抗体和双联报告,算是鄙人小渣硕为祖国的新冠疫情事业出的一份力。
前端使用的是Vue2.x+Elementui。地址:https://github.com/MaShantao/JzyOA
后端使用SSM进行编码,使用Java Poi做报告的生成,后端解决跨域请求。编译器用的是eclipse,从16年开始就一直用eclipse,一直就延续下来了。项目后端比较简单,就是纯SSM,比较值得一说的是数据库建模工具PowerDesigner、PDF模板生成和前后端的后端处理跨域。
## 1 数据库建模
数据库建模使用的是国内比较流行的Powerdesigner。由于项目的数据不是很强关联,所以数据库在设计的时候,有些表之间没有建立关联,这是根据具体业务来做的。
![](https://raw.githubusercontent.com/MaShantao/JzyOABackend/master/resource/database%20designer.png)
## 2 报告生成
报告的格式是PDF,原先想用word模板生成PDF,但是查了很多资料,发现相应的工具很少,目前比较成熟的工具,比如Spire需要购买版权,否则生成的PDF会在第一页加上人家的广告。所以就选择了根据PDF模板来生成PDF,使用的工具是Java Poi。具体步骤如下。
### 2.1 PDF模板
首先保证得有PDF模板,如果模板是word等其他格式的,可以使用wps导出为PDF。
### 2.2 创建表单域
使用Adobe旗下的Acrobat(一款专门用来编辑PDF的软件)。
原始的PDF模板如下:
![](https://raw.githubusercontent.com/MaShantao/JzyOABackend/master/resource/PDF-Original.png)
我们安装完Acrobat之后使用鼠标右键PDF模板,选择 **使用Acrobat编辑**->**文件**->**创建**->**创建表单**
![](https://raw.githubusercontent.com/MaShantao/JzyOABackend/master/resource/Acrobat创建表单.png)
然后**选择文字域**,即可进行编辑。无论是文字还是图片,都使用文字域进行框选。
![](https://raw.githubusercontent.com/MaShantao/JzyOABackend/master/resource/Acrobat创建表单2.png)
### 2.3 模板生成代码
#### 2.3.1 导入Java Poi的maven坐标
```xml
<!-- poi的包 -->
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
```
#### 2.3.2 PDF模板生成代码
```java
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
public class PdfUtils {
// 利用模板生成pdf
public static void pdfout(Map<String,Object> o) {
// 模板路径
String templatePath = "C:/mytest.pdf";
// 生成的新文件路径
String newPDFPath = "C:/testout1.pdf";
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
BaseFont bf = BaseFont.createFont("c://windows//fonts//simsun.ttc,1" , BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font FontChinese = new Font(bf, 5, Font.NORMAL);
out = new FileOutputStream(newPDFPath);// 输出流
reader = new PdfReader(templatePath);// 读取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
//文字类的内容处理
Map<String,String> datemap = (Map<String,String>)o.get("datemap");
form.addSubstitutionFont(bf);
for(String key : datemap.keySet()){
String value = datemap.get(key);
form.setField(key,value);
}
//图片类的内容处理
Map<String,String> imgmap = (Map<String,String>)o.get("imgmap");
for(String key : imgmap.keySet()) {
String value = imgmap.get(key);
String imgpath = value;
int pageNo = form.getFieldPositions(key).get(0).page;
Rectangle signRect = form.getFieldPositions(key).get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
//根据路径读取图片
Image image = Image.getInstance(imgpath);
//获取图片页面
PdfContentByte under = stamper.getOverContent(pageNo);
//图片大小自适应
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
//添加图片
image.setAbsolutePosition(x, y);
under.addImage(image);
}
stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
stamper.close();
Document doc = new Document();
Font font = new Font(bf, 32);
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException e) {
System.out.println(e);
} catch (DocumentException e) {
System.out.println(e);
}
}
public static void main(String[] args) {
Map<String,String> map = new HashMap();
map.put("name","张三");
map.put("creatdate","2018年1月1日");
map.put("weather","晴朗");
map.put("sports","打羽毛球");
Map<String,String> map2 = new HashMap();
map2.put("img","c:/50336.jpg");
Map<String,Object> o=new HashMap();
o.put("datemap",map);
o.put("imgmap",map2);
pdfout(o);
}
}
```
## 3 跨域
### 3.1 什么是跨域
出于浏览器的**同源策略限制**。同源策略/SOP(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到**XSS**、**CSFR**等攻击,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
**同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)**。当一个请求url的**协议、域名、端口**三者之间任意一个与当前页面url不同即为跨域**跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了**。
在 HTML 中,`<a>`, `<form>`, `<img>`, `<script>`, `<iframe>`, `<link>` 等标签以及 Ajax 都可以指向一个资源地址,而所谓的**跨域请求**就是指:当前发起请求的域与该请求指向的资源所在的域不同时的请求。
举个
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 某医学检验中心新冠病毒OA系统后端源码+项目说明(核酸、抗体、双联(抗体+核酸)报告的生成与导出+Vue2.x+Eleme).zip 某医学检验中心新冠病毒OA系统后端源码+项目说明(核酸、抗体、双联(抗体+核酸)报告的生成与导出+Vue2.x+Eleme).zip 某医学检验中心新冠病毒OA系统后端源码+项目说明(核酸、抗体、双联(抗体+核酸)报告的生成与导出+Vue2.x+Eleme).zip 某医学检验中心新冠病毒OA系统后端源码+项目说明(核酸、抗体、双联(抗体+核酸)报告的生成与导出+Vue2.x+Eleme).zip 某医学检验中心新冠病毒OA系统后端源码+项目说明(核酸、抗体、双联(抗体+核酸)报告的生成与导出+Vue2.x+Eleme).zip
资源推荐
资源详情
资源评论
收起资源包目录
某医学检验中心新冠病毒OA系统后端源码+项目说明(核酸、抗体、双联(抗体+核酸)报告的生成与导出).zip (254个子文件)
.classpath 2KB
org.eclipse.wst.common.component 682B
org.eclipse.wst.jsdt.ui.superType.container 49B
chunk-vendors.5595c6d8.css 133KB
chunk-vendors.7e8ce98b.css 133KB
chunk-vendors.38492807.css 131KB
chunk-vendors.36d3bfb2.css 120KB
chunk-vendors.7adc167b.css 105KB
app.ab70f0fc.css 2KB
app.d3f847e2.css 2KB
app.69449d8a.css 2KB
app.a0369b72.css 2KB
app.53a2d6bd.css 2KB
app.2cf01a4b.css 2KB
app.8f536077.css 2KB
app.1fed126f.css 2KB
app.e470cc83.css 2KB
app.6283e8b3.css 2KB
app.38476fa0.css 2KB
app.28599442.css 2KB
app.c4f1046a.css 2KB
app.8d1b8128.css 2KB
app.6d2fb173.css 2KB
app.0d27ce1a.css 2KB
app.f7d10f2d.css 2KB
app.53889dd7.css 2KB
app.f68286dc.css 2KB
app.a01b90f1.css 1KB
app.410b6811.css 1KB
app.2617c294.css 1KB
app.f9aabb00.css 1008B
.gitignore 9B
index.html 851B
favicon.ico 4KB
TbSpecimenExample.java 45KB
TbUserExample.java 30KB
TbReportExample.java 20KB
SpecimenServiceImpl.java 17KB
TbRightExample.java 15KB
ReportServiceImpl.java 15KB
TbDictionaryExample.java 14KB
TbManagerExample.java 14KB
TbRoleExample.java 14KB
TbDoctorExample.java 13KB
TbHospitalExample.java 12KB
TbDepartmentExample.java 11KB
TbRoleRightExample.java 11KB
PDFUtil.java 7KB
TbSpecimen.java 6KB
RoleRightController.java 6KB
ReportController.java 4KB
RightController.java 4KB
FileUtil.java 4KB
UserServiceImpl.java 4KB
SpecimenController.java 4KB
DepartmentServiceImpl.java 4KB
Test.java 3KB
DoctorServiceImpl.java 3KB
RoleController.java 3KB
HospitalServiceImpl.java 3KB
DoctorController.java 3KB
TbReport.java 3KB
DictionaryServiceImlp.java 3KB
ExcelTest.java 3KB
RoleServiceImpl.java 3KB
DepartmentController.java 3KB
TbUser.java 2KB
RoleRightServiceImpl.java 2KB
ManagerServiceImpl.java 2KB
ApplicationInitService.java 2KB
UserController.java 2KB
CrossFilter.java 2KB
HospitalController.java 2KB
ManagerController.java 1KB
ReportService.java 1KB
Test01.java 1KB
TbRight.java 1KB
TbRole.java 1KB
TbDepartment.java 1KB
TbDoctor.java 1KB
DictionaryController.java 1KB
RightServiceImpl.java 1KB
TbHospital.java 1KB
TbManager.java 1KB
TbDictionary.java 1KB
TbSpecimenMapper.java 1KB
TbReportMapper.java 1006B
ExcelUtil.java 981B
EncodingUtil.java 947B
TbDictionaryMapper.java 916B
TbDepartmentMapper.java 916B
TbRoleRightMapper.java 910B
TbSpecimenMapper.java 890B
TbHospitalMapper.java 882B
TbManagerMapper.java 874B
TbReportMapper.java 854B
TbDoctorMapper.java 850B
TbRightMapper.java 838B
TbRoleRight.java 827B
TbRoleMapper.java 820B
共 254 条
- 1
- 2
- 3
资源评论
土豆片片
- 粉丝: 1556
- 资源: 5641
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功