如果 t.setRise(+-) 超出字段紙,我需要?jiǎng)h除 Text (setRise) 中的屬性。 PdfDocument pdfDoc = new PdfDocument(pdfWriter); Document doc = new Document(pdfDoc, PageSize.A5); doc.setMargins(0,0,0,36); for (int i = 0; i <50 ; i++) { Text t = new Text("hello " + i); if(i ==0){ t.setTextRise(7); } if(i==31){ t.setTextRise(-35); } Paragraph p = new Paragraph(t); p.setNextRenderer(new ParagraphRen(p,doc)); p.setFixedLeading(fixedLeading); doc.add(p); } doc.close();}class ParagraphRen extends ParagraphRenderer{private float heightDoc;private float marginTop;private float marginBot;public ParagraphRen(Paragraph modelElement, Document doc) { super(modelElement); this.heightDoc =doc.getPdfDocument().getDefaultPageSize().getHeight(); this.marginTop = doc.getTopMargin(); this.marginBot = doc.getBottomMargin();}@Overridepublic void drawChildren(DrawContext drawContext) { super.drawChildren(drawContext); Rectangle rect = this.getOccupiedAreaBBox(); List<IRenderer> childRenderers = this.getChildRenderers(); //check first line if(rect.getTop()<=heightDoc- marginTop) { for (IRenderer iRenderer : childRenderers) { if (iRenderer.getModelElement().hasProperty(72)) { Object property = iRenderer.getModelElement().getProperty(72); float v = (Float) property + rect.getTop(); //check text more AreaPage if(v >heightDoc){ iRenderer.getModelElement().deleteOwnProperty(72); } } } } 在這里,我檢查是否第一行與 setRise 更多我刪除 setRise 屬性的紙張區(qū)域。如果最后一行 serRise(-35) 多于 margin bottom,我將其刪除。但它不起作用。屬性不會刪除。
1 回答

MYYA
TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的問題如下:drawChildren
渲染完成后調(diào)用方法。在這個(gè)階段,iText 通常不考慮任何元素的屬性:它只是將元素放在它的占用區(qū)域中,這個(gè)區(qū)域已經(jīng)在這個(gè)layout()
階段計(jì)算過了。
您可以通過布局仿真來克服它。
讓我們將所有段落添加到一個(gè) div 而不是直接添加到文檔中。然后模擬將此 div 添加到文檔中:
LayoutResult result = div.createRendererSubTree().setParent(doc.getRenderer()).layout(new LayoutContext(new LayoutArea(0, PageSize.A5)));
在上面的代碼片段中,我嘗試在 A5 大小的文檔上布置我們的 div。
現(xiàn)在您可以考慮布局的結(jié)果并更改一些元素,這些元素將被真正處理Document#add
。例如,要獲得第 30 個(gè)布局段落,可以使用:
((DivRenderer)result.getSplitRenderer()).getChildRenderers().get(30);
更多提示:split renderer 表示 iText 可以放置在區(qū)域上的內(nèi)容部分,overflow - 溢出的內(nèi)容。
添加回答
舉報(bào)
0/150
提交
取消