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

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

java 复制代码
package org.example;
import com.itextpdf.text.*;
import com.itextpdf.text.Font;
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) throws IOException {//将对象信息保存为image形式
        //Image(其全路径为java.awt.Image)是一个抽象类,BufferedImage是其实现类
        /*BufferedImage主要作用是将一幅图片加载到内存中
        * */
        BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_4BYTE_ABGR);
        /*Graphics类提供绘制各种基本的几何图形
        * Graphics2D与Graphics类相比能够处理二维图形*/
        // 获取图形对象
        Graphics2D graphics = image.createGraphics();
        // 修改画布背景为粉色
        graphics.setBackground(Color.PINK);
        //将图形区域内部的内容清除,使其变为透明或者指定的背景色
        graphics.clearRect(0, 0, image.getWidth(), image.getHeight());
        // 修改字体为黑色
        graphics.setColor(Color.BLACK);
        // 将object对象的信息写入
        graphics.drawString("Order ID: " + object.toString(), 50, 50);
        // ImageIO可以从本地文件中读取图片和写入图片,也可以从网络上读取图片写入本地文件中
        //将图片的信息保存到名字为filename的文件中,将其保存到磁盘
        ImageIO.write(image, "png", new File(fileName));
    }
    public static void saveAsPdf(Object object, String fileName) {//将对象信息保存为pdf形式
        try {
            Document document = new Document();
            //PdfWriter是iText库中的一个类,用于将文档内容写入到PDF文件中
            //getInstance()是PdfWriter类的静态方法,用于获取一个PdfWriter对象的实例
            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);
            // 添加段落到文档中--add的参数类型必须为Element
            document.add(paragraph);
            // 关闭文档
            document.close();
        } catch (DocumentException | FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static void saveAsTxt(Object object, String fileName) {//将对象信息保存为txt形式
        try {
            // 创建文件输出流
            FileOutputStream fos = new FileOutputStream(fileName);
            // 将信息写入文件
            fos.write(object.toString().getBytes());
            // 关闭文件输出流
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

实体类:

java 复制代码
package org.example;

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

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

测试类:

java 复制代码
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");
    }
}

相关的依赖:

java 复制代码
<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>

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

相关推荐
Nebula_g12 小时前
C语言应用实例:硕鼠游戏,田忌赛马,搬桌子,活动选择(贪心算法)
c语言·开发语言·学习·算法·游戏·贪心算法·初学者
爱吃甜品的糯米团子12 小时前
详解 JavaScript 内置对象与包装类型:方法、案例与实战
java·开发语言·javascript
知花实央l12 小时前
【Web应用实战】 文件上传漏洞实战:Low/Medium/High三级绕过(一句话木马拿webshell全流程)
前端·学习·网络安全·安全架构
华仔啊12 小时前
JavaScript + Web Audio API 打造炫酷音乐可视化效果,让你的网页跟随音乐跳起来
前端·javascript
snakecy12 小时前
信息系统项目管理师--论文case
大数据·学习·职场和发展·区块链
鸡吃丸子12 小时前
SEO入门
前端
天狗下凡13 小时前
【OpenGL学习】第2课:用OpenGL创建第一个窗口
学习
郝学胜-神的一滴13 小时前
Linux下,获取子进程退出值和异常终止信号
linux·服务器·开发语言·c++·程序人生
檀越剑指大厂13 小时前
【Nginx系列】Tengine:基于 Nginx 的高性能 Web 服务器与反向代理服务器
服务器·前端·nginx
程序定小飞13 小时前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring