Ver código fonte

为图片添加宽高设置功能,如不设置或设置为0表示采用默认宽高

master
jacky6024 6 anos atrás
pai
commit
2acb28baee
  1. 38
      ureport2-console/src/main/resources/ureport-asserts/js/designer.bundle.js
  2. 26
      ureport2-console/src/main/resources/ureport-asserts/js/preview.bundle.js
  3. 11
      ureport2-core/src/main/java/com/bstek/ureport/build/compute/ImageValueCompute.java
  4. 14
      ureport2-core/src/main/java/com/bstek/ureport/definition/value/ImageValue.java
  5. 9
      ureport2-core/src/main/java/com/bstek/ureport/parser/impl/value/ImageValueParser.java
  6. 25
      ureport2-core/src/main/java/com/bstek/ureport/utils/ImageUtils.java
  7. 9
      ureport2-js/src/Utils.js
  8. 20
      ureport2-js/src/panel/property/ImageValueEditor.js

38
ureport2-console/src/main/resources/ureport-asserts/js/designer.bundle.js

File diff suppressed because one or more lines are too long

26
ureport2-console/src/main/resources/ureport-asserts/js/preview.bundle.js

File diff suppressed because one or more lines are too long

11
ureport2-core/src/main/java/com/bstek/ureport/build/compute/ImageValueCompute.java

@ -40,10 +40,11 @@ public class ImageValueCompute implements ValueCompute{
@Override
public List<BindData> compute(Cell cell, Context context) {
ImageValue value=(ImageValue)cell.getValue();
int width=value.getWidth(),height=value.getHeight();
Source source=value.getSource();
List<BindData> list=new ArrayList<BindData>();
if(source.equals(Source.text)){
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, value.getValue());
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, value.getValue(),width,height);
list.add(new BindData(new Image(base64Data,value.getValue(),-1,-1)));
}else{
Expression expression=value.getExpression();
@ -68,7 +69,7 @@ public class ImageValueCompute implements ValueCompute{
if(StringUtils.isBlank(path)){
continue;
}
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, path);
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, path,width,height);
list.add(new BindData(new Image(base64Data,path,-1,-1)));
}
}else if(obj instanceof BindData){
@ -79,7 +80,7 @@ public class ImageValueCompute implements ValueCompute{
path=valueData.toString();
}
if(StringUtils.isNotBlank(path)){
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, path);
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, path,width,height);
list.add(new BindData(new Image(base64Data,path,-1,-1)));
}
}else if(obj instanceof String){
@ -87,11 +88,11 @@ public class ImageValueCompute implements ValueCompute{
if(text.startsWith("\"") && text.endsWith("\"")){
text=text.substring(1,text.length()-1);
}
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, text);
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, text,width,height);
list.add(new BindData(new Image(base64Data,text,-1,-1)));
}else{
if(obj!=null && StringUtils.isNotBlank(obj.toString())){
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, obj.toString());
String base64Data=ImageUtils.getImageBase64Data(ImageType.image, obj.toString(),width,height);
list.add(new BindData(new Image(base64Data,obj.toString(),-1,-1)));
}
}

14
ureport2-core/src/main/java/com/bstek/ureport/definition/value/ImageValue.java

