Pergunta

Existe uma maneira de definir diferentes estilos de página com Flying Saucer / iText? Eu preciso ter o primeiro par de páginas na paisagem, em seguida, mudar para o retrato em uma determinada página e para fora.

Todas as idéias?

Foi útil?

Solução

Não importa, encontrei a resposta. Para quem estiver interessado, este é como fazê-lo:

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

voilá!

Outras dicas

Para quem ainda está preso com o problema Derek mencionou, eu descobri que eu preciso definir explicitamente uma largura no elemento que está a mudar o seu layout. Assim, com o exemplo div

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

que irá formatar corretamente uma página retrato seguido por uma página de paisagem, mas o conteúdo na página de paisagem só será tão ampla como a página retrato, mesmo se o terra @page declaração contém uma largura. O que eu precisava era para definir a largura directamente na div que tem a classe relevante aplicada, de modo a declaração é algo mais parecido

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

Tenha cuidado, porém, que a largura deve ter em conta quaisquer margens ou preenchimento aplicadas através do bloco de declaração @page.

Você pode lidar com o tamanho da página dinamicamente em tempo de execução. Por favor, siga o passo seguinte

  1. Adicionar parâmetro extra para a página tipo por exemplo paisagem ou retrato em pageType param
  2. Adicionar seguinte código em seu tag estilo quando você está gerando o seu html no lado do servidor para por exemplo
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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top