25

PDFを取得して最初のページからサムネイル画像(PNG)を作成できるJavaライブラリを探しています。

私はすでにJPedalを見てきましたが、その非常識なライセンス料は完全に法外です。現在、iTextを使用してPDFファイルを操作していますが、サムネイルの生成は行わないと思います。コマンドラインでGhostscriptのようなものを使用できますが、可能であればプロジェクトをすべてJavaのままにしておくことを望んでいます。

4

5 に答える 5

23

PDF Rendererは、LGPLライセンスのpure-javaライブラリであり、これを次のように単純にします(サンプルページから取得)。

File file = new File("test.pdf");
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
PDFFile pdffile = new PDFFile(buf);

// draw the first page to an image
PDFPage page = pdffile.getPage(0);

//get the width and height for the doc at the default zoom 
Rectangle rect = new Rectangle(0,0,
                (int)page.getBBox().getWidth(),
                (int)page.getBBox().getHeight());

//generate the image
Image img = page.getImage(
                rect.width, rect.height, //width & height
                rect, // clip rect
                null, // null for the ImageObserver
                true, // fill background with white
                true  // block until drawing is done
                );
于 2010-05-16T18:43:12.727 に答える
5

PDFレンダラーは、使用するPDFファイルのサブセットのみを使用する限り問題ありません。JPodとJPedalを使用すると、デッドプロジェクトではなく、アクティブで開発されたライブラリにお金を払うことになります。

于 2010-05-17T07:10:10.540 に答える
0

PicassoまたはGlideを使用して画像をロードするように、アダプタで複数のPDFファイルのサムネイルを作成するpicassoライブラリを統合する必要があります

その後

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);
于 2019-10-16T18:36:54.943 に答える
0

Qoppa Softwareには、PDFを画像に変換できるJavaSDKがあります。 https://www.qoppa.com/pdfimages/

//Export the first page in all three formats
pdfDoc.savePagesAsJPEG(0, "c:\\somefile.jpg",150,0.80f);
pdfDoc.savePagesAsTIFF(0, "c:\\somefile.jpg",150,TIFFCompression.TIFF_FAX_GROUP4));
pdfDoc.savePagesAsPNG(0, "c:\\somefile.jpg",150f);
于 2021-09-29T15:26:28.450 に答える
0

Thumbnails4j(私はメンテナーですが、Elasticが所有しています)は、サムネイルを作成するためのApache 2ライセンスライブラリであり、PDF入力をサポートしています。

File input = new File("/path/to/my_file.pdf");
Thumbnailer thumbnailer = new PDFThumbnailer();
List<Dimensions> outputDimensions = Collections.singletonList(new Dimensions(100, 100));
BufferedImage output = thumbnailer.getThumbnails(input, outputDimensions).get(0);
于 2022-01-05T20:38:33.783 に答える