使用itext和ACJRuntime.jar下载空白pdf页面

时间:2018-02-28 19:43:35

标签: java pdf itext birt actuate

我有一个xml文件和.doj模板文件。尝试使用itext.jar和ACTRuntime.jar下载PDF。它在java 1.6和Websphere 7中工作,但在迁移到java 8和websphere 8后,它只是下载PDF格式的空白页面。 以下是我用来制作PDF的代码。

public ByteArrayOutputStream generatePdf(){
    ArrayList<Object> bean = new ArrayList<Object>();

    BeanOne beanOne = new BeanOne();
    beanOne.setId(1);
    beanOne.setName("Sai");
    beanOne.setPhone("1234567890");

    BeanOne beanOne1 = new BeanOne();
    beanOne1.setId(2);
    beanOne1.setName("Ram");
    beanOne1.setPhone("9876543210");

    bean.add(beanOne);
    bean.add(beanOne1);

    AppDataHandler ds = new AppDataHandler();

    String tableName = "First Talbe";

    Object obj= bean.get(0);

    Vector fields = new Vector();
    fields.addElement("id = getId");
    fields.addElement("name = getName");
    fields.addElement("phone = getPhone");

    ds.registerObjectAsTable(obj, tableName, fields);
    ds.registerDataSet(tableName, bean);

    FileInputStream reportTemplateInputStream = new FileInputStream(new File("/template.jod"));

    ACJEngine acjEngine = new ACJEngine();
    acjEngine.readTemplate(reportTemplateInputStream);

    TemplateManager templateManager = acjEngine.getTemplateManager();
    templateManager.setLabel("ID", "ID");
    templateManager.setLabel("NAME", "NAME");
    templateManager.setLabel("PHONE", "PHONE");

    acjEngine.setX11GfxAvailibility(false);
    acjEngine.setDataSource(ds);
    ACJOutputProcessor ec = new ACJOutputProcessor();
    IViewerInterface ivi = acjEngine.generateReport();
    ByteArrayOutputStream generatedPDFStream = new ByteArrayOutputStream();
    ec.setPDFProperty("OutputStream", generatedPDFStream);
    ec.generatePDF();
    reportTemplateInputStream.close();
    Object[] pdfFromActuateArray = new Object[1];
    pdfFromActuateArray[0] = generatedPDFStream.toByteArray();
    return mergePdfsUsingItext(pdfFromActuateArray);
}

private ByteArrayOutputStream mergePdfsUsingItext(Object[] documents) throws com.itextpdf.text.DocumentException {
    ByteArrayOutputStream content = new ByteArrayOutputStream();
    int f;
    byte[] byteDoc = null;
    for (f = 0; f < documents.length; ++f) {
        byteDoc = (byte[]) documents[f];
        if (byteDoc != null)
            break;
    }
    PdfReader reader = new PdfReader(byteDoc);
    int n = reader.getNumberOfPages();
    Document document = new Document(reader.getPageSizeWithRotation(1));
    PdfWriter writer = PdfWriter.getInstance(document, content);
    document.open();
    PdfContentByte cb = writer.getDirectContent();
    PdfImportedPage page;
    int rotation;
    while (f < documents.length) {
        int i = 0;
        while (i < n) {
            i++;
            document.setPageSize(reader.getPageSizeWithRotation(i));
            document.newPage();
            page = writer.getImportedPage(reader, i);
            cb.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
        }
        f++;
        if (f < documents.length) {
            reader = new PdfReader((byte[]) documents[f]);
            n = reader.getNumberOfPages();
        }
    }
    document.close();
    return content;
}

使用上面的代码,我得到了我在jsp页面上打印的ByteArrayOutputStream,内容类型为application / pdf。

结果pdf完全空白。希望有人可以解释这个问题。另外,请建议任何替代此代码的好方法。

先谢谢。

0 个答案:

没有答案