java生成图片,java生成图片表格自动换行

发布时间:2023-01-06

本文目录一览:

  1. JAVA怎样将PPTX文件转换成图片
  2. java怎么生成带用户微信头像的图片,并把这张图片发送给用户。
  3. java在生成图片的时候,让文字竖排展示,如何实现?
  4. java中怎么将word文档怎么生成图片
  5. java如何生成颜色相间的条纹图片

JAVA怎样将PPTX文件转换成图片

关键代码就是: rtruns[l].setFontName("宋体");

import java.awt.Dimension;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.record.Slide;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
public class PPTtoImage {
    public static void main(String[] args) {
        // 读入PPT文件
        File file = new File("F:/20110618.ppt");
        doPPTtoImage(file);
    }
    public static boolean doPPTtoImage(File file) {
        boolean isppt = checkFile(file);
        if (!isppt) {
            System.out.println("The image you specify don't exit!");
            return false;
        }
        try {
            FileInputStream is = new FileInputStream(file);
            SlideShow ppt = new SlideShow(is);
            is.close();
            Dimension pgsize = ppt.getPageSize();
            org.apache.poi.hslf.model.Slide[] slide = ppt.getSlides();
            for (int i = 0; i < slide.length; i++) {
                System.out.print("第" + i + "页。");
                TextRun[] truns = slide[i].getTextRuns();
                for (int k = 0; k < truns.length; k++) {
                    RichTextRun[] rtruns = truns[k].getRichTextRuns();
                    for (int l = 0; l < rtruns.length; l++) {
                        int index = rtruns[l].getFontIndex();
                        String name = rtruns[l].getFontName();
                        rtruns[l].setFontIndex(1);
                        rtruns[l].setFontName("宋体");
                        System.out.println(rtruns[l].getText());
                    }
                }
                BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
                Graphics2D graphics = img.createGraphics();
                graphics.setPaint(Color.white);
                graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
                slide[i].draw(graphics);
                // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
                FileOutputStream out = new FileOutputStream("F:/test/pict_" + (i + 1) + ".jpeg");
                javax.imageio.ImageIO.write(img, "jpeg", out);
                out.close();
            }
            System.out.println("success!!");
            return true;
        } catch (FileNotFoundException e) {
            System.out.println(e);
            // System.out.println("Can't find the image!");
        } catch (IOException e) {
        }
        return false;
    }
    // function 检查文件是否为PPT
    public static boolean checkFile(File file) {
        boolean isppt = false;
        String filename = file.getName();
        String suffixname = null;
        if (filename != null && filename.indexOf(".") != -1) {
            suffixname = filename.substring(filename.indexOf("."));
            if (suffixname.equals(".ppt")) {
                isppt = true;
            }
            return isppt;
        } else {
            return isppt;
        }
    }
}

java怎么生成带用户微信头像的图片,并把这张图片发送给用户。

  1. 下载生成二维码所需要的jar包qrcode.jar;
  2. 直接上生成二维码的java代码
//需要导入的包
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
/**
 * 生成二维码(QRCode)图片
 * @param content 二维码图片的内容
 * @param imgPath 生成二维码图片完整的路径
 * @param ccbpath 二维码图片中间的logo路径
 */
