我正在使用iText PDF库生成包含PdfPTable
的动态PDF文档。我使用servlet将PDF流式传输到浏览器。它有效,但不一致。有时看起来好像浏览器加载了Acrobat reader的插件,但报告没有显示。这是iText还是Adobe Reader问题?
以下是我用来生成PDF并将其流式传输到浏览器的代码。
public void generatePdfReport() {
ByteArrayOutputStream baos;
baos = new ByteArrayOutputStream();
OutputStream out;
buildPdfReport(agentPayroll, salesSummaryData, baos);
res.setContentType("application/pdf");
res.setContentLength(baos.size());
out = res.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
}
private void buildPdfReport(ByteArrayOutputStream baos) {
float cellBorderWidth;
cellBorderWidth = 1F;
document= new Document(PageSize.LETTER.rotate(), 2, 2, 2, 2);
pdfWriter = PdfWriter.getInstance(document, baos);
document.open();
PdfPCell cell;
PdfPTable table = new PdfPTable(columnWidths);
table.setSpacingBefore(5.0F);
table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
table.setTotalWidth(780F);
table.setLockedWidth(true);
while(someCondition == true) {
// Generate some cells and add to table
cell = new PdfPCell(new Phrase("SomeText", timesRomanFont6Pt));
cell.setBorderWidth(cellBorderWidth);
cell.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
cell.setVerticalAlignment(PdfPTable.ALIGN_BOTTOM);
table.addCell(cell);
}
}
列宽度加起来为pdf为780设置的总宽度:
private static final float[] columnWidths = {188,
37,
88,
50,
37,
25,
35,
35,
35,
30,
32,
26,
35,
60,
46,
26
};
我似乎无法找出问题所在。
非常感谢任何帮助。
全部谢谢,
格雷格