JasperReport 6.17.0 編碼及Studio使用資料_第1頁
JasperReport 6.17.0 編碼及Studio使用資料_第2頁
JasperReport 6.17.0 編碼及Studio使用資料_第3頁
JasperReport 6.17.0 編碼及Studio使用資料_第4頁
JasperReport 6.17.0 編碼及Studio使用資料_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

JasperReport6.17.0

編碼及Studio使用

目錄

目錄

1.JaspcrRcport編碼1

1.1.單體架構(gòu)(SSH)1

1.1.1.加入Jar包1

M.2.生成報表傳給客戶端1

1.13.報表另存為多種格式2

1.2.SpringBoot4

1.2.1.修改pom.xml,引入jar包4

1.2.2.編寫Service層代碼5

1.2.3.編寫Ulil代碼6

1.2.4.編寫Controllci代碼8

1.2.5.生成PDF文件,中文字體解決方案9

1.3.特殊情況處理12

13.1.默認頁打印空行12

1.3.2.控制指定內(nèi)容只在末頁最后一行打印13

2.JaspcrSoftStudio寸艮表設(shè)計器使用15

2.1.簡介15

2.1.1.報表生命周期15

2.1.2.界面16

2.2.基本使用17

2.2.1.創(chuàng)建列表式報表17

.繪制報表17

.通過JSON生成報表20

.1,配置數(shù)據(jù)適配器(JSON)20

.2.讀取字段列表23

.3,報表各部分組成24

.4.繪制報表25

.4.1,添加標題25

.4.2.添加字段26

