**
- Ureport二开和源码启动升级版本如何升级
**
一、基于UReport 2 V2.2.9
二、增加不依附于单元格的浮动图片
三、增加不依附于单元格的浮动(直)线段【新增】
- 运行后图片
四、代码修改截图
java修改部分
public class PdfProducer implements Producer {
@Override
public void produce(Report report,OutputStream outputStream) {
Paper paper=report.getPaper();
int width=paper.getWidth();
int height=paper.getHeight();
Rectangle pageSize=new RectangleReadOnly(width,height);
if(paper.getOrientation().equals(Orientation.landscape)){
pageSize=pageSize.rotate();
}
int leftMargin=paper.getLeftMargin();
int rightMargin=paper.getRightMargin();
int topMargin=paper.getTopMargin();
int bottomMargin=paper.getBottomMargin();
Document document=new Document(pageSize,leftMargin,rightMargin,topMargin,bottomMargin);
try{
PdfWriter writer=PdfWriter.getInstance(document,outputStream);
PageHeaderFooterEvent headerFooterEvent=new PageHeaderFooterEvent(report);
writer.setPageEvent(headerFooterEvent);
document.open();
List<Column> columns=report.getColumns();
List<Integer> columnsWidthList=new ArrayList<Integer>();
int[] intArr=buildColumnSizeAndTotalWidth(columns,columnsWidthList);
int colSize=intArr[0],totalWidth=intArr[1];
int[] columnsWidth=new int[columnsWidthList.size()];
for(int i=0;i<columnsWidthList.size();i++){
columnsWidth[i]=columnsWidthList.get(i);
}
FullPageData pageData=PageBuilder.buildFullPageData(report);
List<List<Page>> list=pageData.getPageList();
if(list.size()>0){
int columnCount=paper.getColumnCount();
int w=columnCount*totalWidth+(columnCount-1)*paper.getColumnMargin();
int size=columnCount+(columnCount-1);
int[] widths=new int[size];
for(int i=0;i<size;i++){
int mode=(i+1)%2;
if(mode==0){
widths[i]=paper.getColumnMargin();
}else{
widths[i]=totalWidth;
}
}
JavaScript修改部分
export function confirm(msg,callback){
const dialog=buildDialog('确认提示',msg,[{
name:'确认',
click:function(){
callback.call(this);
}
}]);
dialog.modal('show');
};
export function dialog(title,content,callback){
const dialog=buildDialog(title,content,[{
name:'确认',
click:function(){
callback.call(this);
}
}]);
dialog.modal('show');
};
export function showDialog(title,dialogContent,buttons,events,large){
const dialog=buildDialog(title,dialogContent,buttons,large);
dialog.modal('show');
if(events){
for(let event of events){
dialog.on(event.name,event.callback);
}
}
};
function buildDialog(title,dialogContent,buttons,large){
const className='modal-dialog'+ (large ? ' modal-lg' : '');
let modal=$(`<div class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"></div>`);
let dialog=$(`<div class="${className}"></div>`);
modal.append(dialog);
let content=$(`<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title">
${title}
</h4>
</div>
<div class="modal-body">
${typeof(dialogContent)==='string' ? dialogContent : ''}
</div>`);
if(typeof(dialogContent)==='object'){
content.find('.modal-body').append(dialogContent);
}
dialog.append(content);
let footer=$(`<div class="modal-footer"></div>`);
content.append(footer);
if(buttons){
buttons.forEach((btn,index)=>{
let button=$(`<button type="button" class="btn btn-default">${btn.name}</button>`);
button.click(function(e){
btn.click.call(this);
if(!btn.holdDialog){
modal.modal('hide');
}
}.bind(this));
footer.append(button);
});
}else{
let okBtn=$(`<button type="button" class="btn btn-default" data-dismiss="modal">确定</button>`);
footer.append(okBtn);
}
modal.on("show.bs.modal", function() {
var index=1050;
$(document).find('.modal').each(function (i,d) {
var zIndex=$(d).css('z-index');
if(zIndex && zIndex!=='' && !isNaN(zIndex)){
zIndex=parseInt(zIndex);
if(zIndex>index){
index=zIndex;
}
}
});
index++;
modal.css({'z-index':index});
});
return modal;
};