2012-02-09 1 views
12

나는이 답변을 위해 높거나 낮은 것을 검색했으며 공백으로 왔습니다.JTextPane 바닥 글에 총 페이지 수를 인쇄하는 방법은 무엇입니까?

나는 "<N> <m > 페이지의 페이지에게"라는 글과 함께 JTextPane가의 내용을 인쇄 할 필요가있다. Java에서이 간단한 함수를 수행하는 것은 불가능한 것처럼 보입니다.

내가 인쇄 가능한 페이지 번호를 인쇄하도록 바닥 글을 설정할 수 있습니다.

 

    String header = "whatever"; 
    String footer = " Page - {0}"; 
    printText(textPane.getPrintable(new MessageFormat(header), 
     new MessageFormat(footer))); 

는 그러나 프린터 대화 상자가 전달 될 때까지 인쇄 될 총 페이지 수를 찾을 수있는 방법은없는 것처럼 보인다. 그 대화 상자가 프린터로 보내기 전에 페이지를 포맷하는 데 사용되기 때문입니다. 프린터 대화 상자에는 항상 페이지가 1 개만 있다고 표시됩니다.

그래서 JTextPane 문서를 살펴보고 print() 메서드 의 PageFormat에서 볼 수있는 영역을 가져 와서 각 줄의 높이 (fontsize)를 사용하여 페이지를 계산하는 루틴을 작성하기 시작했습니다. 각 페이지의 라인 수를 계산 한 다음 계속해서 페이지 수를 계산하십시오. 시스템이 인쇄() 메서드를 다시 호출하고, 시간이 인쇄() 메소드에 도달 할 때까지

 

     int maxh = (int) pf.getImageableHeight(); 
     Element section = doc.getDefaultRootElement(); 
     for (int i=0; i<paraCount; i++) 
     { 
     Element e = section.getElement(i); 
     // Get the attributeSet for this paragraph (Element) 
     // The attributeSet contains the Styles, which contain 
     // the fonts etc. 
     AttributeSet attrs = e.getAttributes(); 
     int fontsize = StyleConstants.getFontSize(attrs); 

     // .... add up the lines and count filled pages ... 
     } 

그러나, PageFormat에 사용할 수없는, 이후 바닥 글을 수정하는 것은 불가능 보인다 머리글과 바닥 글은 모두 메서드 호출에서 "최종"로 정의됩니다

 


     public Printable getPrintable(final MessageFormat headerFormat, 
             final MessageFormat footerFormat) 

분명히 누군가가이 기본 기능을 할 수있는 간단한 방법을 발견했다.

도움을 주실 수있는 분들께 미리 감사드립니다. 페이지 매김하고 JEditorPane의/JTextPane가의 인쇄에 대한 기사는 아래의 링크를 당신을 위해 트릭을 할 것입니다 경우

+0

+1 좋은 질문 :-) – kleopatra

+0

MessageFormat은 최종적이지 않습니다. MessageFormat.applyPattern을 사용하여 메시지를 처음 지정했지만 인쇄하기 직전에 변경 한 적이 있습니까? 또한 페이지 계산은 sun.swing.text.TextComponentPrintable.java에서 수행됩니다. 그것들은 매우 복잡하지만 어쨌든 두 번이나 서브 클래 싱되거나 실제 인쇄를 우회하기 위해 리디렉션되지만 페이지 총계와 두 번째 인쇄 시간을 얻을 수 있습니다. 그냥 몇 가지 아이디어 ... – Boann

+0

아직 그 중 아무 것도 시도하지 않았습니다. 팁 주셔서 감사합니다.header() 및 footer()를 print() 메서드에서 수정하는 방법을 모르겠습니다. 어떻게 든 페이지 수를 계산할 수 있다면 print() 메서드를 간단하게 유지할 수 있습니다. – Banjo

답변

2
+0

+1 체크 할 기사가 하나 더 있습니다. http://java-sl.com/JEditorPanePrinter.html 페이지 넘김 프린터를 수정하여 자신의 바닥 글을 추가하는 것은 쉽습니다. – StanislavL

1

이것을 성취하기위한 "직접적인"방법이없는 것 같습니다.

출력의 총 페이지 수는 인쇄 시간 전에 알려져 있지 않기 때문에

는 같은 번호의 형식을 지정하는 방법은 없습니다 "페이지 5 일"다음 tutorial on JTextComponent는 다음과 말했다.