.4.3.設(shè)定PDF字體(重要?。?7

.4.4,設(shè)定表格邊框28

.4.5.設(shè)定各區(qū)域高度29

2.2.L2.4.6.設(shè)置字段組件30

,通過查詢數(shù)據(jù)庫生成報表31

2.2.13.1.配置數(shù)據(jù)適配器(DB)31

.2.設(shè)置查詢語句、讀取字段列表34

2.2.1.33.參數(shù)的使用35

.1.添加參數(shù)35

2.2.1.33.2.程序中傳遞參數(shù)37

2.2.13.3.3.報表模板接收參數(shù)37

2.2.1.3.4.自定義變量的使用37

.1,順序號37

.4.2.小計39

目錄

.4.3.合計40

表頭合計40

表尾合計41

2.2.2.創(chuàng)建卡片式報表43

2.2.3.編譯、發(fā)布43

23報表設(shè)計器進階43

2.3.1.加入圖片43

2.3.2.頁碼相關(guān)47

2.3.2.1.添力口頁碼47

23.2.2.根據(jù)頁碼進行打印控制48

2.3.3.參數(shù)49

2.33.1.添加參數(shù)49

233.2.程序中傳遞參數(shù)50

2.3.33報表模板接收參數(shù)51

2.3.4,自定義變量51

.順序號51

2342小計53

234.3.合計54

2.3A3.1.表頭合計54

2表尾合計55

2.3.5.分欄報表(橫向循環(huán))56

2.36加入條碼/二維碼59

2.3.7.分組報表61

238.圖形報表64

2.3.9.子報表66

,制作父報表66

239.2.制作子報表67

2.393.于報表自適應(yīng)行高72

II

JasperReport6.17.0編碼及Studio使用

1.JasperReport編碼

下面詳細說明?下如何利用JasperReport實現(xiàn)自己系統(tǒng)中的報表功能。

1.1,單體架構(gòu)(SSH)

1.1.1.加入Jar包

首先在工程中加入核心類包C

解壓從官網(wǎng)上下載的壓縮包,在distFl錄中可以找到“jasperreports-5.6.1.jar”和“jasperreports-fonts-

561.jar",復(fù)制到項目WEB-INF/lib下,加入到Eclipse的構(gòu)建配置中。

再加入JasperReport運行所需的支持包。建議將“l(fā)ib”文件夾下的所有jar文件都復(fù)制到項目的lib文

件夾中。如果遇到JasperReport所提供的jar包和系統(tǒng)原有Jar包沖突,建議保留版本較新的jar。

1.1.2.生成報表傳給客戶端

JasperReport可以將生成的報表以文件流的形式傳送給客戶端瀏覽器。

官方提供的生成方法,是先填充報表模板,然后采用各類Export對象輸出。但是我沒有實驗成功

歡迎各路高手指教,我可以修改此部分的說明。

我采用JasperReportsUtils提供的方法生成(spriing包中提供)報表。

建議可以采用html或者pdf格式輸出。以下是代碼實例:

〃創(chuàng)建報表參數(shù)Map對象,需要傳入報表的參數(shù),均需要通過這個map對象傳遞

Map<StringJObject>parameters=newHashMap<StringJObject>();

JasperReport6.17.0編碼及Studio使用

//設(shè)置報表的默認類型,此處設(shè)置為htmL防止傳入空值

Stringreport_type="html";

//獲取報表輸出的類型

if(request.getParameter("type")!=null&&!"".equals(report_type)){

report_type=request.getParameter("type");

)

〃讀取當(dāng)前的查詢子句,查詢子句已經(jīng)作為變量,設(shè)置在報表模板中了

StringwhereValue=request.getParameter("wherevalue");

parameters.put("whereValue","where"+whereValue);

〃讀取報表模板文件

FilereportFile=newFile("d:/test.jasper");

〃創(chuàng)建JDBC連接。木例使用JDBC數(shù)據(jù)源,DataSource從Hibernate中獲取。

DataSourceds=(DataSource)

AppContextHolder.getAppCcntext().getBean("dataSource");

Connectionconn=ds.getConnection();

〃報表文件臨時存儲設(shè)置,切記??!此臨時文件夾一定要真實存在!?。?/p>

JRFileVirtualizervirtualizer-newJRFileVirtualizer(2,"d:/cacheDir");

parameters.put(3RParameter.REPORT_VIRTUALIZER,virtualizer);

virtualizer.setReadOnly(true);

DasperPrintjasperPrint=

3asperFillManager./itl/?eport(reportFile.getPath(),parameters,conn);

3RAbstractExporter<?,?,?,?>exporter=null;

if("pdf",equals(report_type)){

response.setContentType("application/pdf°);

exporter=newDRPdfExporter();

}elseif("html".equals(report_type)){

response.setContentType("text/html");

exporter=newHtmlExporter();

)

3asperReportsUtils.render(exporterjasperPrint,

response.getOutputStream());

exporter=null;

//manuallycleaningup

virtualizer.cleanup();

〃關(guān)閉JDBC連接

conn.close();

1.1.3.報表另存為多種格式

JasperReport支持將報表導(dǎo)出為多種格式保存,可以將報表導(dǎo)出到指定格式,生成指定格式的實體文

2

JasperReport6.17.0編碼及Studio使用

件;也可以以文件流的形式傳輸給客戶端瀏覽微,山用戶自行保存。

本例提供以文件流形式返回客戶端進行保存的實例代碼:

〃創(chuàng)建報表參數(shù)Map對象,需要傳入報表的參數(shù),均需要通過這個map對象傳遞

Map<String,Object>parameters=newHashMap<String,0bject>();

Stringtype=request.getParameter("type");

〃讀取當(dāng)前的查詢子句,查詢子句已經(jīng)作為變量,設(shè)置在報表模板中了

StringwhereValue=request.getParameter("wherevalue");

parameters.put("whereValue","where"+whereValue);

〃讀取報表模板文件

FilereportFile=newFile("d:/test.jasper");

〃創(chuàng)建JDBC連接。木例使用1DBC數(shù)據(jù)源,DataSource從Hibernate中獲取。

DataSourceds=(DataSource)

AppContextHolder.getAppCcntext().getBean("dataSource");

Connectionconn=ds.getConnection();

〃報表文件臨時存儲設(shè)置,切記!!此臨時文件夾一定要真實存在?。?!

JRFileVirtualizervirtualizer-newJRFileVirtualizer(2^"d:/cacheDir");

parameters.put(3RParameter.REPORTVIRTUALIZER}virtualizer);

virtualizer.setReadOnly(true);

DasperPrintjasperPrint=

3asperFillManager./itl/?eport(reportFile.getPath(),parameters,conn);

3RAbstractExporter<?,?,?,?>exporter=null;

if("pdF二equals(type)){〃生成PDF格式的報表。此功能已通過測試。

exporter=newJRPdfExporter();

response.reset();

response.setContentType("application/pdf");

response.setHeader("Content-Disposition","attachment;filename="+new

StringCrl.getRO.getBytesC'gbk"),"iso8859-l”)+”.pdf”);〃打開,保存

}elseif("rtf”.equals(type)){〃生成RTF格式的報表。此功能已通過測試。

exporter=newJRRtfExporter();

response.reset();

response.setContentType("application/msword");

response.setHeader("Content-disposition","attachment;filename="+new

String(r1.getReport_name().getBytes("gbk"),"iso8859-l")+".rtf");

}elseif(”xml”.equals(type)){〃生成XML格式的報表。此功能已通過測試。

exporter=new3RXmlExporter();

response.reset();

response.setHeader("Content-Disposition",

"attachment;filename=\""+newString(rl.getReport_name().getBytes("gbk"),

3

JasperReport6.17.0編碼及Studio使用

“iso8859-l”)+”.xml\"");〃打開保存

response.setCharacterEncoding("GBK");

}elseif("xlslequalsltype)){〃生成XLS格式報表。此功能已通過測試。

exporter=newJRXlsExporter();

response.reset();

response.setContentType("application/vnd.ms-excel");

response.setHeader("Content-Disposition"

"attachment;filename=\""+newString(rl.getReport_name().getBytes("gbk"),

"iso8859-l")+".xls\"");〃打開保存

}elseif("csv”.equals(type)){〃生成CSV格式報表。亂碼,無法使用

exporter=new3RCsvExporter();

response.reset();

response.setContentType("application/x-msdownload;charset=\"GBK\"");

response.setHeader("Content-Disposition",

"attachment;filename=\""+newString(rl.getReport_name().getBytes("gbk"),

"iso8859-l")+".csv\"");〃打開保存

response.setCharacterEncoding("GBK");

}elseif("odt".equals(type)){〃此段代碼未測試

exporter=new3ROdtExporter();

response.reset();

response.setContentType("application/x-msdownload");

response.setHeader("Content-Disposition",

“attachment;filename=\""+newString(rl.getReport_name().getBytes("gbk"),

"iso8859-l")+".odt\"");〃打開保存

}

3asperReportsUtils.render(exporterjasperPrint^

response.getOutputStream());

exporter=null;

//manuallycleaningup

virtualizer.cleanup();

conn.close();

1.2.SpringBoot

1.2.1.修改pom.xmb引入jar包

首先在工程中加入核心類包依賴。在dependencies標簽中加入如下內(nèi)容。

4

JasperReport6.17.0編碼及Studio使用

<!■■-JasperReports依賴包一〉

〈dependency)

<groupld>net.sf.jasperreports</groupld>

<artifactTd>jasperreports</artifactld>

<version>6.17.0</version>

“dependency〉

<!一條碼依賴包--)

