Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中为PDF创建缩略图_Java_Pdf_Thumbnails_Image Generation - Fatal编程技术网

在Java中为PDF创建缩略图

在Java中为PDF创建缩略图,java,pdf,thumbnails,image-generation,Java,Pdf,Thumbnails,Image Generation,我正在寻找一个Java库,它可以从第一页获取PDF并创建缩略图(PNG) 我已经看过JPedal,但它疯狂的许可费是完全禁止的。目前我正在使用iText操作PDF文件,但我相信它不会生成缩略图。我可以在命令行上使用Ghostscript之类的东西,但如果可能的话,我希望我的项目都是Java。是一个LGPL许可的纯Java库,它使这一点非常简单(取自他们的示例页面): 只要只使用PDF文件的子集,PDF渲染器就可以了。使用JPod和JPedal,您将为一个活动的、已开发的库而不是一个死项目付费。在

我正在寻找一个Java库,它可以从第一页获取PDF并创建缩略图(PNG)

我已经看过JPedal,但它疯狂的许可费是完全禁止的。目前我正在使用iText操作PDF文件,但我相信它不会生成缩略图。我可以在命令行上使用Ghostscript之类的东西,但如果可能的话,我希望我的项目都是Java。

是一个LGPL许可的纯Java库,它使这一点非常简单(取自他们的示例页面):


只要只使用PDF文件的子集,PDF渲染器就可以了。使用JPod和JPedal,您将为一个活动的、已开发的库而不是一个死项目付费。

在适配器中创建多个PDF文件的缩略图,就像使用毕加索或Glide加载图像一样 你需要整合

之后

您需要创建PdfRequestHandler类:-

public class PdfRequestHandler extends RequestHandler{
    public static String SCHEME_PDF="pdf";
    @Override
    public boolean canHandleRequest(Request data) 
    {
        String scheme = data.uri.getScheme();
        return (SCHEME_PDF.equals(scheme));
    }

    @Override
    public Result load(Request data, int arg1) throws IOException 
    {
        ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(new File(data.uri.getPath()), MODE_READ_ONLY);
        PdfRenderer renderer = new PdfRenderer(fileDescriptor);
        final int pageCount = renderer.getPageCount();
        if(pageCount > 0){
            PdfRenderer.Page page = renderer.openPage(0);
            Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(),Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            canvas.drawColor(Color.WHITE);
            canvas.drawBitmap(bitmap, 0, 0, null);
            page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
            page.close();
        return new Result(bm,LoadedFrom.DISK);
        }
        return null;     
    }
}
然后在适配器中创建实例

Picasso picassoInstance;
在适配器的构造函数中初始化实例

picassoInstance = new Picasso.Builder(context.getApplicationContext())
        .addRequestHandler(new PdfRequestHandler())
        .build();
然后从适配器的bindViewHolder方法中的路径加载文件

picassoInstance.load(PdfRequestHandler.SCHEME_PDF+":"+filePath)
               .fit()
               .into(holder.pdfThumbnailImageView);

看看能不能做到,我打赌能做到。(不是答案,因为这只是一个建议。)现在看看jPod。我想,如果可能的话,我更喜欢一个免费的开源解决方案。如果我能避免的话,即使99欧元也太多了。也很难找到它的API。嗯,上次我下载jPod时它是免费的。我想我需要看看发生了什么…据我所知,jPod本身是在BSD许可下的(所以是免费的)。你可能会把它和他们的一些产品混为一谈,这些产品可能不是免费的。无论如何,这肯定不是一个现成的解决方案,我看到下面已经提出了一个解决方案,所以请抓起jPod来解决这个问题。如果jPod是在BSD许可下分发的,那么这听起来不错。问题是,jPod做了我需要的吗?哇,这看起来确实是我需要的。我将试一试并报告。如何将此图像对象保存到磁盘?
ImageIO.write(图像,“png”,文件)不幸的是,我认为PDF渲染器无法完成这项工作。我想出了一个在命令行上使用Ghostscript的解决方案,但是+1是一个彻底的答案。太糟糕了。由于没有java.awt.rectangle,可能对android不起作用。我的解决方案需要处理任意PDF文件。您能否通过“仅子集[PDF Render]使用”来解释更多内容?Re:JPedal,由于其荒谬的成本,我已经放弃了它;re:JPod,我仍然不确定它是否能满足我上面的需求。PDF渲染器不支持压缩对象和当前大量PDF中的许多其他功能。“PDFRenderer只处理PDF规范的1.4版本。当前版本为1.6,在1.4和1.6之间有相当多的添加和更改,这似乎破坏了PDFRenderer。”(摘自编辑)(也抄送@ShaggyFrog)
picassoInstance.load(PdfRequestHandler.SCHEME_PDF+":"+filePath)
               .fit()
               .into(holder.pdfThumbnailImageView);