0

PDFBoxを使用して画像をPDFに書き込もうとしています。私は彼らのサンプルを使用しています(添付のとおり)。すべて問題ありませんが、3.5MB jpeg (3200*2500px) の書き込みには約 2 秒かかります。

これは正常ですか?高速化する方法はありますか (少なくとも 10 倍)。

public void createPDFFromImage( String inputFile, String image, String outputFile ) 
    throws IOException, COSVisitorException
{
    // the document
    PDDocument doc = null;
    try
    {
        doc = PDDocument.load( inputFile );

        //we will add the image to the first page.
        PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get( 0 );

        PDXObjectImage ximage = null;
        if( image.toLowerCase().endsWith( ".jpg" ) )
        {
            ximage = new PDJpeg(doc, new FileInputStream( image ) );
        }
        else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff"))
        {
            ximage = new PDCcitt(doc, new RandomAccessFile(new File(image),"r"));
        }
        else
        {
            //BufferedImage awtImage = ImageIO.read( new File( image ) );
            //ximage = new PDPixelMap(doc, awtImage);
            throw new IOException( "Image type not supported:" + image );
        }
        PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true);

        contentStream.drawImage( ximage, 20, 20 );

        contentStream.close();
        doc.save( outputFile );
    }
    finally
    {
        if( doc != null )
        {
            doc.close();
        }
    }
}
4

1 に答える 1

0

別の製品itextを使用したい場合は、http: //tutorials.jenkov.com/java-itext/image.html を参照してください。個人的には、+750k jpg 画像を使用してこのテストを行い、 78ミリ秒

try {
        PdfWriter.getInstance(document,
                new FileOutputStream("Image2.pdf"));
        document.open();

        long start = System.currentTimeMillis();
        String imageUrl = "c:/Users/dummy/notSoBigImage.jpg";
        Image image = Image.getInstance((imageUrl));
        image.setAbsolutePosition(500f, 650f);
        document.add(image);

        document.close();
        long end = System.currentTimeMillis() - start;
        System.out.println("time: " + end + " ms");
    } catch(Exception e){
        e.printStackTrace();
    }
于 2013-05-28T15:51:27.567 に答える