java调用jasper,java – 使用JasperReports与相对路径

在Java网络应用中,原本通过绝对路径加载并展示JRXML报告的方法需要改为使用相对路径。尝试将JRXML文件的路径设置为request.getContextPath() + "/jrxmlFiles/",但在编译或填充报告时遇到`java.io.FileNotFoundException`异常。已查阅相关资料,但未能找到解决方案。问题在于如何调整代码以正确处理JasperDesign的相对路径加载。
摘要由CSDN通过智能技术生成

我有一个网络应用程序,客户端请求查看一些报告.该方法一直是使用iReport并在屏幕上显示报告.

I have already asked something like this.但是今天我发现报告文件(jrxml)的路径是绝对的.所以我必须更改程序,以便它接受相对路径.我一直在尝试这样做,但似乎jrxml或编译(.jasper)文件都不接受相对路径,无法编译或填写报告.

这是我已经得到的:

//path is generated as request.getContextPath() + "/jrxmlFiles/"

public void generateReport(HttpServletResponse res, ConexionAdmin con, String path) throws Exception{

ServletOutputStream out = null;

ByteArrayOutputStream bos = new ByteArrayOutputStream();

JasperDesign jasperDesign = JRXmlLoader.load(path);

JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, pars, con.initConexion());

res.setContentType("application/pdf");

res.setContentLength(bytes.length);

out = res.getOutputStream();

out.write(byt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用打印机打印入库单的具体实现方式需要根据你所使用的打印机和打印模板来确定。以下是一般的实现步骤: 1. 创建入库单对象,包含所需的入库信息。 2. 根据入库单对象填充打印模板,生成打印数据。 3. 使用JasperReports或其他报表工具将打印数据生成为可打印的格式。 4. 使用Java打印库将打印数据发送到打印机并进行打印。 以下是一个简单的示例代码: ```java import java.io.File; import java.util.HashMap; import java.util.Map; import javax.print.PrintService; import javax.print.PrintServiceLookup; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; public class PrintInvoice { public static void main(String[] args) throws Exception { // Step 1: create invoice object Invoice invoice = new Invoice("INV-1234", "John Doe", "2021-01-01", 1000.0); // Step 2: fill invoice data into print template Map<String, Object> params = new HashMap<>(); params.put("invoice", invoice); File templateFile = new File("template/invoice_template.jasper"); JasperReport report = (JasperReport) JRLoader.loadObject(templateFile); JasperPrint print = JasperFillManager.fillReport(report, params); // Step 3: print invoice PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); if (services.length > 0) { PrintService printService = services[0]; print.setPrinterName(printService.getName()); JasperPrintManager.printReport(print, false); } } } class Invoice { private String number; private String customerName; private String date; private double amount; public Invoice(String number, String customerName, String date, double amount) { this.number = number; this.customerName = customerName; this.date = date; this.amount = amount; } public String getNumber() { return number; } public String getCustomerName() { return customerName; } public String getDate() { return date; } public double getAmount() { return amount; } } ``` 这个示例代码包含了以下步骤: 1. 创建入库单对象。 2. 根据入库单对象填充打印模板。 3. 使用JasperReports将打印数据生成为可打印的格式。 4. 使用Java打印库获取可用打印机列表并选择第一个打印机,将打印数据发送到打印机并进行打印。 注意:在运行这个示例代码的时候,需要将打印模板的路径和打印机的名称替换为实际的路径和名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值