2011-04-19 7 views
1

iReport는 고객이 제품 인쇄용 카탈로그를 생성 할 수있게합니다. 이 프로세스는 훌륭하게 작동합니다. 우리가 어려움을 겪은 것은 이러한 제품 카탈로그의 목차를 만드는 방법입니다.iReport/JasperReports에서 목차를 작성하려면 어떻게해야합니까?

Scriptlet 기능을 사용하여이 기능을 사용하기로 결정했습니다. 우리의 보고서는 모두 마스터 보고서와 하위 보고서가 있다는 점에서 모두 마스터 세부 사항입니다.

처음에는 스크립트 보고서를 마스터 보고서에 첨부하고 세부 보고서에서 모든 제품 번호를 수집하는 방법을 찾은 다음 해당 값을 마스터 보고서로 다시 전달하려고했습니다. 하위 보고서의 기본 변수 (예 : PAGE_NUMBER, COLUMN_NUMBER, PAGE_COUNT, COLUMN_COUNT) 만 마스터 보고서로 다시 전달하는 방법을 알아낼 수 없습니다.

그렇다면 세부 정보 보고서에 Scriptlet을 첨부 해 보았습니다. 음, 세부 정보 보고서는 마스터가있는 페이지를 알지 못하므로 마스터의 page_number를 상세 보고서의 변수에 전달하기 시작했습니다. 마스터에서 페이지 번호를 건너 뛸 때까지 세부 사항이 오버 플로우 될 수 있다는 것을 제외하고는 효과적이었습니다. 즉, 하위 보고서에서 2 페이지 분량 이상의 데이터를 반환하면 다음에 하위 보고서를 호출 할 때 페이지 번호가 누락됩니다.

이렇게하는 방법?

답변

2

위의 아이디어 중 하나와 비슷하게 접근 방식을 발견했습니다. 우선, 호출하는 보고서에 값을 반환하는 하위 보고서를 가져올 수 없습니다. 그런 다음 스크립틀릿 내부에서 getVariableValue를 사용하여 해당 값을 검색합니다. 나는 영원히 노력했고, 나는 그 일을 할 수 없었다.

대신에 동일한 스크립틀릿을 마스터 보고서와 하위 보고서에 모두 첨부하는 방식을 사용했습니다. 스크립틀릿에는 클래스 변수가 있습니다. 여기서 세부 사항에서 만나는 모든 제품 번호의 실행 집계를 유지할 수 있으며,이 코드는 스크립틀릿의 afterDetailEval() 메소드 내부에 있습니다. 이 코드는 하위 보고서에 대해서만 실행되기를 원하므로, null이 될 특정 세부 필드가 있는지 확인해야합니다. 그렇지 않은 경우 코드를 실행하지 않습니다. 따라서 마스터 보고서에서 해당 이벤트를 호출하면 코드가 실행되지 않습니다.

이제 예제를 통해 배웠던 부분입니다. 이 예제의 훌륭한 부작용 프로그래밍은 "Expression When Print"속성에 사용자 지정 스크립틀릿 메서드에 대한 호출을 포함하는 1x1 차원의 선이 있다는 것입니다. 그거 좋은 생각이야! 따라서이 사용자 지정 메서드는 무엇을해도 false를 반환하고 줄이 인쇄되지 않습니다. 페이지 바닥 글에서 같은 작업을 수행했으며이 메서드는 클래스 변수에서 값을 수집하고 페이지를 결정한 다음 결과를 해시에 저장합니다. 그런 다음 클래스 변수를 다시 설정합니다.

보고서 요약 밴드에서 또 다른 사용자 지정 방법을 호출하는 다른 줄이 인쇄되지 않습니다. 내가 여기서하는 모든 작업은 제품 번호의지도를 반복하여 각 페이지가 나타나는 모든 페이지를 보여줍니다. 끝난!

+0

이 전체 프로세스는 여전히 보고서 끝 부분에 목차를 표시합니다. – Andrea

+0

아니요, 실제 코드를 실행하는 Java 코드에서 배열의 JasperPrint 객체를 수집합니다. 목차가 작성되면 자동으로 배열의 시작 부분에 삽입됩니다. – AKWF

1

는 프로젝트 폴더 JasperReports를-x.x.x/데모/샘플/TableOfContents를에서 (하위 보고서) 내용의 테이블의 예입니다.

하이퍼 링크 예도 참조하십시오.

하이퍼 링크, 앵커 및 책갈피

는 JasperReports를 사용하면 문서의 내용 의 테이블을 소개하거나 하이퍼 링크라는 특별 보고서 요소를 사용하여 외부 문서에 시청자를 리디렉션 드릴 다운 보고서를 만들 수 있습니다.

+0

이 예제에서 몇 가지 사실을 알았지 만, 내 상황과의 차이점은 하위 보고서에서만 세부 사항을 알 수 있다는 것입니다. 이 예에서는 하위 보고서를 사용하여 마스터에서 조립 된 세부 정보를 인쇄합니다. – AKWF

관련 문제