使用CSS和JAVA生成PDF
我正在生成一个由多个表组成的PDF,我想知道是否有某种方法可以让我知道表大小是否会超过PDF页面大小。我正在使用这些信息来决定是以纵向模式还是横向模式生成PDF。有可能买到这个尺寸的吗 知道表格大小是否会超过PDF页面大小使用CSS和JAVA生成PDF,java,css,pdf,itext,Java,Css,Pdf,Itext,我正在生成一个由多个表组成的PDF,我想知道是否有某种方法可以让我知道表大小是否会超过PDF页面大小。我正在使用这些信息来决定是以纵向模式还是横向模式生成PDF。有可能买到这个尺寸的吗 知道表格大小是否会超过PDF页面大小 表格大小由XHTML表格内容(行、列、页眉、页脚等)加上CSS文档(宽度、高度和边框属性)决定 作为将XHTML转换为渲染输出过程的一部分,渲染引擎(ITextRenderer)只知道您的表大小,以及它在应用CSS后是否适合页面 因此,如果要查询ITextRenderer,
- 表格大小由XHTML表格内容(行、列、页眉、页脚等)加上CSS文档(宽度、高度和边框属性)决定李>
- 作为将XHTML转换为渲染输出过程的一部分,渲染引擎(ITextRenderer)只知道您的表大小,以及它在应用CSS后是否适合页面
- 因此,如果要查询
,您需要:ITextRenderer
- 创建一个
实例,通过ITextRenderer
传入renderer.setDocument()
,然后通过文档
应用CSS,根据原始页面方向进行所有布局计算renderer.layout()
- 以某种方式查询以确定表是否适合页面
- 如果没有,则在纵向/横向之间切换。但这意味着要更改为新的CSS,设置不同的页面形状:
- 选择适合新页面方向的新CSS,并在文档中进行设置
- 创建一个新的
实例,通过ITextRenderer
传入renderer.setDocument()
文档,然后通过
应用CSS,使所有布局计算基于新页面方向进行renderer.layout()
- 通过
创建PDF输出renderer.createPDF()
- 这是低效和不雅观的处理
- 这是错误的做法。控制页面布局应该是设计过程的一部分,并且应该反映在(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
- 使用两种场景进行线框/草图设计-一种用于纵向,另一种用于横向
- 确定两种场景下元素/行/列的大小
- 确定使用每个场景的条件逻辑,纵向和横向。例如,如果I的行数为X,列数为Y,则使用横向
- 现在创建两个CSS文件
- 现在,在生成XHTML时,使用条件逻辑链接到正确的CSS