2009-03-05 31 views

답변

21

해답을 찾지 못했습니다. 관심있는 사람은 다음과 같이하십시오.

@page land { size:landscape; } 
@page port { size:portrait; } 
.landscapePage { page:land; } 
.portraitPage { page:port; } 

voilá!

12

Derek이 언급 한 문제로 여전히 고생하는 사람에게는 레이아웃을 전환하는 요소의 너비를 명시 적으로 설정해야한다는 것을 알았습니다. 예제 사업부와 그래서

<div class="portraitPage"> 
    <p>Some page content in portrait</p> 
</div> 
<div class="landscapePage"> 
    <p>Some page content in landscape</p> 
</div> 

이 올바르게 가로 페이지 다음에 세로 페이지의 서식을하지만, 가로 페이지의 콘텐츠는, 세로 페이지로 넓은 것조차 @page 토지 선언하는 경우 너비가 있습니다. 내가 필요로하는 것은 적용 관련 클래스가 사업부에 직접 폭을 설정하는, 그래서 선언은 폭이 계정에를 통해 적용된 마진이나 패딩을해야하지만

.landscapePage { page:land; width: 29.7cm; } 

조심 더

같은 것입니다 @page 선언 블록.

0

런타임시 페이지 크기를 동적으로 처리 할 수 ​​있습니다. 다음 단계

  1. 페이지 유형의 PARAM 페이지 유형, 예를 들면 가로 또는 세로에 대한 추가 매개 변수를 추가를 따르십시오
  2. 추가 등의 서버 측에서 당신의 HTML을 생성하는 스타일 태그에 다음 코드
FileOutputStream fos = new FileOutputStream(file); 
ITextRenderer renderer = new ITextRenderer(); 
StringBuilder htmls = new StringBuilder(); 
htmls.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 
htmls.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); 
htmls.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); 
htmls.append("<head><style type=\"text/css\">"); 
htmls.append("@page{ size: "+request.getParameter("pageType")}"); 
htmls.append("</style></head>"); 
htmls.append("<body><div>dynamic pdf data</div></body></html>"); 
renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\Calibri.ttf","UTF-8",BaseFont.NOT_EMBEDDED); 
renderer.setDocumentFromString(htmls.toString()); 
renderer.layout(); 
response.setContentType("application/octet-stream"); 
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".pdf\""); 
renderer.createPDF(outputStream); 
renderer.createPDF(fos); 
관련 문제