实现将信息作为txt,pdf,图片的形式保存到电脑~

发布时间:2024年01月16日

PrintableUtils作为输出信息的工具类:

package org.example;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class PrintableUtils{
	//以图片的形式输出
    public static void saveAsTxtImage(Object object, String fileName) {
        // 创建空白的图片
        BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_4BYTE_ABGR);
        // 获取图形对象
        Graphics2D graphics = image.createGraphics();
        // 设置背景图片的颜色,以及图片的宽度
        graphics.setBackground(Color.PINK);
        graphics.clearRect(0, 0, image.getWidth(), image.getHeight());
        //设置图片中字体的颜色
        graphics.setColor(Color.BLACK);
        // 绘制订单信息
        graphics.drawString("Animal information: " + object.toString(), 50, 50);
        // 保存图片到文件
        try {
            ImageIO.write(image, "png", new File(fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //以PDF文件的形式输出
    public static void saveAsPdf(Object object, String fileName) {
        try {
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(fileName));
            document.open();
            // 设置字体
            Font font = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
            // 创建段落对象
            Paragraph paragraph = new Paragraph(object.toString(), font);
            // 添加段落到文档中
            document.add(paragraph);
            // 关闭文档
            document.close();
        } catch (DocumentException | FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    //以TXT文件的形式输出
    public static void saveAsTxt(Object object, String fileName) {
        try {
            // 创建文件输出流
            FileOutputStream fos = new FileOutputStream(fileName);
            // 将订单信息写入文件
            fos.write(object.toString().getBytes());
            // 关闭文件输出流
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

实体类:

package org.example;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Animal {
    private String name;
    private String type;
}

测试类:

package org.example;

public class Test {
    public static void main(String[] args) {
 			//我这里直接是默认输出到电脑当前项目的目录下,所以只传入了文件名
        Animal animal=new Animal("huahua","dog");
        PrintableUtils.saveAsPdf(animal,"animal.pdf");
        PrintableUtils.saveAsTxtImage(animal,"animal.png");
        PrintableUtils.saveAsTxt(animal,"animal.txt");
    }
}

相关的依赖:

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.12</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.1</version>
        </dependency>

关于这个功能的实现,策略者模式也可以,但是对比了一下,策略者模式实现该功能会增加类的个数,但策略者模式满足开闭原则,后期如果有了新的打印方法,不用修改源代码,只需要增加新的即可,没有最好的技术只有最合适的技术,无论使用哪种方法还是需要根据实际开发进行选择!

文章来源:https://blog.csdn.net/m0_64365419/article/details/135631453
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。