〈dependency〉

<groupld>net.sourceforge.barbecue</groupld>

<artifactId>barbecue</artifac:Id>

<version>l.5-betal</version>

</dependency>

1.2.2.編寫Service層代碼

為了便于后續(xù)生成代碼時復(fù)用,需要生成報表的核心代碼寫入到Service層中。

本例中,數(shù)據(jù)輸入采用JSON,報表輸出到指定目錄中,保存為PDF文件。

先創(chuàng)建Service接口和實現(xiàn)類。

▼Eiservice

▼Bimnl

?Data2PdfServicelmpl

0RabbitMQServicelmpI

IData2PdfService

?RabbitMQService

接口類Data2PdfServrice代碼如下。

packagecom.thinkdifferenl.data2pdf.service;

importnet.sf.jasperreports,engine.JasperReport;

importjava.util.Map;

publicinterfaceData2PdfService{

/不斗

*將傳入的JSON對象,轉(zhuǎn)換為PDF文件,輸出到指定的目錄中。

*@paramparameters轆入的參數(shù),包括JSON數(shù)據(jù)對象

*@paramJasperReport報表文件對象

*QparamstrOutputPathFileNasje輸出的PDF所在路徑(絕對路徑)和PDF文件名

7/'

voidCreatePdf(Map<String,Object>parameters,JasperReportJasperReport,

StringstrOutputPathFi1eName):

)

