2013-07-17 77 views
2

我有一個函數返回一個PDF數據的字節數組,我想在Java SWT應用程序中查看它。我不想使用Icepdf,jpedal等任何jar。只是SWT和Java。如何使用SWT瀏覽器查看PDF數據字節

一個明顯的解決方案是將所有字節寫入文件「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(); 
      } 
     } 
    } 

} 
+0

所以你甚至不想使用操作系統的臨時文件夾,這是專爲這樣的情況? – Baz

+0

寫一個新的SWT組件? – parsifal

+0

@Baz - 是的,我應該可以攜帶一些東西,比如File.createTempFile。但我寧願不使用任何文件。 –

回答

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. 

我必須記住要刪除臨時文件。