2010-03-30 77 views
32

有什么方法可以让代码以独立于平台的方式在Java应用程序中打开PDF文件?我的意思是在Windows中使用批处理文件可以做到这一点。有没有其他方法可以让平台独立代码在运行中打开PDF文件?从Java应用程序中即时打开PDF文件

+0

你是什么意思“开放”吗?你的意思是“启动Adobe Reader来显示特定的PDF文档”吗? – Kris 2010-03-30 16:47:57

+0

对不起,我想我没有具体定义“开放”。是的,就像你想的那样。 ;) – 2010-03-31 12:45:47

回答

72

我想尝试Desktop.open(File),其中:

启动关联应用程序来打开该文件。

所以这段代码应该做的伎俩:

if (Desktop.isDesktopSupported()) { 
    try { 
     File myFile = new File("/path/to/file.pdf"); 
     Desktop.getDesktop().open(myFile); 
    } catch (IOException ex) { 
     // no application registered for PDFs 
    } 
} 
+0

+1如果您希望在您自己的应用程序中打开pdf文件,您可以做什么,以便您可以以自己的方式与它进行交互?谢谢。 – chepukha 2012-02-29 15:46:31

+0

@chepukha:在这种情况下,这段代码应该与您无关,因为您的PDF阅读组件应该有自己的加载文件的方法。 – 2012-02-29 16:05:23

+0

是的,我明白了。我应该提出另一个问题吗? – chepukha 2012-02-29 20:57:35

2

您可以使用运行时执行和脚本,也有几个Java的PDF查看器在那里(即Icepdf,JPedal,PDFRenderer)。

+0

感谢您的建议...;) – 2010-03-31 12:46:09

+0

再次感谢,看起来像ICEpdf适合我需要的许可模式。 – Kingsolmn 2012-08-26 20:51:51

0

使用此用java

File file = new File(filepath); 
    if (file.toString().endsWith(".pdf")) 
     Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file); 
    else { 
     Desktop desktop = Desktop.getDesktop(); 
     desktop.open(file); 
} 

此代码是用来打开PDF等文件来打开PDF文件。

+2

该解决方案在Windows上运行良好,但不是平台独立,这是OP要求的。 – THelper 2012-09-14 13:23:32

-3

使用此代码,打开一个特定的文件:

String cmds[] = new String[] {"cmd", "/c", "C:\\Users\\PC\\Desktop\\EA01.pdf"}; 
try { 
    Runtime.getRuntime().exec(cmds); 
} 
1

梅英东的解决方案也不太为我工作。具体而言,包含空格的路径会失败,并显示IllegalArgumentException而不是IOException。

这里对我来说是什么在起作用:

if (Desktop.isDesktopSupported()) { 
try { 
File theUMFile = new File(usersManualPath); 
Desktop.getDesktop().open(theUMFile); 
} 
catch (FileNotFoundException fnf){ 
okDialog(msg_fnf); 
theConcours.GetLogger().log(Level.SEVERE, null, fnf); 
theConcours.GetLogger().info(msg_fnf); 
} 
catch (IllegalArgumentException fnf) { 
okDialog(msg_fnf); 
      theConcours.GetLogger().log(Level.SEVERE, null, fnf); 
      theConcours.GetLogger().info(msg_fnf); 
     } 
     catch (IOException ex) { 
      okDialog(msg_cno); 
      theConcours.GetLogger().log(Level.SEVERE, null, ex); 
      theConcours.GetLogger().info(msg_cno); 
     } 
    } 
相关问题