Генерация PDF с помощью Angularjs и RestController - PullRequest
0 голосов
/ 31 января 2019

Я создал API отдыха для генерации PDF-файла с использованием Itext API.Пожалуйста, помогите мне сгенерировать это и отправить в пользовательский интерфейс для загрузки этого PDF.

Здесь я использую Angularjs, SpringBoot и Mysql в качестве базы данных.

    @RequestMapping(value = "/generateGeneralLedgerReportPdf", method = 
     RequestMethod.GET)
    public void generateSalesReportPdf(@RequestParam("ledgerStartDate") 
     String ledgerStartDate,
        @RequestParam("ledgerEndDate") String ledgerEndDate) {

    try {

        SimpleDateFormat simpleDateFormat = new 
      SimpleDateFormat("yyyy-MM-dd");
        Date startDate = 
       simpleDateFormat.parse(ledgerStartDate);
        Date endDate = simpleDateFormat.parse(ledgerEndDate);

        List<GeneralLedger> listLedgerDetails = null;
        int count = 0;

        File file = new File("E:\\GeneralLedgerReport.pdf");

        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new 
    FileOutputStream(file));
        document.open();

        //create PDF
        PdfPTable table = new PdfPTable(6); // 10 columns.
        table.setWidthPercentage(100); //Width 100%


        PdfPCell c1 = new PdfPCell(new Phrase("#"));
        c1.setHorizontalAlignment(Element.ALIGN_LEFT);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("DATE"));
        c1.setHorizontalAlignment(Element.ALIGN_LEFT);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("INCOME CATEGORY"));
        c1.setHorizontalAlignment(Element.ALIGN_LEFT);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("AMOUNT"));
        c1.setHorizontalAlignment(Element.ALIGN_LEFT);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("EXPENSE CATEGORY"));
        c1.setHorizontalAlignment(Element.ALIGN_LEFT);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("AMOUNT"));
        c1.setHorizontalAlignment(Element.ALIGN_LEFT);
        c1.setBackgroundColor(BaseColor.GRAY);
        table.addCell(c1);



        listLedgerDetails = generalLedgerService.generateGeneralLedgerPdfByRange(startDate, endDate);

        if (!listLedgerDetails.isEmpty()) {
            for (GeneralLedger ledger : listLedgerDetails) {
                    count ++;

                    Double incomeAmount = ledger.getIncomeAmount();
                    if(incomeAmount==null) {
                        incomeAmount = 0.0d;
                    }

                    Double expenseAmount = ledger.getExpenseAmount();
                    if(expenseAmount==null) {
                        expenseAmount = 0.0d;
                    }

                    table.addCell(String.valueOf(count));
                    table.addCell(String.valueOf(ledger.getLedgerDate()));
                    table.addCell(ledger.getIncomeCategory());
                    table.addCell(String.valueOf(incomeAmount));
                    table.addCell(ledger.getExpenseCategory());
                    table.addCell(String.valueOf(expenseAmount));
            }
        }

        document.add(table);
        document.close();
        writer.close();

    }catch (Exception e) {
        e.printStackTrace();
    }


}

Angularjs

$scope.generateGeneralLedgerReportPdf = function(startDate,endDate){
    $http({
        url: 
 'service/generalLedger/generateGeneralLedgerReportPdf', 
        method: "GET",
        params: {ledgerStartDate:startDate,ledgerEndDate:endDate}
    })
    .success(function(response){ 
        console.log("Success");
    })
    .error(function(response) {
        console.log("Failed");
    });
   };

Это дает мне правильный выход, но он хранится в локальной системе E: диск.но я хочу скачать в окне браузера.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я добавил только эти строки кода, и у меня это сработало.

        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
                String mimeType = 
          URLConnection.guessContentTypeFromStream(inputStream);

                if(mimeType==null) {
                    mimeType = "application/octet-stream";
                }

                response.setContentType(mimeType);
                response.setContentLength((int)file.length());
                response.setHeader("Content-Disposition",String.format("attachment; fileName=\"%s\"", file.getName()));

                FileCopyUtils.copy(inputStream, response.getOutputStream());
0 голосов
/ 31 января 2019

Ваш загружаемый код также отсутствует, это зависит от того, какой файл доступен для общего доступа через ваш HTTP-сервер или контейнер сервлетов, на который вы можете просто перенаправить через response.sendRedirect ().Если это не так, вам нужно будет вручную скопировать его в поток вывода ответа:

Добавьте приведенный ниже код в ваш код.

OutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream(my_file);
byte[] buffer = new byte[4096];
int length;
while ((length = in.read(buffer)) > 0){
    out.write(buffer, 0, length);
}
in.close();
out.flush();

Вам нужно будет обработать соответствующие исключения,конечно.

...