栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将PDF页面导出为Java中的一系列图像

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将PDF页面导出为Java中的一系列图像

这是一种实现方法,它结合了Web上的一些代码片段。

如何将PDF绘制到图像中?

https://pdf-
renderer.dev.java.net/examples.html

从图像创建缓冲图像

原文:http :
//www.exampledepot.com/egs/java.awt.image/Image2Buf.html

更新:如何将缓冲的图像转换为图像,反之亦然?

将生成的图形保存到PNG或JPEG文件

原文:http :
//www.exampledepot.com/egs/javax.imageio/Graphic2File.html

更新:http :
//docs.oracle.com/javase/tutorial/2d/images/saveimage.html

组合成类似这样的东西,可以将所有页面变成图像:

import com.sun.pdfview.PDFFile;import com.sun.pdfview.PDFPage;import java.awt.Graphics;import java.awt.GraphicsConfiguration;import java.awt.GraphicsDevice;import java.awt.GraphicsEnvironment;import java.awt.HeadlessException;import java.awt.Image;import java.awt.Rectangle;import java.awt.Transparency;import java.io.*;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import javax.swing.*;import javax.imageio.*;import java.awt.image.*;public class ImageMain {    public static void setup() throws IOException {        // load a pdf from a byte buffer        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);        int numPgs = pdffile.getNumPages();        for (int i = 0; i < numPgs; i++) { // draw the first page to an image PDFPage page = pdffile.getPage(i); // 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         ); // save it as a file BufferedImage bImg = toBufferedImage(img); File yourImageFile = new File("page_" + i + ".png"); ImageIO.write(bImg, "png", yourImageFile);        }    }    // This method returns a buffered image with the contents of an image    public static BufferedImage toBufferedImage(Image image) {        if (image instanceof BufferedImage) { return (BufferedImage) image;        }        // This pre ensures that all the pixels in the image are loaded        image = new ImageIcon(image).getImage();        // Determine if the image has transparent pixels; for this method's        // implementation, see e661 Determining If an Image Has Transparent        // Pixels        boolean hasAlpha = hasAlpha(image);        // Create a buffered image with a format that's compatible with the        // screen        BufferedImage bimage = null;        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();        try { // Determine the type of transparency of the new buffered image int transparency = Transparency.OPAQUE; if (hasAlpha) {     transparency = Transparency.BITMASK; } // Create the buffered image GraphicsDevice gs = ge.getDefaultScreenDevice(); GraphicsConfiguration gc = gs.getDefaultConfiguration(); bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency);        } catch (HeadlessException e) { // The system does not have a screen        }        if (bimage == null) { // Create a buffered image using the default color model int type = BufferedImage.TYPE_INT_RGB; if (hasAlpha) {     type = BufferedImage.TYPE_INT_ARGB; } bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);        }        // Copy image to buffered image        Graphics g = bimage.createGraphics();        // Paint the image onto the buffered image        g.drawImage(image, 0, 0, null);        g.dispose();        return bimage;    }    public static boolean hasAlpha(Image image) {        // If buffered image, the color model is readily available        if (image instanceof BufferedImage) { BufferedImage bimage = (BufferedImage) image; return bimage.getColorModel().hasAlpha();        }        // Use a pixel grabber to retrieve the image's color model;        // grabbing a single pixel is usually sufficient        PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);        try { pg.grabPixels();        } catch (InterruptedException e) {        }        // Get the image's color model        ColorModel cm = pg.getColorModel();        return cm.hasAlpha();    }    public static void main(final String[] args) {        SwingUtilities.invokeLater(new Runnable() { public void run() {     try {         ImageMain.setup();     } catch (IOException ex) {         ex.printStackTrace();     } }        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号