【发布时间】:2018-06-19 20:34:31
【问题描述】:
这是我使用 OpenPDF(旧版 iText 4)的代码。我在网上搜索了可能的解决方案,但 ColumnText 的所有实现都令人困惑。我也尝试实现它,但没有得到预期的结果。
MultiColumnText mct = new MultiColumnText();
mct.addReguarColumns(document.left(), document.right(), column.gutter, column.colNum);
Paragraph p = new Paragraph("Testing");
mct.addElement(p);
document.add(mct);
这是使用 MultiColumnText。现在,我正在测试 iText 5,发现 MultiColumnText 已被删除。我在这里看到一个针对 C# 的问题,我将代码更改为以下以支持 ColumnText:
ColumnText mct = new ColumnText(writer.getDirectContent());
float middle = (document.left() + document.right()) / 2;
float[][] COLUMNS = {
{ document.left(), document.bottom(), middle - 15, document.top() } ,
{ middle + 15, document.bottom(), document.right(), document.top() }
};
Paragraph p = new Paragraph("Testing");
mct.addElement(p);
int col = 0;
int count = 0;
int status = ColumnText.START_COLUMN;
while (ColumnText.hasMoreText(status)) {
mct.setSimpleColumn(
COLUMNS[col][0], COLUMNS[col][1],
COLUMNS[col][2], COLUMNS[col][3]);
status = mct.go();
if (++count > 1) {
count = 0;
document.newPage();
}
}
但是输出是一团糟。我在这里遗漏了什么吗?
【问题讨论】:
-
请注意,iText 4 从未存在过。它是(错误地)由与 iText 无关的第三方(错误地)发布的,他们(错误地)使用了属于 iText 的项目 ID。如果可以选择升级到 iText 7:升级到 iText 7,并使用
ColumnDocumentRenderer,如tutorial 中所述。如果你想在商业环境中使用 iText,无论如何你都必须升级,因为versions older than iText 5 have legal issues. -
除了 iText 4 的法律问题外,您显然还遇到了技术问题。发布 iText 4 的人是基于 2009 年 7 月发布的 iText 版本发布的。我希望您了解,在过去 9 年发布的后续版本中解决了许多技术问题。我投票结束了这个问题,因为当你可以通过升级到 2018 年的版本来解决你的问题时,你不能期望从 2009 年开始的非官方版本得到支持。
-
iText 5 怎么样?如果我必须切换到 iText 7,那么我将不得不进行很多更改。另外,上面的 iText 4 是指 OpenPDF(它说是 iText 4 的一个分支)。我们可以使用 iText 5 修复上述代码吗?另外,我现在处于测试阶段,所以如果我喜欢这个图书馆,我会买它。我知道你是作者,但我需要看看我在做什么。
-
哈哈哈,OpenPDF就是个笑话。这是一个开发人员发布的版本,他对 PDF 和 iText 了解不足,无法解决您遇到的问题。不再免费支持 iText 5(只有付费客户才能获得支持),但
setSimpleColumn()方法接受Rectangle对象作为参数这一事实使事情变得更容易。您的段落太小,无法测试您的代码。我将根据官方文档提供答案(奇怪的是您参考 C# 示例而不是参考官方常见问题解答)。