@ -26,6 +26,8 @@ public class ImageValue implements Value {
private String expr;
private Expression expression;
private Source source;
private int width;
private int height;
@Override
public ValueType getType() {
return ValueType.image;
@ -59,4 +61,16 @@ public class ImageValue implements Value {
public void setExpression(Expression expression) {
this.expression = expression;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}

9
ureport2-core/src/main/java/com/bstek/ureport/parser/impl/value/ImageValueParser.java

@ -15,6 +15,7 @@
******************************************************************************/
package com.bstek.ureport.parser.impl.value;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Element;
import com.bstek.ureport.definition.value.Source;
@ -32,6 +33,14 @@ public class ImageValueParser extends ValueParser {
@Override
public Value parse(Element element) {
ImageValue value=new ImageValue();
String width=element.attributeValue("width");
if(StringUtils.isNotBlank(width)){
value.setWidth(Integer.valueOf(width));
}
String height=element.attributeValue("height");
if(StringUtils.isNotBlank(height)){
value.setHeight(Integer.valueOf(height));
}
Source source=Source.valueOf(element.attributeValue("source"));
value.setSource(source);
for(Object obj:element.elements()){

25
ureport2-core/src/main/java/com/bstek/ureport/utils/ImageUtils.java

@ -15,11 +15,16 @@
******************************************************************************/
package com.bstek.ureport.utils;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
import org.springframework.util.Base64Utils;
@ -41,14 +46,6 @@ public class ImageUtils {
ChartImageProcessor chartImageProcessor=new ChartImageProcessor();
imageProcessorMap.put(ImageType.chart, chartImageProcessor);
}
@SuppressWarnings("unchecked")
public static InputStream getImage(ImageType type,Object data){
ImageProcessor<Object> targetProcessor=(ImageProcessor<Object>)imageProcessorMap.get(type);
if(targetProcessor==null){
throw new ReportComputeException("Unknow image type :"+type);
}
return targetProcessor.getImage(data);
}
public static InputStream base64DataToInputStream(String base64Data){
byte[] bytes=Base64Utils.decodeFromString(base64Data);
@ -57,13 +54,23 @@ public class ImageUtils {
}
@SuppressWarnings("unchecked")
public static String getImageBase64Data(ImageType type,Object data){
public static String getImageBase64Data(ImageType type,Object data,int width,int height){
ImageProcessor<Object> targetProcessor=(ImageProcessor<Object>)imageProcessorMap.get(type);
if(targetProcessor==null){
throw new ReportComputeException("Unknow image type :"+type);
}
InputStream inputStream = targetProcessor.getImage(data);
try{
if(width>0 && height>0){
BufferedImage inputImage=ImageIO.read(inputStream);
BufferedImage outputImage = new BufferedImage(width,height,BufferedImage.TYPE_USHORT_565_RGB);
Graphics2D g = outputImage.createGraphics();
g.drawImage(inputImage, 0, 0, width,height, null);
g.dispose();
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
ImageIO.write(outputImage, "png", outputStream);
inputStream = new ByteArrayInputStream(outputStream.toByteArray());
}
byte[] bytes=IOUtils.toByteArray(inputStream);
return Base64Utils.encodeToString(bytes);
}catch(Exception ex){

9
ureport2-js/src/Utils.js

@ -211,7 +211,14 @@ export function tableToXml(context){
cellXml+=`<![CDATA[${value.value || ''}]]>`;
cellXml+=`</simple-value>`;
}else if(value.type==='image'){
cellXml+=`<image-value source="${value.source}">`;
cellXml+=`<image-value source="${value.source}"`;
if(value.width){
cellXml+=` width="${value.width}"`
}
if(value.height){
cellXml+=` height="${value.height}"`;
}
cellXml+=`>`;
cellXml+=`<text>`;
cellXml+=`<![CDATA[${value.value}]]>`;
cellXml+=`</text>`;

20
ureport2-js/src/panel/property/ImageValueEditor.js

@ -13,11 +13,29 @@ export default class ImageValueEditor extends BaseValueEditor{
this.context=context;
this.container=$(`<div></div>`);
parentContainer.append(this.container);
this._initSizeGroup();
this._initTypeSelect();
this._buildExpand();
this._initExpressionEditor();
this._initPathEditor();
}
_initSizeGroup(){
const _this=this;
const widthGroup=$(`<div class="form-group"><label>宽:</label></div>`);
this.widthEditor=$(`<input class="form-control" type="number" placeholder="为0或空表示采用图片默认宽度" style="display: inline-block;width:335px">`);
widthGroup.append(this.widthEditor);
this.widthEditor.change(function(){
_this.cellDef.value.width=$(this).val();
});
this.container.append(widthGroup);
const heightGroup=$(`<div class="form-group"><label>高:</label></div>`);
this.heightEditor=$(`<input class="form-control" type="number" placeholder="为0或空表示采用图片默认高度" style="display: inline-block;width:335px">`);
heightGroup.append(this.heightEditor);
this.heightEditor.change(function(){
_this.cellDef.value.height=$(this).val();
});
this.container.append(heightGroup);
}
_initTypeSelect(){
const imageSourceGroup=$(`<div class="form-group"><label>${window.i18n.property.image.source}</label></div>`);
this.sourceSelect=$(`<select class="form-control" style="display: inline-block;width:295px">
@ -135,6 +153,8 @@ export default class ImageValueEditor extends BaseValueEditor{
this.row2Index=row2Index;
this.col2Index=col2Index;
this.container.show();
this.widthEditor.val(cellDef.value.width);
this.heightEditor.val(cellDef.value.height);
const source=cellDef.value.source;
this.sourceSelect.val(source);
this.pathEditor.val('');

Carregando…
Cancelar
Salvar