使用CSS和JAVA生成PDF

我正在生成由多个表组成的PDF,我想知道是否有某种方式可以让我知道表大小是否超过PDF页面大小.我正在使用这些信息决定我将以纵向或横向模式生成PDF.有可能达到这个尺寸吗? 最佳答案

know if the table size will exceed the PDF page size

>表大小由您的XHTML表内容(行,列,页眉,页脚等)以及CSS文档(宽度,高度和边框属性)确定.
>渲染引擎(ITextRenderer)只知道您的表大小,以及它在应用CSS后是否适合页面,作为将XHTML转换为渲染输出的过程的一部分.
>因此,如果您要查询ITextRenderer以获取此信息,则需要:

>创建一个ITextRenderer实例,通过renderer.setDocument()传递Document,然后通过renderer.layout()应用CSS,从而根据原始页面方向进行所有布局计算
>以某种方式查询以确定表格是否适合页面
>如果没有,请在纵向/横向之间切换.但这意味着更改为新的CSS,设置不同的页面形状:

>选择适合新页面方向的新CSS并将其设置在文档中
>创建一个新的ITextRenderer实例,通过renderer.setDocument()传递Document,然后通过renderer.layout()应用CSS,从而根据新的页面方向进行所有布局计算.
>通过renderer.createPDF()创建PDF输出.

问题:

>这是低效率和不优雅的处理.
>这是做错事的方式.控制页面布局应该是设计过程的一部分,并应反映在(a)生成的内容(XHTML)和(b)格式(CSS)中.如果这样做是正确的,那么就不需要做渲染时魔术来重新格式化整个页面.
>在步骤(2),没有简单的查询界面可以简单地告诉您表格是否适合页面.相反,您必须查询格式化的输出块,并尝试自己解决您的表所在的位置以及它是否适合页面.例如.:

 BlockBox root = renderer.getRootBox();
 List  pageList = root.getLayer().getPages() 
 PageBox page = (PageBox)pageList.get(2);
 List childBoxList = page.getChildren();
 Box childBox = (Box)childBoxList.get(0);
 // etc... until you locate your table

>在步骤(4),ITextRenderer希望您的CSS在您的XHTML文档中链接.这意味着您首先需要修改XHTML源,然后需要将其重新提交给ITextRenderer.

建议的替代方案:

>做一个线框/草图设计有两个场景 – 一个用于肖像和&一个用于景观
>确定2个方案下的元素/行/列的大小
>确定使用每个场景的条件逻辑,纵向v横向.例如.如果我的行数是X并且列数是Y – 那么使用landscape,…
>现在创建两个CSS文件
>现在,当您生成XHTML时,使用条件逻辑链接到正确的CSS

点赞