我是一名iText java开发人员。我一直在处理大型表,现在我陷入了垂直拆分表的困境。
在iText In Action的第119页,尊敬的布鲁诺·洛瓦吉(我非常尊重这个家伙)解释了如何拆分一个大表,使列出现在两个不同的页面中。
我遵循了他的示例,当文档只有几行时,它工作得很好。
在我的例子中,我有100行,要求文档需要在几页中拆分100行,同时垂直拆分列。我按如下方式运行我的代码,但只显示前34行。
有人能解释一下这个代码有什么问题吗:
//create a PDFPTable with 24 columns
PdfPTable tbl = new PdfPTable(new float{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1});
//loop through 100 rows
for (int i = 0; i < 100; i++) {
//insert 24 table cells
}
tbl.setTotalWidth(1500);//set table width
float top = document.top() - document.topMargin() - 30;
PdfContentByte canvas = writer.getDirectContent();
tbl.writeSelectedRows(0, 12, 0, -1, document.leftMargin(), top, canvas);
document.newPage();
// draw the remaining two columns on the next page
tbl.writeSelectedRows(12, -1, 0, -1, 5, top, canvas);
您看不到100行,因为100行不适合单个页面。当您使用WriteSelectedRow()
时,您需要计算页面上适合的行数,并且只添加适合的行的选择。
我现在正在柏林参加一个会议,但我写了一个简单的例子,或多或少地展示了你需要做什么:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document(PageSize.A4.rotate());
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable tbl = new PdfPTable(new float[]{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1});
//loop through 100 rows
for (int r = 1; r <= 100; r++) {
for (int c = 1; c <= 24; c++) {
tbl.addCell(String.format("r%sc%s", r, c));
}
}
PdfContentByte canvas = writer.getDirectContent();
tbl.setTotalWidth(1500);//set table width
float top = document.top() - document.topMargin() - 30;
float yPos = top;
int start = 0;
int stop = 0;
for (int i = 0; i < 100; i++) {
yPos -= tbl.getRowHeight(i);
if (yPos < 0) {
stop = --i;
tbl.writeSelectedRows(0, 12, start, stop, document.leftMargin(), top, canvas);
document.newPage();
tbl.writeSelectedRows(12, -1, start, stop, 5, top, canvas);
start = stop;
document.newPage();
yPos = top;
}
}
tbl.writeSelectedRows(0, 12, stop, -1, document.leftMargin(), top, canvas);
document.newPage();
tbl.writeSelectedRows(12, -1, stop, -1, 5, top, canvas);
document.close();
}
正如您所看到的,我跟踪表的高度,一旦有“从页面上掉下来”的风险,我会呈现合适的行,然后转到下一页。
问题内容: 如何使用flexbox在容器内水平和垂直居中div。在下面的示例中,我希望每个数字都彼此相邻(按行),并水平居中。 问题答案: 我认为您想要以下内容。 你的元素应该是块级(而非)如果你想要的高度和顶部/底部填充,以正常工作。 另外,在上,将宽度设置为而不是。 您的属性很好。 如果您希望垂直居中于视口中,请为和分配100%的高度,然后将页边距清零。 请注意,需要一个高度才能看到垂直对齐效
如何使用FlexBox在容器内水平和垂直地居中div。在下面的例子中,我希望每一个数字在彼此下面(在行中),水平居中。 null null http://codepen.io/anon/pen/zlxbo
问题内容: 我弹出一个包含ASP.NET表单的弹出窗口,单击链接“请求信息”,然后出现该表单。 但是,具有链接“请求信息”以触发弹出窗口的页面包含很多内容,因此需要滚动才能看到该链接。 如果用户滚动阅读内容,则需要始终居中,否则,如果他们不滚动,弹出窗口仍将居中显示在屏幕上。 在绝对定位,整个页面宽度与边距设置为。 问题答案: 如果div具有固定的宽度和高度,请使用:(如果width = 120p
问题内容: 有没有办法在 垂直和水平方向上输入一个DIV, 但这很重要, 当窗口小于内容时,内容将不会被剪切 。div必须具有背景色,宽度和高度。 我总是将div的中心定位为绝对位置和负边距,如提供的示例所示。但是它有一个问题,那就是削减内容的顶部。有没有一种方法可以将div.content居中而不会出现此问题? CSS: HTML: 我的问题不是重复的“如何在水平和垂直方向上居中放置元素?”1-
我正在使用GridView创建一个组件来创建像Excel这样的表。在这里,我最初创建了一个2x2网格,稍后当用户单击按钮时,会添加额外的行和列。 这是我添加新专栏的做法:- 这可以正常工作并添加额外的列。问题是当添加列时,以前的列会收缩以适应新列,从而使每次添加新列时列看起来更小。我想一次只在屏幕上显示2列,然后让用户水平向前滚动以查看更多列。现在网格只能垂直滚动。同样,我希望在添加新行时发生这种
我正在使用MPAndroidChart库。在条形图中,默认情况下,所有条形图都是垂直的(自下而上),如何水平显示?