请参阅下面的更新问题(不是最重要的问题)。
我尝试使用此功能在Liferay上打开任何文档类型(尤其是PDF)。但我总是得到消息Awt Desktop is not supported!
,如函数所述。如何启用Awt桌面?我尝试通过互联网搜索,一无所获。有人帮忙,请?感谢。
public void viewFileByAwt(String file) {
try {
File File = new File(getPath(file));
if (File.exists()) {
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(File);
} else {
System.out.println("Awt Desktop is not supported!");
}
} else {
//File is not exists
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
来源:http://www.mkyong.com/java/how-to-open-a-pdf-file-in-java/
当你看到下面的代码时,两种模式(1
下载和2
预览)都运行良好,但不幸的是第二种模式(预览模式)仅适用于PDF。
现在我想要做的是,当用户点击preview
按钮时,文件不是PDF(仅限于扩展程序: DOC,DOCX,XLS,XLSX,ODT,ODS )必须首先转换为PDF,然后以与下面代码解释相同的方式在浏览器上显示。有可能吗?如果在一个函数上使用所有转换器太难了,那么在一个单独的函数上,每个扩展都可以。
public StreamedContent getFileSelected(final StreamedContent doc, int mode) throws Exception {
//Mode: 1-download, 2-preview
try {
File localfile = new File(getPath(doc.getName()));
FileInputStream fis = new FileInputStream(localfile);
if (mode == 2 && !(doc.getName().substring(doc.getName().lastIndexOf(".") + 1)).matches("pdf")) {
localfile = DocumentConversionUtil.convert(doc.getName(), fis, doc.getName().substring(doc.getName().lastIndexOf(".") + 1), "pdf");
fis = new FileInputStream(localfile.getPath());
}
if (localfile.exists()) {
try {
PortletResponse portletResponse = (PortletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletResponse res = PortalUtil.getHttpServletResponse(portletResponse);
if (mode == 1) res.setHeader("Content-Disposition", "attachment; filename=\"" + doc.getName() + "\"");
else if (mode == 2) res.setHeader("Content-Disposition", "inline; filename=\"" + doc.getName() + "\"");
res.setHeader("Content-Transfer-Encoding", "binary");
res.setContentType(getMimeType(localfile.getName().substring(localfile.getName().lastIndexOf(".") + 1)));
res.flushBuffer();
OutputStream out = res.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
buffer = new byte[4096];
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null)
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
答案 0 :(得分:2)
Liferay是一个门户服务器;其用户界面在浏览器中运行。 AWT是桌面UI的Java 1.0基础。
我不认为AWT是显示它的方式。
为什么不能使用application / pdf MIME类型打开文件并将字节流传输到portlet?
答案 1 :(得分:1)
您必须先在计算机上安装openoffice http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/openoffice
使用liferay配置openoffice后,您可以使用liferay中的DocumentConversionUtil类来转换文档。
DocumentConversionUtil.convert(String id, InputStream is, String sourceExtension,String targetExtension)
上面的代码将返回inputstream。完成此转换后,您可以在浏览器中显示pdf 希望这可以帮助你!!