如何使用wicket和javascript打印pdf文件

如何使用wicket和javascript打印pdf文件,java,printing,wicket,Java,Printing,Wicket,我的wicket应用程序创建了一些pdf文件。现在我想添加一个按钮来打印它,就像这样想:我怎么能做到呢?看起来你把两件事混合在一起了。您的示例是一个javascript。它不是PDF,只是在打印您的文档。它等同于浏览器菜单文件->打印,但该事件是从处理按钮操作的javascript调用的。您可以使用与该示例中相同的按钮,将@print CSS添加到您的网页中,以使您的文档可以很好地打印 还有另外一种方法。如果要从应用程序打印PDF文档,并从Java代码生成PDF,请查看Wicket 1.6的以下

我的wicket应用程序创建了一些pdf文件。现在我想添加一个按钮来打印它,就像这样想:我怎么能做到呢?

看起来你把两件事混合在一起了。您的示例是一个javascript。它不是PDF,只是在打印您的文档。它等同于浏览器菜单文件->打印,但该事件是从处理按钮操作的javascript调用的。您可以使用与该示例中相同的按钮,将@print CSS添加到您的网页中,以使您的文档可以很好地打印

还有另外一种方法。如果要从应用程序打印PDF文档,并从Java代码生成PDF,请查看Wicket 1.6的以下示例:

add(new Link<Void>("myPdfLink") {

    private static final long serialVersionUID = 1L;

    @Override
    public void onClick() {
        byte[] data = ... // TODO your data
        final ByteArrayInputStream stream = new ByteArrayInputStream(data);
        IResourceStream resourceStream = new AbstractResourceStream() {                    
            private static final long serialVersionUID = 1L;

            @Override
            public InputStream getInputStream() throws ResourceStreamNotFoundException {
                return stream;
            }

            @Override
            public void close() throws IOException {
                stream.close();
            }

            @Override
            public String getContentType() {
                return "application/pdf";
            }

        };   

        getRequestCycle().scheduleRequestHandlerAfterCurrent(
            new ResourceStreamRequestHandler(resourceStream)
                .setFileName("my-pdf-to-download.pdf")
                .setContentDisposition(ContentDisposition.ATTACHMENT)
                .setCacheDuration(Duration.ONE_SECOND)
        );  

    }

}); 
add(新链接(“myPdfLink”){
私有静态最终长serialVersionUID=1L;
@凌驾
公共void onClick(){
字节[]数据=…//TODO您的数据
最终ByteArrayInputStream=新的ByteArrayInputStream(数据);
IResourceStream resourceStream=新的AbstractResourceStream(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共InputStream getInputStream()引发ResourceStreamNotFoundException{
回流;
}
@凌驾
public void close()引发IOException{
stream.close();
}
@凌驾
公共字符串getContentType(){
返回“application/pdf”;
}
};   
getRequestCycle().scheduleRequestHandlerAfterCurrent(
新ResourceStreamRequestHandler(resourceStream)
.setFileName(“我的pdf下载.pdf”)
.setContentDisposition(ContentDisposition.ATTACHMENT)
.setCacheDuration(持续时间.1秒)
);  
}
}); 

我认为这更多地与JavaScript有关,而不是与Wicket有关。看看这个:如果您正在为
setCacheDuration()
生成PDF:+1,那么还有一个相关问题。很好的例子,这是我在一个地方见过的最完整的例子谢谢,伙计。要在浏览器中打开新选项卡,只需更改ContentDisposition.INLINE