public static int createQRCode(String content, String imgPath, String ccbPath) {
    try {
        Qrcode qrcodeHandler = new Qrcode();
        qrcodeHandler.setQrcodeErrorCorrect('M');
        qrcodeHandler.setQrcodeEncodeMode('B');
        qrcodeHandler.setQrcodeVersion(7);
        byte[] contentBytes = content.getBytes("gb2312");
        //构造一个BufferedImage对象 设置宽、高
        BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
        Graphics2D gs = bufImg.createGraphics();
        gs.setBackground(Color.WHITE);
        gs.clearRect(0, 0, 140, 140);
        // 设定图像颜色 BLACK
        gs.setColor(Color.BLACK);
        // 设置偏移量 不设置可能导致解析出错
        int pixoff = 2;
        // 输出内容 二维码
        if (contentBytes.length > 0 && contentBytes.length < 120) {
            boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
            for (int i = 0; i < codeOut.length; i++) {
                for (int j = 0; j < codeOut.length; j++) {
                    if (codeOut[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        } else {
            System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");
            return -1;
        }
        Image img = ImageIO.read(new File(ccbPath));//实例化一个Image对象。
        gs.drawImage(img, 55, 55, 30, 30, null);
        gs.dispose();
        bufImg.flush();
        // 生成二维码QRCode图片
        File imgFile = new File(imgPath);
        ImageIO.write(bufImg, "png", imgFile);
    } catch (Exception e) {
        e.printStackTrace();
        return -100;
    }
    return 0;
}

来自网友 孤独青鸟的博客

java在生成图片的时候,让文字竖排展示,如何实现?

package honest.imageio;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
 * 图片操作类
 *
 * @author 
 *
 */
public class ImageUtil {
    private BufferedImage image;
    private int width; // 图片宽度
    private int height; // 图片高度
    public ImageUtil(int width, int height) {
        this.width = width;
        this.height = height;
        image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    }
    /**
     * 创建一个含有指定颜色字符串的图片
     *
     * @param message
     *            字符串
     * @param fontSize
     *            字体大小
     * @param color
     *            字体颜色
     * @return 图片
     */
    public BufferedImage drawString(String message, int fontSize, Color color) {
        Graphics g = image.getGraphics();
        g.setColor(color);
        Font f = new Font("宋体", Font.BOLD, fontSize);
        g.setFont(f);
        int len = message.length();
        g.drawString(message, (width - fontSize * len) / 2,
                (height + (int) (fontSize / 1.5)) / 2);
        g.dispose();
        return image;
    }
    /**
     * 缩放图片
     *
     * @param scaleW
     *            水平缩放比例
     * @param scaleY
     *            垂直缩放比例
     * @return
     */
    public BufferedImage scale(double scaleW, double scaleH) {
        width = (int) (width * scaleW);
        height = (int) (height * scaleH);
        BufferedImage newImage = new BufferedImage(width, height,
                image.getType());
        Graphics g = newImage.getGraphics();
        g.drawImage(image, 0, 0, width, height, null);
        g.dispose();
        image = newImage;
        return image;
    }
    /**
     * 旋转90度旋转
     *
     * @return 对应图片
     */
    public BufferedImage rotate() {
        BufferedImage dest = new BufferedImage(height, width,
                BufferedImage.TYPE_INT_ARGB);
        for (int i = 0; i < width; i++)
            for (int j = 0; j < height; j++) {
                dest.setRGB(height - j - 1, i, image.getRGB(i, j));
            }
        image = dest;
        return image;
    }
    /**
     * 合并两个图像
     *
     * @param anotherImage
     *            另一张图片
     * @return 合并后的图片,如果两张图片尺寸不一致,则返回null
     */
    public BufferedImage mergeImage(BufferedImage anotherImage) {
        int w = anotherImage.getWidth();
        int h = anotherImage.getHeight();
        if (w != width || h != height) {
            return null;
        }
        for (int i = 0; i < w; i++) {
            for (int j = 0; j < h; j++) {
                int rgb1 = image.getRGB(i, j);
                int rgb2 = anotherImage.getRGB(i, j);
                Color color1 = new Color(rgb1);
                Color color2 = new Color(rgb2);
                // 如果该位置两张图片均没有字体经过,则跳过
                // 如果跳过,则最后将会是黑色背景
                if (color1.getRed() + color1.getGreen() + color1.getBlue()
                        + color2.getRed() + color2.getGreen()
                        + color2.getBlue() == 0) {
                    continue;
                }
                Color color = new Color(
                        (color1.getRed() + color2.getRed()) / 2,
                        (color1.getGreen() + color2.getGreen()) / 2,
                        (color1.getBlue() + color2.getBlue()) / 2);
                image.setRGB(i, j, color.getRGB());
            }
        }
        return image;
    }
    /**
     * 保存图片
     *
     * @param filePath
     *            图片路径
     */
    public void save(String filePath) {
        try {
            ImageIO.write(image, "png", new File(filePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 得到对应的图片
     *
     * @return
     */
    public BufferedImage getImage() {
        return image;
    }
}

java中怎么将word文档怎么生成图片

public class CreateWordDemo {
    public void createDocContext(String file)
            throws DocumentException, IOException {
        // 设置纸张大小
        Document document = new Document(PageSize.A4);
        // 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
        RtfWriter2.getInstance(document, new FileOutputStream(file));
        document.open();
        // 设置中文字体
        BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H",
                BaseFont.NOT_EMBEDDED);
        // 标题字体风格
        Font titleFont = new Font(bfChinese, 12, Font.BOLD);
        // 正文字体风格
        Font contextFont = new Font(bfChinese, 10, Font.NORMAL);
        Paragraph title = new Paragraph("标题");
        // 设置标题格式对齐方式
        title.setAlignment(Element.ALIGN_CENTER);
        title.setFont(titleFont);
        document.add(title);
        String contextString = "iText是一个能够快速产生PDF文件的java类库。"
                + " \n" // 换行
                + "iText的java类对于那些要产生包含文本,"
                + "表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。"
                + "使用iText与PDF能够使你正确的控制Servlet的输出。";
        Paragraph context = new Paragraph(contextString);
        // 正文格式左对齐
        context.setAlignment(Element.ALIGN_LEFT);
        context.setFont(contextFont);
        // 离上一段落(标题)空的行数
        context.setSpacingBefore(5);
        // 设置第一行空的列数
        context.setFirstLineIndent(20);
        document.add(context);
        // 利用类FontFactory结合Font和Color可以设置各种各样字体样式
        Paragraph underline = new Paragraph("下划线的实现", FontFactory.getFont(
                FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE, new Color(0, 0,
                255)));
        document.add(underline);
        // 设置 Table 表格
        Table aTable = new Table(3);
        int width[] = { 25, 25, 50 };
        aTable.setWidths(width); // 设置每列所占比例
        aTable.setWidth(90); // 占页面宽度 90%
        aTable.setAlignment(Element.ALIGN_CENTER); // 居中显示
        aTable.setAlignment(Element.ALIGN_MIDDLE); // 纵向居中显示
        aTable.setAutoFillEmptyCells(true); // 自动填满
        aTable.setBorderWidth(1); // 边框宽度
        aTable.setBorderColor(new Color(0, 125, 255)); // 边框颜色
        aTable.setPadding(2); // 衬距,看效果就知道什么意思了
        aTable.setSpacing(3); // 即单元格之间的间距
        aTable.setBorder(2); // 边框
        // 设置表头
        Cell haderCell = new Cell("表格表头");
        haderCell.setHeader(true);
        haderCell.setColspan(3);
        aTable.addCell(haderCell);
        aTable.endHeaders();
        Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN);
        Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据", fontChinese));
        cell.setVerticalAlignment(Element.ALIGN_TOP);
        cell.setBorderColor(new Color(255, 0, 0));
        cell.setRowspan(2);
        aTable.addCell(cell);
        aTable.addCell(new Cell("#1"));
        aTable.addCell(new Cell("#2"));
        aTable.addCell(new Cell("#3"));
        aTable.addCell(new Cell("#4"));
        Cell cell3 = new Cell(new Phrase("一行三列数据", fontChinese));
        cell3.setColspan(3);
        cell3.setVerticalAlignment(Element.ALIGN_CENTER);
        aTable.addCell(cell3);
        document.add(aTable);
        document.add(new Paragraph("\n"));
        // 添加图片 Image.getInstance即可以放路径又可以放二进制字节流
        Image img = Image.getInstance("d:\\img01800.jpg");
        img.setAbsolutePosition(0, 0);
        img.setAlignment(Image.RIGHT); // 设置图片显示位置
        img.scaleAbsolute(60, 60); // 直接设定显示尺寸
        // img.scalePercent(50); //表示显示的大小为原尺寸的50%
        // img.scalePercent(25, 12); //图像高宽的显示比例
        // img.setRotation(30); //图像旋转一定角度
        document.add(img);
        document.close();
    }
    public static void main(String[] args) {
        CreateWordDemo word = new CreateWordDemo();
        String file = "d:/demo1.doc";
        try {
            word.createDocContext(file);
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

java如何生成颜色相间的条纹图片

这是简单的初步实现,你可以借鉴一下哈

package v01;
import javax.swing.*;
import java.awt.*;
public class ColorP extends JFrame {
    public ColorP() {
        this.add(new NewPanel());
    }
    public static void main(String[] args) {
        ColorP frame = new ColorP();
        frame.setTitle("Content");
        frame.setSize(300, 150);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    class NewPanel extends JPanel { // 扩展JPanel
        public NewPanel() {
        }
        protected void paintComponent(Graphics g) { // 运用画笔Graphics绘制
            super.paintComponent(g); // 添加画笔
            int[] x = new int[4];
            int[] y = new int[4];
            for (int i = 0; i < 10; i++) {
                x[0] = i * 40;
                y[0] = 0;
                x[1] = x[0] + 40;
                y[1] = 0;
                x[2] = 0;
                y[2] = (i + 1) * 40;
                x[3] = 0;
                y[3] = y[2] - 40;
                if (i % 2 == 0)
                    g.setColor(Color.black);
                else
                    g.setColor(Color.yellow);
                g.fillPolygon(x, y, x.length);
            }
        }
    }
}