2017-10-13 10 views
0

PDF 플러그인을 사용하고 있지 않습니다. Jasper 용 Java API를 사용하고 있습니다. 모든 것이 잘 작동합니다. 별도의 창에서 PDF가 열립니다. 내가 겪고있는 문제는 데이터가 발견되지 않고 브라우저의 빈 탭으로 열리는 경우입니다. 나는 이것을 가로 채고 데이터가 없다는 메시지를 보여 주려고 노력하고 있지만, 나는 아무 것도 시도하지 않고있다. 여기 Grails 컨트롤러를 사용하여 PDF를 생성하기 전에 데이터가 존재하는지 확인하십시오.

컨트롤러에서 코드입니다 : 내가 Jquery.ajax을 시도하고 PDF 데이터 또는 성공 기능에 메시지를 잡기 위해 노력했습니다

projAccomps = projAccomps.findAll { ProjectAccomplishment pa -> 
    pa.workDate >= startDate && pa.workDate <= endDate 
} 

// I'd like to be able to check right here for no data 
// and send back a message instead 
// 
// if (projAccomps.size() < 1) ... 

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(projAccomps) 

String jasperFile = 
     grailsApplication.mainContext 
       .getResource('reports/accomplishment-listing.jasper') 
       .file 
       .getAbsoluteFile() 

// Report parameter 
Map<String, String> reportParam = new HashMap<String, String>() 

String projectQuery = "All projects" 
String dateRange = "" 
Boolean allProjects = true 
if (params.project) { 
    projectQuery = project.name 
    allProjects = false 
} 
if (params.startDate) { 
    dateRange = startDate.format('MM/dd/yyyy') 
} 
if (params.endDate) { 
    dateRange += " - " + endDate.format('MM/dd/yyyy') 
} 

String reportCriteria = "Work Order: ${wo.workOrderNumber}, Project(s): ${projectQuery}, Dates: ${dateRange}" 
reportParam['report_criteria'] = reportCriteria 
reportParam['all_projects'] = allProjects 

JasperPrint print = JasperFillManager.fillReport(jasperFile, reportParam, ds); 

byte[] bytes = JasperExportManager.exportReportToPdf(print) 

render(file: bytes, contentType: 'application/pdf') 

, 그러나 그것은 재앙이었다.

누구든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 예를 들어, 응답을 생성하는 방법은 여러 가지, 리디렉션 또는 렌더링, 경우에 당신이

내가이

일을해야한다고 생각 리디렉션하고 수익을 사용하는 것이 합리적 노출이있는 컨트롤러 액션에서
+0

위는 ajax를 통해 호출 되었습니까? –

답변

1

// ... get projAccomps data 

if (!projAccomps) { 
    flash.message "No result between $startDate and $endDate" 

    redirect uri: '/some/url' 
    return 
} 

// ... render pdf logic 

이 당신이 벽옥 대안을 시도하려는 경우 빌더를 사용하여 PDF 나 워드 문서를 만들 수 있습니다 도서관, 내가 링크를 공유입니다

https://github.com/craigburke/document-builder

+0

이것은 매개 변수를 제출하는 양식에 target = "_ blank"사실을 제외하고는 작동하지만 새 탭/창을 즉시 열게 만듭니다. 이것은 필수 사항입니다. 또한이 페이지에는 많은 아약스가 있는데 'empty'메시지가 flash.message와 비슷한 페이지의 어딘가에 나타나기를 원했지만 '성공'메시지에서 PDF 데이터를 가져올 수 없었습니다. 함수를 호출 한 다음 어떻게 든 렌더링하면이 작업이 어려워집니다. –