2

私のアプリでは、ByteArrayResource を使用して pdf を表示します。より大きなファイルで作業を開始するまで、これは正常に機能していました。ByteArray への変換でメモリ不足エラーが発生し続けます。

これは私が現時点で行う方法です:

        File myPdf=new File(thePath);
        FileInputStream fin = new FileInputStream(myPdf);
        final byte fileContent[] = new byte[(int)myPdf.length()];
        fin.read(fileContent);
        fin.close();
        ResourceReference rr = new ResourceReference(dePdf.getName()) {

        @Override
        public IResource getResource() {
            return new ByteArrayResource("Application/pdf", fileContent);

        }
        };
        if (rr.canBeRegistered()) {
            getApplication().getResourceReferenceRegistry().registerResourceReference(rr);
        }        

        return wmc;

大きなファイルを表示するためのより良い方法はありますか?

4

2 に答える 2

4

ResourceStreamResource と FileResourceStream を使用してみてください。

File myPdf=new File(thePath);
FileResourceStream frs = new FileResourceStream(myPdf);

ResourceStreamResource rsr = new ResourceStreamResource(frs);
rsr.setContentDisposition(ContentDisposition.ATTACHMENT);
rsr.setFileName(fileName);

//the same code for resource reference creation and registration
//...
于 2012-09-12T10:14:03.917 に答える
1

完全にはわかりませんが(自分で実際に使用したことはありません)、ContextRelativeResourceがオプションになる場合があります。おそらく次のようなものです:

final File myPdf=new File(thePath);
        ResourceReference rr = new ResourceReference(dePdf.getName()) {

        @Override
        public IResource getResource() {
            // You'll need to adjust the path here to be relative to your context
            return new ContextRelativeResource(myPdf.getAbsolutePath());

        }
        };
        if (rr.canBeRegistered()) {
            getApplication().getResourceReferenceRegistry().registerResourceReference(rr);
        }        
于 2012-09-12T10:13:53.123 に答える