123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package cn.com.qmth.scancentral.bean.card;
- import java.awt.Image;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.util.Base64;
- import java.util.LinkedList;
- import java.util.List;
- import javax.imageio.ImageIO;
- import com.fasterxml.jackson.annotation.JsonIgnore;
- import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
- import com.qmth.boot.core.exception.ParameterException;
- /**
- * 卡格式文件内容结构
- */
- @JsonIgnoreProperties(ignoreUnknown = true)
- public class CardFile {
- private String version;
- private boolean adapted;
- private List<CardPageWrapper> pages;
- @JsonIgnore
- private SliceConfig sliceConfig;
- @JsonIgnore
- private List<String> sliceName;
- public String getVersion() {
- return version;
- }
- public void setVersion(String version) {
- this.version = version;
- }
- public boolean isAdapted() {
- return adapted;
- }
- public void setAdapted(boolean adapted) {
- this.adapted = adapted;
- }
- public List<CardPageWrapper> getPages() {
- return pages;
- }
- public void setPages(List<CardPageWrapper> pages) {
- this.pages = pages;
- }
- /**
- * 解析卡格式文件中的裁切图坐标,用于云阅卷同步
- *
- * @return
- */
- public SliceConfig getSliceConfig() throws IOException {
- if (sliceConfig == null) {
- sliceConfig = new SliceConfig();
- if (pages != null) {
- int pageNumber = 0;
- for (CardPageWrapper pageWrapper : pages) {
- pageNumber++;
- CardPage page = pageWrapper.getExchange();
- // 遮盖模式
- if (page.getInfoArea() != null && page.getInfoArea().length > 0) {
- sliceConfig.addConfig(pageNumber, 0, 0, 0, 0);
- }
- // 裁切模式
- else if (page.getAnswerArea() != null && !page.getAnswerArea().isEmpty()) {
- // 获取卡格式图片原始尺寸
- // 此处图片base64编码特殊,需要采用Mime标准
- Image image = ImageIO
- .read(new ByteArrayInputStream(Base64.getMimeDecoder().decode(page.getPageImage())));
- int width = image.getWidth(null);
- int height = image.getHeight(null);
- for (AnswerArea area : page.getAnswerArea()) {
- sliceConfig.addConfig(pageNumber, (int) (area.getArea()[0] * width),
- (int) (area.getArea()[1] * height), (int) (area.getArea()[2] * width),
- (int) (area.getArea()[3] * height));
- }
- }
- }
- }
- }
- return sliceConfig;
- }
- public List<String> getSliceName() throws IOException {
- List<String> sliceName = new LinkedList<String>();
- if (pages != null) {
- for (CardPageWrapper pageWrapper : pages) {
- CardPage page = pageWrapper.getExchange();
- for (AnswerArea area : page.getAnswerArea()) {
- if (area.getMainNumber() == null) {
- throw new ParameterException("CET模式下裁切图必须指定大题号");
- }
- sliceName.add(area.getMainNumber().toString());
- }
- }
- }
- return sliceName;
- }
- }
|