5

JaspcrRcport6.17.0編碼及Studio使用

實現(xiàn)類Data2PdfServriceImpl代碼如下:

packagecom.thinkdifferent.data2pdf.service,inip1;

importcom.thinkdifferent.data2pd'.service.Data2PdfService:

importnet.sf.jasperreports,engine.JasperExportManager;

importnet.sf.jasperreports,engine.JasperFi1IManager;

importnet.sf.jasperreporls.engine.JasperPrinl;

importnet.sf.jasperreports,engine.JasperReport:

importorg.springframework.stereotype.Service;

importjava.util.Map;

?Service

pub1icclassData2PdfScrviccImplimplementsData2PdfServicc{

/**

*聘傳入的JSON對象,轉(zhuǎn)換為PDF文件,輸出到指定的目錄:中。___________________

*@paramparameters輸入的參數(shù),包括JS0X數(shù)據(jù)對象

*@paramjasperReport報收文件對飄

*?paramsti'OutputPathFileNasie輸出的PDF所含路徑(絕對路徑)和PDF文件名

publicvoidCreatePdf(Map<String,Object>parameters,JasperReportjasperReport,

StringstrOutputPathFileName){

try(

JasperPrinljasperPrint=JasperFilIManager.(jasperReport,parameters);

JasperExportManager.exportKeportiordtbijasperKrint,strUutputEathl,1leAame);

}catch(Exceptione){

c.printStackTracc();

~T

1.2.3.編寫Util代碼

我們可以看到,在Service的方法中,傳入的參數(shù)是M叩型,需要提前組裝。本例中,單獨編寫一個

工具類,專門用于組裝此參數(shù)。代碼如下。

packagecom.thinkdifferent.data2pdf.util;

imporlcom.thinkdiI'ferent.(Iat.a2pdservice.I)ata2PdfService;

importnet.sf.jasperreports,engine.JRParameter;

6

JaspcrRcport6.17.0編碼及Studio使用

importnet.sf.jasperreports,engine.JasperReport;

importnet.sf.jasperreports,engine,fill.JRFileVirtualizer

importnet.sf.jasperreports,engine,util.JRLoader:

importnet.sf.json.JSONArray;

importnet.sf.json.JSONObject:

importjava.io.ByteArraylnputStream

importjava.io.FilelnputStream;

importjava.io.InputStream;

importjava.util.HashMap:

importjava.util.Map;

publicclassCrealePdfUti1{

publicMap<String,String>daia2PDF(Dala2PdfServicedata2PdfService,JSONObjectjsonlnput){

Map<String,String>mapRe二urn=newHashMapO();

mapReturn.put("flag","success");

mapRcturn.put("message'CreatePdffileSuccess");

try(

〃報表文件路徑和文件名(相對路徑、文件名、擴展名)__________________________________

StringstrReportPath=jsonlnput.getStringCreportPaihz,);

StringstrReportl'ileName=jsonlnput.getStringCreportl'ileName");

StringstrOutputPath=jsonlnput.getStringCoutputPath");

StringstrFileNameField=jsonlnput.getString("fiIc'amcFicld");

JSONArrayjsonData=jsonlnput.getJSONArray("data");

〃狹取文件流。

StringstrReportPathFi1eName=System,getPropertw&ev.dir")+reportfile/z,+strReportPath

+strReportFilcNamc;

InputStreamjasperStream=newFileInputStream(strReportPathFileName);

JasperReportjasperReporI=(JaspcrRcport)JRLoader.loadObjecI(jasperStream);

for(inti=0;i<jsonData.sizeO:i++)(

StringstrEileName=jsonData.getJSONObject(i).getString(strFileNameEield)+pdfz,:

StringstrOutputPathFileName=strOutputPath+strFileName;

〃創(chuàng)建報表參數(shù)Map對象,需要傳入報表的參數(shù),均需要通過這個map對象傳遞

Map<String,Objcct>mapParam=newHashMap<String,ObjcctX);

〃報表文件臨時存儲設(shè)置,切記??!此臨時文件夾一定要真實存在?。?!

JRFileVirtualizervirtualizer=newJRFileVirtualizer(2,"cacheDir");

mapParam.put(JRParameter.REPORTVIRTUALIZER,virtualizer);

virtualizer.setReadonly(true);

7

JaspcrRcport6.17.0編碼及Studio使用

InputStreaminputStream=new

ByteArrayInputStream(jsonData.getJSONObject(i).toStringO.get.Bytes(":TF-8"));

〃填充報表數(shù)據(jù)源數(shù)據(jù)流

mapParam.put(Z,JSOXI\PUT_STREAMW,inputStream);

mapParam.putCreportPatI/,System.getPropertyCuser,dir')+"/reportfile/"+

strReportPath);

data2PdfService.CreatePdf(mapParam,jasperReport,strOutputPathFileName):

//manuallycleaningup

virtualizer.cleanupO;

}

}catch(Exceptione){

e.printStackTraceO;

mapRcturn.put(*flag","error");

mapReturn.put("message","CreatePdffileErrorw);

F

returnmapReturn;

)

1.2.4,編寫Controller代碼

Controller層用于接收REST接口傳入的JSON數(shù)據(jù),經(jīng)過處理后傳入Util代碼。

packagecom.thinkdifferent.data2pdf.controller;

importcom.thinkdifferent.data2pdservice.I)ata2PdfServicc;

importcom.thinkdifferent.data2pdf.service.RabbitMQService:

importcom.thinkdiI'ferent.data2pd'.util.CreatePdfUti1:

importio.swagger,annotations.Api;

importio.swagger,annotations..ApiOperation;

importnet.sf.json.JSONObject;

importorg.springframework.beans,factory,annotation.Autowired:

importorg.springframework.web.bind,annotation.RoquestBody;

importorg.springframework.web.bind,annotation.RequestMapping;

imporlorg.springframework.web.bind.annoLation.RequestMelhod;

importorg.springframework,web.bind,annotation.RestController;

importjava.util.HashMap:

importjava.util.Map;

8

JaspcrRcport6.17.0編碼及Studio使用

@Api(tags-根據(jù)傳入的JSON生成PDF文件")

SRestController

^RequestMapping(value="Japi")

publicclassData2Pdf{

@Autowired

privateData2PdfServicedata2PdfService;

@?\utowired

privateRabbitMQScrvicerabbiMQScrvicc;

@ApiOperation("接收傳入的JSON數(shù)據(jù),傳入對應(yīng)的報表,在指定目錄中生成PDF文件”)

@RequestMapping(value=7data2pdf”,method=RequestMethod.POST)

publicMap<String,String>data2PDF(0RcqucstBodyJSONObjcctjsonlnput){

CreatePdfUli1createPdfUtil=newCrealcPdfUtil0;

Map<String,String>mapReiurn=createPdfUti1.data2PDE(daia2PdfService,jsonlnput);

returnmapReturn;

)

125?生成PDF文件,中文字體解決方案

運行以上程序,當(dāng)報表采用PDF格式輸出,并且其中存在中文時,控制臺會報錯,內(nèi)容如下。

Debugg**Output?"2)Tomjtlocjihostlog??-5JTomcatJtHirvilog其

net.$f.jasperreports.engine.JRRuntimeException:Couldnotloadthefollowingfont:

pdfFontName:STSong-Light

pdfEncoding:UniGB-UC52-H

IsPdfEmbedded:true

3atnet.sfjasperreports.engine.export.JRPdfExporter.getFoot(?xporterj?iva:-11?)

后atnet.sfjasperreports,engine,export.3RPdfExporter?getChunk《RPdKxportcr?nova:1317)

二atnet.sfjasperreports?engine?export?JRPdfExporter?jetPhrase(JRPdfExporter.java:1786)

atnet.sfjasperreports.engine.export.SimplePdfTextRenderer.getPhrase(sijplextRenc—,:—)

atnet.sf1asperreports.en&ine.export.SimplePdfTextRenderur.render(SimplePdfTextRenderer.java:99)

atnet.sfjasperreports.engine.export.JRPd<Exporter.exportText(:PdfFxporter.獷丫H:217b)

atnet.sfjasperreports.engine.export.DRPdfExporter.exportElementstJRPdfEx£ortJ?^java:860)

atnet.sfjasperreports,engine.export.JRPdfExporter.exportPage(JRPdfExport”.jdvd:82。)

atnet.sfjasperreports.engine.export.JRPdfExporter.exportReportToStrea?(^RPdfExpo:ter.jiva:697)

atnet.sfjasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.jdva:398)

atcom,svkd.bos.action.workbill.WorkBillAction.exportWorkBill(HorkBillAction63)<4internalca

atognl?OgnlRunt?invokeMethod《OalRuntime.Java:87。)

atoenl.OenlRuntine.callADDroDriateMethodfnlRuntire.:ava:1293)

這是因為導(dǎo)入的相關(guān)依賴包中沒有對應(yīng)的中文字體(顯示字體)。

網(wǎng)上提供了多種解決方案,最終試臉成功的只有如下一種:

9

JasperReport6.17.0編碼及Studio使用

首先,在JaspcrRcportStudi。中加入新的字體設(shè)置,可以命名為“華文宋體2021”(避免跟系統(tǒng)中現(xiàn)有

的“華文宋體”重名)。

JJaspersoftStudioProfessional

FileEditViewNavigateProjectWindowHelp

jF3▼JBuildAllqNewWindow

NewEditor

QReposiloProject於

--一HideToolbar

>曰MyReportsOpenPerspective

>必國美檔案ShowView

CustomizePerspective...

SavePerspectiveAs...

ResetPerspective...

ClosePerspective

CloseAllPerspectives

Navigation

L如Q網(wǎng)U

Preferences

10

JasperReport6.17.0編碼及Studio使用

J?FontFamily□X

FontFamily

Configurefontfamily

注意,此處選擇的PDFEncoding一定是你在報表的組件中已經(jīng)設(shè)置的值。

然后將報表中的靜態(tài)文本、文本框等需要文字輸出的內(nèi)容,分別選中,設(shè)置字體為新增加的“華文宋

體2021”。

ional

ProjectWindowHelp

;141Z

3□金jzpz.jrxml'DejavuSans

DejaVuSansl\|ono

多MainReport

DejaVuSerif

0,1,?'Monospaced

SansSerif

2文末體2021

1211cher_company_nam,AdobeArabic

髀3碼,l;^>ucher_numhcr|AdobeCaslonPro

AdobeCaslonProBold

摘要AdobeDevanagari

AdobeFanHeitiStdB

AdobeGaramondPro

保存報表,重新編譯為jasper文件。

接下來,需要修改SpringBoot工程中的內(nèi)容。

在src/main/rcsourccs目錄中,加入fonts文件夾,從系統(tǒng)中將字體文件STSONG.TTF拷貝到此處。

II

JasperReport6.17.0編碼及Studio使用

▼■src

▼■main

?1java

▼resources

▼Bifonts

患fonts.xml

TSTSONG.TTF

f|||jasperreports_perties

在src/main/resources目錄中加入jasperreporis_nenies配置文件,內(nèi)容如下。

net.sf.jasperreports,extension,registry,factory,simple,font,families=net.sf.jasperreports,engine.fonts.Simp

1eFontExtensionsRcgistryFactory

net.sf.jasperreports,extension,simple,font,families.lobstertwo=fonts/fonts.xml

根據(jù)此處的設(shè)置,需要在src/main/resources/fonts目錄下加入fonts.xml配置文件,內(nèi)容如下。

version="1.0"cncoding-^l'TF-B?>

<fontFamilies>

<fontFamilyname=”華文宋體2021”X!字體名稱》

<normal>fonts/STSONG.TTF</normal><!字體文件的路徑>

<bold>fonts/STSONG.TTF</bold>

<italic>fonts/STSONG.TTF</italic>

<boldItalic>fonts/STSONG.TTF</boldItalic>

<pdfEncoding>UniGB-UCS2TK/pdfEncodingX!-這里的定義就與報表設(shè)置相匹配了一〉

〈pdfEmbedded〉true</pd「Embedded)

<exportFonts>

<exportkey="net.$f.jasperreporls.himl">'華文宋體2021',Arial,Helvetica,sans-serif</export>

<exportkey"net.st.jasperreports,xhtml華文樂體Z02I',Arial,Helvetica,sans-ser11</exports

</exportFonts>

</fontFamily>

</fontFamilies>

重新執(zhí)行服務(wù),即可正常生成PDF文件了。

13特殊情況處理

13.1.默認頁打印空行

首先聲明:JasperReport無法自動在末頁補齊空行!!

在中式報表設(shè)計中,如果最后一頁打印數(shù)據(jù)的行數(shù)不足時,一般會打印足夠的空行,充滿此頁。而西

式報表在此種情況時,一般是留白。

經(jīng)過研究,可以采用在傳入報表的數(shù)據(jù)集加入足夠數(shù)量的空數(shù)據(jù),使報表可以生成空行工

12

JasperReport6.17.0編碼及Studio使用

如果數(shù)據(jù)源為JSON,則傳入足夠數(shù)量的空對象即可。如下圖。

"abstract":"XXXXX報銷手機費”,

"subject_name":"2241030000其他應(yīng)付款■員工”,

"debit_amount_lc":"",

"credit_amount_lc":"100.00"

{

"abstract":"",

"subject_name":"",

"debit_amount_lc":"'\

"credit_amount_lc":""

{

"abstract":"",

“subject_name”:”“,

"debi^amountjc":"",,

"credit_amount_lc":""

},

例如,每頁打印6記錄,而當(dāng)前記錄有8條,則補全4個空對象,使其形成6的倍數(shù)即可。

此種方案,案適合設(shè)置了“吁高自適應(yīng)”的表格,否則容易導(dǎo)致空行條數(shù)計算錯誤!

如果采用直接傳入數(shù)據(jù)庫連接的方式,暫時沒有合適的解決方案。

13.2.控制指定內(nèi)容只在末頁最后一行打印

首先說明,在報表模板中,無法通過預(yù)置的“變量”直接獲取當(dāng)前報表的“總頁數(shù)”!

目前可實現(xiàn)的方案,是服務(wù)端調(diào)用代碼中按照每頁顯示條數(shù),預(yù)先計算總頁數(shù),并將總頁數(shù)作為“字

段”或“參數(shù)”傳入報表,再進行判斷。

本例中,加入一個自定義字段"pages",接收服務(wù)端傳入的“總頁數(shù)”。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論