Здесь я использовал делегата для извлечения данных из базы данных, и я использую фреймворк ofbiz
.Невозможно показать данные по pdf в динамическом отчете
Исходный код, который генерирует PDF:
public static String createTransactionSummaryReport(HttpServletRequest request, HttpServletResponse response) throws Exception{
Delegator delegator = (Delegator)request.getAttribute("delegator");
String accountName = request.getParameter("accountName");
JasperReportBuilder report = report();
response.setContentType("application/pdf");
//OutputStream out = response.getOutputStream();
report.columns(
Columns.column("AccountName", "accountName", DataTypes.stringType()),
Columns.column("Amount", "amount", DataTypes.bigDecimalType()),
Columns.column("DebitAmount", "debitAmount", DataTypes.bigDecimalType()),
Columns.column("CreditAmount", "creditAmount", DataTypes.bigDecimalType())
).title(Components.text("Transaction Summary Details"))
.pageFooter(Components.pageXofY())
.setDataSource(getCollectionData(delegator, accountName))
.show();
/*try {
report.show();
//report.toPdf(out);
} catch(DRException ex) {
ex.getCause().printStackTrace();
}*/
return "success";
}
private static JRDataSource getCollectionData(Delegator delegator, String accountName) {
List<TransactionSummaryDataProvider> dataList = new ArrayList<TransactionSummaryDataProvider>();
List<GenericValue> accTgTransaDetails = null;
try {
accTgTransaDetails = delegator.findByAnd("AcctgTransEntrySums", UtilMisc.toMap("accountName",accountName));
} catch(Exception ex) {
ex.printStackTrace();
}
for(GenericValue eachData : accTgTransaDetails) {
String accName = eachData.getString("accountName");
BigDecimal amount = eachData.getBigDecimal("amount");
BigDecimal debitAmount = eachData.getBigDecimal("debitAmount");
BigDecimal creditAmount = eachData.getBigDecimal("creditAmount");
dataList.add(new TransactionSummaryDataProvider(accName, amount, debitAmount, creditAmount));
}
return new JRBeanCollectionDataSource(dataList);
}
Bean Класс:
public class TransactionSummaryDataProvider {
private String accountName;
private BigDecimal amount;
private BigDecimal debitAmount;
private BigDecimal creditAmount;
public TransactionSummaryDataProvider(String accountName, BigDecimal amount, BigDecimal debitAmount, BigDecimal creditAmount) {
this.accountName = accountName;
this.amount = amount;
this.debitAmount = debitAmount;
this.creditAmount = creditAmount;
}
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public BigDecimal getDebitAmount() {
return debitAmount;
}
public void setDebitAmount(BigDecimal debitAmount) {
this.debitAmount = debitAmount;
}
public BigDecimal getCreditAmount() {
return creditAmount;
}
public void setCreditAmount(BigDecimal creditAmount) {
this.creditAmount = creditAmount;
}
}
.show()
метод кидает InvocationTargetException
Как я могу решить эту проблему?
В dataList
требуются данные, но эти данные не отображаются в формате pdf.
Я думаю, что 'шоу()' будет работать при вызове его из 'main()'. –