我有一个返回 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();
}
}
}
}
最佳答案
哦,好吧。我放弃。这并不理想,但我想我必须使用临时文件。以下作品,
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.
我必须记住删除临时文件。
关于java - 如何使用 SWT 浏览器查看 PDF 数据字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705585/