实现将信息作为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>

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

相关推荐
爱吃的强哥4 分钟前
vue3 使用 vite 管理多个项目,实现各子项目独立运行,独立打包
前端·javascript·vue.js
echo1754259 分钟前
Apipost免费版、企业版和私有化部署详解
java
谈不譚网安13 分钟前
CSRF请求伪造
前端·网络安全·csrf
夜夜敲码15 分钟前
C语言教程(十六): C 语言字符串详解
c语言·开发语言
帅云毅17 分钟前
Web3.0的认知补充(去中心化)
笔记·学习·web3·去中心化·区块链
豆豆17 分钟前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
TT模板19 分钟前
苹果cmsV10主题 MXonePro二开优化修复开源版
前端·html5
拖孩20 分钟前
【Nova UI】十一、组件库中 Icon 组件的测试、使用与全局注册全攻略
前端·javascript·vue.js·ui·sass
宋康22 分钟前
C语言结构体和union内存对齐
c语言·开发语言
去伪存真25 分钟前
不用动脑,手把手跟着我做,就能掌握Gitlab+Jenkins提交代码自动构部署
前端·jenkins