2

我有一个返回 PDF 数据字节数组的函数,我想在 Java SWT 应用程序中查看它。我不想使用任何 jar,例如 Icepdf、jpedal 等。只是 SWT 和 Java。

一种明显的解决方案是将所有字节写入文件“C:/TEMP/file.pdf”,然后调用 browser.setURL(“file://c:/TEMP/file.pdf”)。但是,如果可能,我想避免使用临时文件。

我尝试了以下方法,但它不起作用,因为“setText”假定 MIME 类型为 text/html。要是 SWT 提供了一个 setText(bytes,headers) 方法就好了!

任何建议如何做到这一点?

public class MyBrowser
{
    static byte[] GetPDFData()
    {
        // details omitted
    }

    public static void main(String[] args)
    {

        Shell shell = new Shell();
        shell.setLayout(new RowLayout(SWT.VERTICAL));

        Browser browser = new Browser(shell, SWT.BORDER);
        browser.setLayoutData(new RowData(600, 300));

        byte[] pdfdata = GetPDFData();

        StringBuffer buffer = new StringBuffer();
        buffer.append("Content-Type: application/pdf\n\n");
        for (int i = 0; i < pdfdata.length; ++i)
            buffer.append((char) pdfdata[i]);
        browser.setText(new String(buffer));
        shell.pack();
        shell.open();

        while (shell != null && !shell.isDisposed())
        {
            if (!shell.getDisplay().readAndDispatch())
            {
                shell.getDisplay().sleep();
            }
        }
    }

}
4

1 回答 1

2

那好吧。我放弃。这并不理想,但我想我必须使用临时文件。以下作品,

        byte[] pdfdata = GetPDFData();

        File tempFile = File.createTempFile("twiqd", ".pdf");
        FileOutputStream tempOut = new FileOutputStream(tempFile);
        tempOut.write(pdfdata);
        tempOut.close();

        browser.setUrl(tempFile.toURI().toURL().toExternalForm());
        shell.pack();
        etc.

我必须记住删除临时文件。

于 2013-07-25T16:24:20.163 回答