How to download a PDF file instead of saving it

0

I really need some help with this..  I tried everything I found here and on other sites to make it work, but unfortunately it still doesn't work. I tried to do this in several different ways.

I'm using Jasper Reports and I just need to download the file instead of saving it to my desktop.

This is my code:

@RestController
public class ReportController {
 
@Autowired
private ReportService reportService;
 
@GetMapping("/report/{month}/{year}")
public void export(HttpServletResponse response, @PathVariable Integer month, @PathVariable Integer year) throws IOException, JRException, SQLException {
 
    JasperPrint jasperPrint = null;
 
    response.setContentType("application/x-download");
    response.setHeader("Content-Disposition", String.format("attachment; filename=\"despesas.pdf\""));
 
    OutputStream out = response.getOutputStream();
    jasperPrint = reportService.exportPdfFile(month,year);
    JasperExportManager.exportReportToPdfStream(jasperPrint, out);
}
}

And:

@Service
public class ReportService  {
 
@Autowired
private ExpenseRepository er;
 
@Autowired
private ResourceLoader resourceLoader;
 
public JasperPrint exportPdfFile(Integer month, Integer year) throws IOException, JRException {
 
    List<Expense> expenses = er.findAll();
    String period = month + "/" + year;
    //File desktop = new File(System.getProperty("user.home"), "Desktop");
 
 
    String path = resourceLoader.getResource("classpath:jasper_reports/expenses.jrxml").getURI().getPath();
    JasperReport jasperReport = JasperCompileManager.compileReport(path);
    JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(expenses);
    Map<String, Object> parameters = new HashMap<>();
    parameters.put("periodParameter", period);
    JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
    //JasperExportManager.exportReportToPdfFile(print, desktop +"\\despesas.pdf"); This saves the file on my desktop
 
 
    return print;
}
}

When I run this nothing happens, the console does not report any errors and the download does not start. I've already tried it in different browsers

Can someone tell me why is it not working or give me a suggestion ? Thank you so much..

ProgrammerBR's picture
Joined: Jun 25 2020 - 8:07am
Last seen: 3 months 2 weeks ago

1 Answer:

0

The problem was the front-end, I fixed it using this:

 

.then((response) => {
                             const url = window.URL.createObjectURL(new Blob([response.data]));
                             const link = document.createElement('a');
                             link.href = url;
                             link.setAttribute('download', type + '_'+month'_'+ year +'.pdf');
                             document.body.appendChild(link);
                             link.click();
                         })
ProgrammerBR's picture
Joined: Jun 25 2020 - 8:07am
Last seen: 3 months 2 weeks ago
Feedback
randomness