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

标签 primefaces primefaces-dataexporter

我正在使用 Primefaces dataExporter 从数据表生成 pdf。生成的 pdf 所有列的宽度都相同。我正在寻找一种方法来更改后处理器/预处理器函数上的表格样式。我可以在生成 pdf 之前使用 setHtmlStyleClass 方法更改某些内容吗?我尝试使用它,但没有成功。我想我没有理解正确。

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

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

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

最佳答案

如果你看看 PDFExporter.java 中发生了什么导出方法,PDF中的数据表无法操作。

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

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

然后调用 preProcessor 方法来传递文档,这是在将表格添加到 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 的工作原理会对您有所帮助。

关于primefaces - 使用 Primefaces dataExporter 更改生成 pdf 的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549582/

相关文章:

PrimeFaces 12 DataExporter 十进制数字 xls

excel - Primefaces DataExporter - XLSX 和 XLSXSTREAM

java - 为什么第一次启动对话框时辅助 bean 会被创建两次?

jsf - Richfaces 和 Primefaces 彼此兼容吗?

jsf - NLS 缺少消息 : CANNOT_FIND_FACELET_TAGLIB in: org. eclipse.jst.jsf.core.validation.internal.facelet.messages

javascript - 如何学习 primefaces javascript API?

jsf - 是否可以使用 p :cellEditor inside a p:columns tag?

excel - 用于大数据的 PrimeFaces DataExporter