Wicket - 在新窗口中显示PDF

时间:2013-11-05 09:49:09

标签: java html pdf wicket wicket-1.5

使用Wicket 1.5,我需要在新窗口中显示PDF文件。为此,我扩展了ByteArrayResource。问题是内容处理只有两个选项:附件和内联。

第一个下载文件,我的用户在他们想要查阅文件时这样做太长了。 第二个在同一个窗口中打开文件,用户想要一个新窗口继续使用打开的文档。

这是我的ByteArrayResource代码:

public class FileArchiveRessource extends ByteArrayResource {

    private final String genericName;
    private final Locale locale;

    public FileArchiveRessource(String genericName, Locale locale) {
        super("application/pdf");
        this.genericName = genericName;
        this.locale = locale;
        this.contentType = "application/pdf";
    }

    @Override
    protected byte[] getData(IResource.Attributes attributes) {
        try {
            String name = genericName.replaceAll("[{][$][}]", locale.getLanguage().toUpperCase());
            return IOUtils.toByteArray(this.getClass().getResourceAsStream(name));
        } catch (IOException ex) {
            return new byte[0];
        }
    }

    @Override
    protected void configureResponse(ResourceResponse response, Attributes attributes) {
        super.configureResponse(response, attributes);
        response.setContentDisposition(ContentDisposition.INLINE);
    }
}

在此实现中,名称中的{$}将替换为用户的语言。

资源如何实现:

final Locale locale = getLocale();
final String name = "document-{$}.pdf".replaceAll("[{][$][}]", locale.getLanguage().toUpperCase());
ResourceLink button = new ResourceLink("list.openbutton", new ResourceReference(name) {
    @Override
    public IResource getResource() {
        return new FileArchiveRessource(name, locale);
    }
});

add(button);

这是我资源的一个打开按钮的示例:

<input wicket:id="list.openbutton"
       type="submit"
       class="button openbutton"
       value="Open" title="Open resource" />

有什么建议吗?

精密: 我真的需要一个新的单独窗口,而不是一个新标签。

4 个答案:

答案 0 :(得分:3)

为什么你不只是在HTML中使用简单的链接而不是按钮?

<a href="#" target="_blank" wicket:id="list.openbutton">Open resource</a>

答案 1 :(得分:2)

感谢Joachim,我找到了一个完全符合我需求的解决方案。我使用javascript打开一个包含文档的新窗口。

这是javascript:

function openPDF(source, name) {
    var screenHeight = screen.height;
    var height = screenHeight - 100;
    var width = height / (1.3);

    var specs = 'directories=0, location=0, toolbar=0, menubar=0, resizable=1, status=0';
    specs += ', height=' + height;
    specs += ', width=' + width;
    specs += ', left=' + (screen.width - width)/2;
    specs += ', top=' + 10;

    window.open(source, name, specs);
    return false;
}

按钮:

<a href="#" target="_blank" wicket:id="list.openbutton"
        class="button openbutton" onClick="return openPDF(this.href, 'PDF file')">Open</a>

答案 2 :(得分:1)

尝试将onclick="target='_blank';return true;"添加到您的输入

答案 3 :(得分:1)

我认为最好的解决方案是使用这个: 这将打开一个带有弹出配置的新窗口。

PopupSettings popupSettings = new PopupSettings(PopupSettings.RESIZABLE | PopupSettings.SCROLLBARS).setHeight(500).setWidth(700);

ResourceLink button = new ResourceLink("list.openbutton", new ResourceReference(name) {
    @Override
    public IResource getResource() {
        return new FileArchiveRessource(name, locale);
    }
});

button.setPopupSettings(popupSettings);