BIRT部署並利用API生成PDF
注:本文轉自 http://blog.csdn.net/xujiaqiang/archive/2008/01/19/2052789.aspx
感謝作者分享。
Birt報表設計步驟:
1、下載birt all in one 2.2.1.1,包含eclipse,解開下載檔案
啟動eclipse,必須使用JDK1.5啟動eclipse,否則新建工程對話方塊中沒有birt的相關選項
2、新建report project和report
開啟data explorer檢視,新建一個data sources,定義資料庫連線driver/url/使用者名稱/密碼,在"Manage Drivers..."中把jdbc的jar加進來
3、新建Report Parameter,設定引數名稱、型別,引數值將來通過url傳遞或使用程式方式賦值
4、新建data sets,設定Query,即preparedStatement語句,設定data set的Pameters,即reparedStatement中的“?”,使之和report parameter關聯; 如果data set的Parameter的值不是來自於Report Parameter,例如來自另外一個data set, 可不設定關聯,而在報表內容中設定和其它data set欄位的關聯(見步驟8)
5、如果data set對應的sql是動態生成的,可以設定“property Binding”,在Query Text中輸入sql和表示式,其中可以使用Report Parameter和javascript語句,執行時將執行Property Binding中的Query Text,而不執行Query中的preparedStatement,但是Query中的preparedStatement在設計報表時還是有用的,因為可以看到執行結果的欄位列表,只要preparedStatement和Query Text返回相同的欄位即可
6、將定義好的data set拖動到設計介面上,會自動在報表放置一個Table
7、如要對table的某列合計,從Palette檢視中拖一個“Aggregation”到設計介面
8、如要Master-Sleve報表,則在Table中再放置一個Table。例如一個data set是客戶基本資訊,每個客戶一條記錄,另一個data set是客戶交易明細,每個客戶可能有多條記錄,則先將客戶基本資訊的data set拖置設計介面,會自動放置一個Table,然後將客戶交易明細的data set拖置前一個Table中適當位置,即生成一個Table中的Table。選中交易明細的Table,開啟Property Editor檢視,在binding欄中,選擇交易明細的data set,按“Dataset Parameter Binding...”,選擇“CUST_ID"欄位,將其和客戶基本資訊data set的CUST_ID關聯起來(row["CUST_ID"])
9、按需要調整報表的樣式,從eclipse工具欄中選擇“view report in web viewer”,如果設定了Report Parameter,會出現一個對話方塊,要求輸入Report Parameter的值,按確定後生成報表內容
10、在web viewer中,滑鼠右建點按生成的報表,選“屬性”,獲取url,開一個空白IE,複製url到位址列,在url最後用“&引數名=引數值”方式,把Report Parameter加進url,按回車,直接出現報表結果,不再出現報表引數輸入對話方塊。還可以pdf/doc/html等格式預覽生成的報表
Birt報表部署步驟:
部署設計好的報表很簡單,只需要下載Birt runtime,將Birt runtime部署為一個web應用,報表設計檔案複製到該應用的根目錄即可。為方便起見,以下將Birt runtime部屬為一個獨立的應用,當然也可以將Birt runtime整合到你的web應用中
1、下載birt runtime 2.2.1.1,解開下載檔案
2、將birt rumtime解開後的目錄下的部署為一個web應用,使用JDK1.4.2或以上版本
3、將報表設計步驟中生成的設計檔案(*.retdesing檔案)複製到web應用所在目錄
4、確保以下檔案在WEB-INF/lib目錄下存在,如果沒有,從all in one中搜尋複製過來
com.ibm.icu_3.6.1.v20070906.jar
coreapi.jar
engineapi.jar
scriptapi.jar
5、將jdbc的jar或zip檔案複製到WEB-INF\platform\plugins\org.eclipse.birt.report.data.oda.jdbc_2.2.1.r22x_v20070919\drivers目錄下
6、刪除WEB-INF\platform\org.eclipse.birt.report.data.oda.sampledb_2.2.1.r22x_v20070919目錄(示例資料庫,沒什麼用處),否則生成報表時有不必要的警告資訊出現
7、啟動web server,修改設計步驟第10步獲得的url,使IP/埠/web應用名稱符合你的Birt runtime部署,在IE中可以檢視報表內容
使用Birt提供API以程式方式生成報表結果,例如生成PDF格式的報表結果,程式碼片段如下:
import java.util.HashMap;
import java.util.logging.Level;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.ByteArrayOutputStream;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.PDFRenderOption;
public class PDFReportServiceAccess
{
/** *//** 初始化的狀態 */
protected static boolean initStatus = false;
private static IReportEngine engine = null;
private static EngineConfig config = null;
private static IReportRunnable design = null;
private static PDFRenderOption ro = null;
/** *//** 初始化資源 */
public void initilize()
{
if ( initStatus == true )
return;
try
{
config = new EngineConfig();
config.setEngineHome( "C:/projects/birt/WEB-INF/platform" ); //birt runtime web應用中的報表引擎目錄
config.setLogConfig( "C:/projects/birt/logs", Level.FINE );
Platform.startup( config );
IReportEngineFactory factory = ( IReportEngineFactory ) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
engine.changeLogLevel( Level.WARNING );
ro = new PDFRenderOption();
// ro.setBaseURL( "http://localhost:8080/birt" ); //birt runtime web應用
config.getEmitterConfigs().put( "pdf", ro ); //生成pdf格式
initStatus = true;
}
catch ( Exception ex )
{
ex.printStackTrace();
initStatus = false;
}
}
/** *//** 釋放資源 */
public void release()
{
engine.shutdown();
Platform.shutdown();
initStatus = false;
}
protected OutputStream run( String filename, HashMap parameters ) throws EngineException
{
design = engine.openReportDesign( filename );
// Create task to run and render the report,
IRunAndRenderTask task = engine.createRunAndRenderTask( design );
HashMap contextMap = new HashMap();
contextMap.put( EngineConstants.APPCONTEXT_PDF_RENDER_CONTEXT, ro );
task.setAppContext( contextMap );
task.setParameterValues( parameters );
task.validateParameters();
OutputStream os = new ByteArrayOutputStream();
ro.setOutputStream( os );
ro.setOutputFormat( "pdf" );
task.setRenderOption( ro );
task.run();
task.close();
return os;
}
/** *//**
* 生成PDF格式報表,以OutputStream格式返回
*
* @param filename 報表設計檔名全路徑
* @param parameters
* 報表引數
* @return ByteArrayOutputStream
* @throws EngineException
*/
public OutputStream call( String filename, HashMap parameters ) throws EngineException
{
initilize();
OutputStream os = run( filename, parameters );
release();
return os;
}
/** *//**
* @param args
*/
public static void main( String[] args )
{
HashMap parameters = new HashMap();
//三個Report Parameters,名稱必須在報表設計檔案中預先定義好
parameters.put( "begindate", "2004/01/01" );
parameters.put( "enddate", "2007/12/31" );
parameters.put( "sql", " where cust_id = 1234567" );
ByteArrayOutputStream bos = null;
PDFReportServiceAccess ebr = new PDFReportServiceAccess();
String filename = "C:/projects/birt/batch_report.rptdesign";
try
{
bos = ( ByteArrayOutputStream ) ebr.call( filename, parameters );
OutputStream fis = new FileOutputStream( "c:/test.pdf" );
bos.writeTo( fis );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
相關文章
- 教你利用PHP生成PDF檔案PHP
- 利用Google API生成二維碼GoAPI
- 利用SelectPdf外掛將網頁生成PDF網頁
- Java 渲染 docx 檔案,並生成 pdf 加水印Java
- 如何利用showdoc自動生成API文件API
- 使用【APIDOC】生成JavaWeb的API文件(HTML,MarkDown,PDF)APIJavaWebHTML
- 使用 Sphinx 撰寫技術文件並生成 PDF 總結
- 利用API獲取金融資料並畫圖API
- 【效能優化】Oracle 部署 Statspack並生成報告優化Oracle
- 使用 Laravel snappy 生成 PDF 並整合到 Laravel-adminLaravelAPP
- 利用 Adobe Reader 的API將 PDF 轉換成 BMPAPI
- 【效能最佳化】Oracle 部署 Statspack並生成報告Oracle
- Java 生成 PDF 文件Java
- C#生成PDFC#
- Cisdem PDF Creator(PDF 生成轉換器)
- BIRT 如何用 rest api 介面獲取 json 做報表RESTAPIJSON
- 史上最簡單的Swagger2實現API文件的靜態部署並支援匯出PDF並解決中文亂碼問題...SwaggerAPI
- java-pdf-itext7、itextpdf 生成pdf 文件Java
- Laravel 生成 PDF 文件 - tcpdfLaravelTCP
- 利用html5 file api讀取本地檔案(如圖片、PDF等)HTMLAPI
- 通過API開啟PDF檔案,並進行指定文字的搜尋API
- 利用 JS 進行圖片處理並生成對應粒子圖JS
- java生成簡易pdf文件Java
- 用js生成PDF的方案JS
- java生成PDF檔案【Z】Java
- Roslyn 編譯器Api妙用:動態生成類並實現介面ROS編譯API
- Laravel API 文件生成器生成指定的 API 文件LaravelAPI
- Oracle Form中呼叫併發請求生成報表並輸出為PDF的方法OracleORM
- 解析 API Blueprint 文件並自動化生成程式碼(可定製模板)API
- BIRT 如何連線 MongoDBMongoDB
- BIRT呼叫oracle function薦OracleFunction
- 實踐指南-網頁生成PDF網頁
- 巧用ASP生成PDF檔案 (轉)
- LaTeX 生成黑底白字的 PDF
- lumen/laravel 生成pdf中文亂碼Laravel
- .NET 工具庫高效生成 PDF 文件
- PDF 分割拆分 API 資料介面API
- birt報表:BIRT報表在TOMCAT下執行環境配置!Tomcat