使用Primefaces dataExporter更改生成pdf的样式

时间:2011-07-01 14:52:45

标签: primefaces

我正在使用Primefaces dataExporter从dataTable生成pdf。生成的pdf具有相同宽度的所有列。我正在寻找一种方法来改变postProcessor / preProcessor函数上表的样式。在生成pdf之前,我可以使用setHtmlStyleClass方法更改内容吗?我试图使用它,但没有成功。我想我没有理解它。

public void preProcessPDF(Object document) throws IOException, BadElementException, DocumentException {

    Document pdf = (Document) document;
    pdf.setHtmlStyleClass("reportClass");
    ...
}

如果我可以使用该方法,我可以在哪里定义reportClass?它是浏览器页面的css类吗?

1 个答案:

答案 0 :(得分:5)

如果您查看PDFExporter.java导出方法中的最新情况,则无法操作PDF中的数据表。

首先创建一个com.itextpdf.text.Document对象。

Document document = new Document(PageSize.A4.rotate());

然后调用preProcessor方法传递Document,这是在将表添加到PDF文档之前。

if(preProcessor != null) {
    preProcessor.invoke(facesContext.getELContext(), new Object[]{document});
}

然后创建com.itextpdf.text.pdf.PdfPTable。 exportPDFTable方法不执行任何特殊格式设置。

PdfPTable pdfTable = exportPDFTable(table, excludeColumns);
document.add(pdfTable);

现在调用postProcess方法并再次传递Document。在这里,我认为你可以从Document对象访问和更改PdfPTable,但是看看iText api它看起来不像你。

if(postProcessor != null) {
    postProcessor.invoke(facesContext.getELContext(), new Object[]{document});
}

因此,如果您想要一个样式化的PDF表,那么您必须实现自己的PDF导出。希望看看PrimeFaces PDFExporter如何完成将帮助您。