PDF页面的缩略图(Java)

PDF页面的缩略图(Java),第1张

PDF页面的缩略图(Java)

我认为http://pdfbox.apache.org/可以满足您的需求,因为您可以从页面创建图像,然后缩放图像

从他们的示例代码中-

package org.apache.pdfbox;import java.awt.HeadlessException;import java.awt.Toolkit;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;import java.util.List;import org.apache.pdfbox.exceptions.InvalidPasswordException;import org.apache.pdfbox.pdmodel.PDdocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.common.PDRectangle;import org.apache.pdfbox.util.PDFImageWriter;public class PDFToImage{    private static final String PASSWORD = "-password";    private static final String START_PAGE = "-startPage";    private static final String END_PAGE = "-endPage";    private static final String IMAGE_FORMAT = "-imageType";    private static final String OUTPUT_PREFIX = "-outputPrefix";    private static final String COLOR = "-color";    private static final String RESOLUTION = "-resolution";    private static final String CROPBOX = "-cropbox";        private PDFToImage()    {        //static class    }        public static void main( String[] args ) throws Exception    {        String password = "";        String pdfFile = null;        String outputPrefix = null;        String imageFormat = "jpg";        int startPage = 1;        int endPage = Integer.MAX_VALUE;        String color = "rgb";        int resolution;    float cropBoxLowerLeftX = 0;    float cropBoxLowerLeftY = 0;    float cropBoxUpperRightX = 0;    float cropBoxUpperRightY = 0;        try        { resolution = Toolkit.getDefaultToolkit().getScreenResolution();        }        catch( HeadlessException e )        { resolution = 96;        }        for( int i = 0; i < args.length; i++ )        { if( args[i].equals( PASSWORD ) ) {     i++;     if( i >= args.length )     {         usage();     }     password = args[i]; } else if( args[i].equals( START_PAGE ) ) {     i++;     if( i >= args.length )     {         usage();     }     startPage = Integer.parseInt( args[i] ); } else if( args[i].equals( END_PAGE ) ) {     i++;     if( i >= args.length )     {         usage();     }     endPage = Integer.parseInt( args[i] ); } else if( args[i].equals( IMAGE_FORMAT ) ) {     i++;     imageFormat = args[i]; } else if( args[i].equals( OUTPUT_PREFIX ) ) {     i++;     outputPrefix = args[i]; } else if( args[i].equals( COLOR ) ) {     i++;     color = args[i]; } else if( args[i].equals( RESOLUTION ) ) {     i++;     resolution = Integer.parseInt(args[i]); } else if( args[i].equals( CROPBOX ) ) {     i++; cropBoxLowerLeftX = Float.valueOf(args[i]).floatValue();     i++; cropBoxLowerLeftY = Float.valueOf(args[i]).floatValue();     i++; cropBoxUpperRightX = Float.valueOf(args[i]).floatValue();     i++; cropBoxUpperRightY = Float.valueOf(args[i]).floatValue(); } else {     if( pdfFile == null )     {         pdfFile = args[i];     } }        }        if( pdfFile == null )        { usage();        }        else        { if(outputPrefix == null) {     outputPrefix = pdfFile.substring( 0, pdfFile.lastIndexOf( '.' )); } PDdocument document = null; try {     document = PDdocument.load( pdfFile );     //document.print();     if( document.isEncrypted() )     {         try         {  document.decrypt( password );         }         catch( InvalidPasswordException e )         {  if( args.length == 4 )//they supplied the wrong password  {      System.err.println( "Error: The supplied password is incorrect." );      System.exit( 2 );  }  else  {      //they didn't supply a password and the default of "" was wrong.      System.err.println( "Error: The document is encrypted." );      usage();  }         }     }     int imageType = 24;     if ("bilevel".equalsIgnoreCase(color))     {         imageType = BufferedImage.TYPE_BYTE_BINARY;     }     else if ("indexed".equalsIgnoreCase(color))     {         imageType = BufferedImage.TYPE_BYTE_INDEXED;     }     else if ("gray".equalsIgnoreCase(color))     {         imageType = BufferedImage.TYPE_BYTE_GRAY;     }     else if ("rgb".equalsIgnoreCase(color))     {         imageType = BufferedImage.TYPE_INT_RGB;     }     else if ("rgba".equalsIgnoreCase(color))     {         imageType = BufferedImage.TYPE_INT_ARGB;     }     else     {         System.err.println( "Error: the number of bits per pixel must be 1, 8 or 24." );         System.exit( 2 );     }     //si une cropBox a ete specifier, appeler la methode de modification de cropbox        //changeCropBoxes(PDdocument document,float a, float b, float c,float d)        if ( cropBoxLowerLeftX!=0 || cropBoxLowerLeftY!=0 || cropBoxUpperRightX!=0 || cropBoxUpperRightY!=0 )        {          changeCropBoxes(document,cropBoxLowerLeftX, cropBoxLowerLeftY, cropBoxUpperRightX, cropBoxUpperRightY);        }     //Make the call     PDFImageWriter imageWriter = new PDFImageWriter();     boolean success = imageWriter.writeImage(document, imageFormat, password,  startPage, endPage, outputPrefix, imageType, resolution);     if (!success)     {         System.err.println( "Error: no writer found for image format '"      + imageFormat + "'" );         System.exit(1);     } } catch (Exception e) {     System.err.println(e); } finally {     if( document != null )     {         document.close();     } }        }    }        private static void usage()    {        System.err.println( "Usage: java org.apache.pdfbox.PDFToImage [OPTIONS] <PDF file>n" + "  -password  <password>          Password to decrypt documentn" + "  -imageType <image type>        (" + getImageFormats() + ")n" + "  -outputPrefix <output prefix>  Filename prefix for image filesn" + "  -startPage <number> The first page to start extraction(1 based)n" + "  -endPage <number>   The last page to extract(inclusive)n" + "  -color <string>     The color depth (valid: bilevel, indexed, gray, rgb, rgba)n" + "  -resolution <number>The bitmap resolution in dpin" + "  -cropbox <number> <number> <number> <number> The page area to exportn" + "  <PDF file>          The PDF document to usen" );        System.exit( 1 );    }    private static String getImageFormats()    {        StringBuffer retval = new StringBuffer();        String[] formats = ImageIO.getReaderFormatNames();        for( int i = 0; i < formats.length; i++ )        { retval.append( formats[i] ); if( i + 1 < formats.length ) {     retval.append( "," ); }        }        return retval.toString();    }    private static void changeCropBoxes(PDdocument document,float a, float b, float c,float d)    {      List pages = document.getdocumentCatalog().getAllPages();      for( int i = 0; i < pages.size(); i++ )      {   System.out.println("resizing page");          PDPage page = (PDPage)pages.get( i );          PDRectangle rectangle = new PDRectangle();   rectangle.setLowerLeftX(a);   rectangle.setLowerLeftY(b);   rectangle.setUpperRightX(c);   rectangle.setUpperRightY(d);          page.setMediaBox(rectangle);          page.setCropBox(rectangle);      }    }}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5488695.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存