在Java Web应用程序中生成PDF时的行为不一致

时间:2014-04-16 18:01:08

标签: java pdf web-applications pdf-generation itext

我正在使用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  
    };

我似乎无法找出问题所在。

非常感谢任何帮助。

全部谢谢,

格雷格

0 个答案:

没有答案