奇怪的欄柱/頁改變行爲我很新的iText的,並試圖完成以下任務:iText的 - 與ColumnText
- 讀取本地高清
- 的文本文件列表安排的文本在2列布局的PDF文件
- 文件中的每個文本
我開始與MovieColumns1例子(http://itextpdf.com/examples/iia.php?id=64)前加連續編號的指數,結束了與後續荷蘭國際集團代碼:
final float[][] COLUMNS_COORDS = { { 36, 36, 296, 806 }, { 299, 36, 559, 806 } };
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, resultFile);
document.open();
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(COLUMNS_COORDS[0][0], COLUMNS_COORDS[0][1],
COLUMNS_COORDS[0][2], COLUMNS_COORDS[0][3]);
File textDir = new File("c:/Users/raddatz/Desktop/123/texts/");
File[] files = textDir.listFiles();
int i = 1;
int column = 0;
for (File file : files) {
String text = FileUtils.readFileToString(file, "UTF-8");
float yLine = ct.getYLine();
System.out.println("adding '" + file.getName() + "'");
PdfPCell theText = new PdfPCell(new Phrase(text, new Font(Font.HELVETICA, 10)));
theText.setBorder(Rectangle.NO_BORDER);
theText.setPaddingBottom(10);
PdfPCell runningNumber = new PdfPCell(new Phrase(new DecimalFormat("00").format(i++), new Font(
Font.HELVETICA, 14, Font.BOLDITALIC,
new Color(0.7f, 0.7f, 0.7f))));
runningNumber.setBorder(Rectangle.NO_BORDER);
runningNumber.setPaddingBottom(10);
PdfPTable table = new PdfPTable(2);
table.setWidths(new int[] { 12, 100 });
table.addCell(runningNumber);
table.addCell(theText);
ct.addElement(table);
int status = ct.go(true);
if (ColumnText.hasMoreText(status)) {
column = Math.abs(column - 1);
if (column == 0) {
document.newPage();
System.out.println("inserting new page with size :" + document.getPageSize());
}
ct.setSimpleColumn(
COLUMNS_COORDS[column][0], COLUMNS_COORDS[column][1],
COLUMNS_COORDS[column][2], COLUMNS_COORDS[column][3]);
yLine = COLUMNS_COORDS[column][3];
System.out.println("correcting yLine to: " + yLine);
} else {
ct.addElement(table);
}
ct.setYLine(yLine);
System.out.println("before adding: " + ct.getYLine());
status = ct.go(false);
System.out.println("after adding: " + ct.getYLine());
System.out.println("--------------------------------");
}
document.close();
在這裏你可以看到的結果是: http://d.pr/f/NEmx
望着生成的PDF我以爲一切工作了罰款的第一頁。
但在第二頁上,你可以看到這個問題(S):
- 文本#31沒有完全顯示(第一行+指數被切斷/不可視區域)
- 文本#46沒有完全顯示(前三行+索引被剪切/不在可見區域)
在第3頁上,一切似乎都恢復正常。我真的迷失在這裏。
- 更新(2013年3月14日) -
我現在已經分析了PDF的內容。問題不在於內容在非可見區域顯示,而是內容完全不在PDF中。內容的缺失部分正好適合上一列/頁面。所以看起來像ColumnText.go(真)是操縱之前通過addElement()傳遞的對象。有人能證實這一點嗎?如果是這樣的話:我能做些什麼呢?
- 結束時更新(2013年3月14日) -
期待您的回覆
問候, 斯文
在這裏,你可以找到我的測試文本文件: http://d.pr/f/Lzk0 – tangomann 2013-03-13 14:10:37