我试图建立一个PDF生成器,我必须添加2个不同的页脚的基础上,即时通讯生成的文件类型。其中一个只有一个文本,上面写着“This PDF is a sample”。另一个基本上是一个3列的表,有一个简短的描述和2个标志。
问题是,一旦我调用事件处理程序,表格和文本的样式都会被覆盖,而且我不能将两个页脚都置于表格的中心。
表格的问题比文本更多,因为它的宽度变小了,所以徽标和文本之间没有间距
我还注意到页脚的位置取决于我有多少页
例如,这是页脚在大多数情况下的样子(位置并不总是相同的,而且永远不会正确):
我试着给所有的物体设置水平方向
这是我的一个牢房,其他的都一样,除了内容不同
Image trustedImage = new Image(ImageDataFactory.create(pathLogo3));
trustedImage.scaleToFit(100, 100);
Cell trustedIdentity = new Cell().setBorder(new SolidBorder(whiteColor, 1f));
trustedIdentity.add(trustedImage.setHorizontalAlignment(HorizontalAlignment.CENTER));
table.addCell(trustedIdentity.setVerticalAlignment(VerticalAlignment.MIDDLE));
正如你所看到的,我设置了图像和单元格的水平对齐
这就是我调用事件pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new TableFooterEventHandler(creaTabellaFineDocumentoPlaceholder()));
的方式
这是实际的TableFooterEventList类
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.HorizontalAlignment;
public class TableFooterEventHandler implements IEventHandler {
private Table table;
public TableFooterEventHandler(Table table) {
this.table=table;
}
@Override
public void handleEvent(Event event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdfDoc = docEvent.getDocument();
PdfPage page = docEvent.getPage();
PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);
float tableHeight = table.getHeight() == null ? 30 : table.getHeight().getValue();
float tableWidth = table.getWidth() == null ? 30 : table.getWidth().getValue();
float x = (page.getPageSize().getWidth() - table.getWidth().getValue()) /2;
new Canvas(canvas, new Rectangle(x, 20, table.getWidth().getValue(), 30))
.add(table.setHorizontalAlignment(HorizontalAlignment.CENTER)).setHorizontalAlignment(HorizontalAlignment.CENTER)
.close();
}
}```
As you can see here I'm creating a `Canvas` containing a `Rectangle` containing the `Table`
I followed and example from ITEXT itself on this page (the first example) : [text](https://kb.itextpdf.com/home/it7kb/examples/page-events-for-headers-and-footers)
And except for the "style" of the footer it kinda works
somebody know why it does't center the footer and it also overwrites the table settings, and how should I fix it?
1条答案
按热度按时间kxeu7u2r1#
解决方案
我创建的矩形是错误的。它和table一样大,所以所有的东西都在缩小。我把他的尺寸设置为文件的宽度和table的高度
就像这样:
现在它居中而不是扭曲