我不知道如何在ZUML(ZK用户界面标记语言)中禁用PDF下载和打印。我是否需要嵌入自定义PDF查看器,因为我只能在ZK中使用Iframe标签打开PDF文件,并且它使用浏览器pdf查看器。因此,它使禁用打印和下载pdf的任务更加困难。
答案 0 :(得分:0)
还有另外两种解决方案:
将文件转换为HTML,图像或可在浏览器中直接查看的任何其他格式。这种转换可以使用服务器端(在本例中用Java编写)即时转换,或者您可以将所有文件预转换为可读文件。
另一种最佳方法是使用基于Flash的PDF查看器(例如http://flexpaper.devaldi.com/)。这很简单,灵活,不需要编写服务器端代码。许多文档共享网站都使用此方法(例如http://www.scribd.com/,http://www.slideshare.net/,http://www.docstoc.com/)
(仅供参考,如果您不想禁用下载pdf文件,则解决方案很少:
http://zkfiddle.org/sample/1dnhepc/11-PDF-viewer
http://zkfiddle.org/sample/3ojd4og/1-PDF-Viewer-in-ZK-using-Iframe#source-2)
答案 1 :(得分:0)
在this问题之后,我发现了PDFObject的存在,这是一个简单的javascript插件,用于在页面中嵌入PDF文档。我做了一个fiddle所以你可以看到它的实际效果。
<强> index.zul 强>
<?script type="text/javascript" src="http://pdfobject.com/scripts/pdfobject.js"?>
<zk>
<script type='text/javascript'>
function embedPDF(_url){
var myPDF = new PDFObject({
url: _url
}).embed('pdfContainer');
}
</script>
<vlayout apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('pkg$.TestVM')" xmlns:w="http://www.zkoss.org/2005/zk/client">
<listbox model="@load(vm.pdfUrls)">
<template name="model" var="url">
<listitem>
<listcell label="@load(url)" />
<listcell>
<button label="load" onClick="@command('loadPdf', url=url)" />
</listcell>
</listitem>
</template>
</listbox>
<vlayout xmlns:n="native">
<n:object id="pdfContainer"></n:object>
</vlayout>
</vlayout>
</zk>
<强> TestVM.java 强>
import org.zkoss.bind.annotation.AfterCompose;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.BindingParam;
import java.util.List;
import java.util.ArrayList;
import org.zkoss.zk.ui.util.Clients;
public class TestVM {
List<String> pdfUrls;
@AfterCompose
public void afterCompose() {
pdfUrls = new ArrayList<String>();
pdfUrls.add("http://www.pdf995.com/samples/pdf.pdf");
pdfUrls.add("https://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf");
pdfUrls.add("https://www.iscp.ie/sites/default/files/pdf-sample.pdf");
}
@Command
public void loadPdf(@BindingParam("url")String url) {
Clients.evalJavaScript("embedPDF('"+ url +"')");
}
public List<String> getPdfUrls() {
return pdfUrls;
}
}
干杯,亚历克斯