spring boot java使用XEasyPdf生成pdf文档

java使用XEasyPdf生成pdf文档

spring boot java使用XEasyPdf生成pdf文档

第一步导入maven坐标,pom.xml全部贴上

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>pdfDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>pdfDemo</name>
    <description>pdfDemo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 引入pdf 依赖 底层是org.apache.pdfbox-->
        <dependency>
            <groupId>org.dromara.x-easypdf</groupId>
            <artifactId>x-easypdf-pdfbox</artifactId>
            <version>2.12.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

第二步编写代码

java 复制代码
package com.example.pdfdemo;

import org.dromara.pdf.pdfbox.component.barcode.XEasyPdfBarCode;
import org.dromara.pdf.pdfbox.component.image.XEasyPdfImageType;
import org.dromara.pdf.pdfbox.doc.XEasyPdfDefaultFontStyle;
import org.dromara.pdf.pdfbox.doc.XEasyPdfPositionStyle;
import org.dromara.pdf.pdfbox.handler.XEasyPdfHandler;
import org.dromara.pdf.pdfbox.mark.XEasyPdfDefaultWatermark;

import java.awt.*;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 描述:TestPdf
 *
 * @date:2023/7/1517:35:45 星期六
 * @author:linjianhui
 * @package:com.example.pdfdemo
 */
public class TestPdf {

    public static void main(String[] args) throws IOException {
        List<String> list = new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            list.add("我是小孩也是王" + i);
        }
        // 定义pdf输出路径
      //  String outputPath = "E:\\pdf\\test.pdf";
        String outputPath ="E:\\pdf\\test.pdf";
//
// 构建文档
        XEasyPdfHandler.Document.build().setGlobalWatermark(new XEasyPdfDefaultWatermark("土豪辉")).addPage(
                // 构建页面
                XEasyPdfHandler.Page.build(
                        // 构建组件
                       XEasyPdfHandler.BarCode.build(XEasyPdfBarCode.CodeType.QR_CODE, "xxx"),
                       //通过图片url地址写入图片
                        XEasyPdfHandler.Image.build(new URL("https://pics5.baidu.com/feed/c2cec3fdfc03924551e10f01283418c97c1e2590.jpeg").openStream(), XEasyPdfImageType.PNG),
                        //写入文本并设置颜色,水平居中,加粗
                        XEasyPdfHandler.Text.build("我是小孩也是王").setFontColor(new Color(255, 182, 193)).setHorizontalStyle(XEasyPdfPositionStyle.CENTER).setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD),
                        XEasyPdfHandler.Text.build("xxx通知书").setHorizontalStyle(XEasyPdfPositionStyle.CENTER).setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD),
                        //写入空行
                        XEasyPdfHandler.Text.build(Arrays.asList("")),
                        //写入文本列表,并设置左边距为200
                        XEasyPdfHandler.Text.build(list).setMarginLeft(200f)

                )
// 保存文档到指定路径,并关闭
        ).save(outputPath).close();

		//将文档上传到文件服务器
        // 将pdf 写入ByteArrayOutputStream ,byte[] bytes = outputStream.toByteArray(); new ByteArrayInputStream(bytes)构造输入流
        //            //上传到obs服务器,obs上传完后会将流给关闭
        //            obsClient.putObject(bucketName, newFileName, new ByteArrayInputStream(bytes));

        //拿到了这个之后,怎么上传到obs服务器
        //通过feign调用传递byte[] 获取上传的文件url 后写入数据库
    }
}

代码实战:

java 复制代码
public String createPDF(){
        List<XEasyPdfComponent> list = new ArrayList<>();
        list.add(XEasyPdfHandler.Text.build("xxx通知书").setHorizontalStyle(XEasyPdfPositionStyle.CENTER).setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD));
        //写入一行空行
        list.add(XEasyPdfHandler.Text.build(Arrays.asList("")));
        float marginLeft = 200f;
        String resultUrl = "";
        //生成pdf关键操作
        //使用try-with-resource自动关闭资源
        try (XEasyPdfDocument pdfDocument = XEasyPdfHandler.Document.build().addPage(XEasyPdfHandler.Page.build(list));
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
			//将数据保存到流中
            pdfDocument.save(outputStream);
            byte[] bytes = outputStream.toByteArray();
            //inputStream = new ByteArrayInputStream(bytes);
            //todo //通过feign调用传递inputStream到file服务, 获取上传的文件url后写入数据库
            String pdfUrl = fileService.uploadStream(bytes);
            //拿到url后,后写入数据库
            resultUrl = Optional.ofNullable(pdfUrl).orElse("");
            //插入数据库 todo 
            
            return resultUrl;
        } catch (Exception e) {
            log.error("生成xxx通知书pdf抛出异常", e);
        }
   }
相关推荐
书中自有妍如玉8 分钟前
.net 使用MQTT订阅消息
java·前端·.net
风铃儿~33 分钟前
Spring AI 入门:Java 开发者的生成式 AI 实践之路
java·人工智能·spring
斯普信专业组39 分钟前
Tomcat全方位监控实施方案指南
java·tomcat
忆雾屿1 小时前
云原生时代 Kafka 深度实践:06原理剖析与源码解读
java·后端·云原生·kafka
武昌库里写JAVA1 小时前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
gaoliheng0061 小时前
Redis看门狗机制
java·数据库·redis
我是唐青枫1 小时前
.NET AOT 详解
java·服务器·.net
小白杨树树1 小时前
【WebSocket】SpringBoot项目中使用WebSocket
spring boot·websocket·网络协议
Su米苏2 小时前
Axios请求超时重发机制
java