2009-04-09 6 views
1

표시를 위해 생성하는 보고서의 일부 부분을 강조하고 싶습니다.
보고서 정의를 변경하고 싶지 않습니다. 런타임시 출력을 강조하고 싶습니다.Jasper 보고서 뷰어에서 일부 텍스트 강조 표시

하지만 JRViewer에는 실제로 많은 API가 없습니다.
JasperPrint 객체를 표시하기 전에 setForecolor/setBackcolor를 사용하여 JasperPrint 객체를 조작해도 출력이 변경되지 않았습니다.

아이디어가 있으십니까? 또는 뷰어를 오버로드하거나 다시 구현해야합니까? 오픈 소스 이래로 많은 문제가되지는 않겠지 만, 바퀴의 재발 명을 막고 싶습니다.

답변

0

내 질문에 직접 답변해야하는 것처럼 보입니다 ... 다시.

나는 (흥미로운 패널 중 누구도 접근 할 수 없었다 때문에 실제로 JRViewer의 코드를 복사)를 JRViewer 클래스를 오버로드하고 다음과 같이 몇 가지 강조 방법을 추가 :

템플릿 기반 JasperPrint 데이터를 사용 - 이름이 암시처럼 - 템플릿. 텍스트 객체가 자신 만의 스타일을 가지고 있지 않다는 것을 의미하며, 템플릿의 스타일을 사용합니다.
그 이유는 setForecolor가 아무 것도하지 않는 이유입니다. JRTemplatePrintElement 구현은 단순합니다.

하지만 텍스트 템플릿에 강조 표시를 설정하면 템플릿 인스턴스를 공유하므로 강조 표시된 텍스트의 전체 열로 끝납니다.
대신 새 템플릿을 강조 표시된 원본의 복사본으로 만들어 강조 표시된 인쇄 요소에서 사용하십시오. Btw, 그 벽옥 요소 정말 복제() 메서드를 사용할 수 있습니다.
해킹과 같은 느낌이지만 더 좋은 방법은 없습니다.

업데이트 :
그러나 이것은 파일 기반 (가상화 된) 보고서에 대해 부작용이 있습니다. 페이지를 이동하는 동안 요소에 대한 변경 사항을 저장합니다. 그러나 그 동안 뷰어가 참조하는 요소를 버추얼 라이저에서 버리면 (예 : 페이지를 뒤집음으로써) 추가 변경 사항이 저장되지 않습니다.

그래서 제가 다시 생각하게되었습니다. Jasper의 PageRenderer에 의해 그려진 Graphics 객체 위에 내 강조 표시를 그립니다.
훨씬 간단하고 깨끗합니다. 배경 만 강조 표시하면이 방법으로 작동하지 않습니다.

관련 문제