当前位置: 首页 > news >正文

itext 转换word文档转pdf

itext 转换word文档转pdf

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version><scope>compile</scope></dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><!-- iText --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.2</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.9</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.6</version> <!-- 使用最新版本 --></dependency>
package com.msun.csm.service.proj.disastercloud;import java.io.FileInputStream;
import java.io.FileOutputStream;import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;import cn.hutool.core.util.StrUtil;public class WordToPdfConverter {public static void convert(String inputFilePath, String outputFilePath) {try {// 读取Word文档XWPFDocument document = new XWPFDocument(new FileInputStream(inputFilePath));// 创建PDF文档Document pdfDocument = new Document();// 将PDF文档写入输出文件PdfWriter.getInstance(pdfDocument, new FileOutputStream(outputFilePath));// 打开PDF文档pdfDocument.open();// 将Word文档内容写入PDF文档WordToPdfWriter writer = new WordToPdfWriter(pdfDocument);writer.write(document);// 关闭PDF文档pdfDocument.close();System.out.println("Word转PDF成功!");} catch (Exception e) {System.out.println("Word转PDF失败:" + e.getMessage());}}public static void main(String[] args) {String inputFilePath = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\aa.docx";String outputFilePath = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\aa.pdf";convert(inputFilePath, outputFilePath);}
}class WordToPdfWriter {private Document pdfDocument;WordToPdfWriter(Document pdfDocument) {this.pdfDocument = pdfDocument;}public void write(XWPFDocument document) throws Exception {//设置基础中文字体BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//给字体添加样式Font fontChinese = new Font(bfChinese, 15, Font.BOLD);Font normal = new Font(bfChinese, 15, Font.NORMAL);//设置文字导出时的字体// 逐页将Word文档内容写入PDF文档
//        for (XWPFParagraph paragraph : document.getParagraphs()) {
            pdfDocument.add(new com.itextpdf.text.Paragraph(paragraph.getText()));
//            pdfDocument.add(new Paragraph(paragraph.getText(), fontChinese));
//        }for (XWPFParagraph paragraph : document.getParagraphs()) {String text = paragraph.getText();Paragraph pdfParagraph;if (text.contains("$a")) {pdfParagraph = new Paragraph(text.replace("$a", StrUtil.EMPTY), fontChinese);pdfParagraph.add("\n");pdfParagraph.setAlignment(Element.ALIGN_CENTER);} else if (text.contains("$b")) {pdfParagraph = new Paragraph(text.replace("$b", StrUtil.EMPTY), normal);pdfParagraph.setFirstLineIndent(30);} else if (text.contains("$c")) {pdfParagraph = new Paragraph(text.replace("$c", StrUtil.EMPTY), normal);pdfParagraph.add("\n");pdfParagraph.setAlignment(Element.ALIGN_RIGHT);} else if (text.contains("$d")) {pdfParagraph = new Paragraph(text.replace("$d", StrUtil.EMPTY), normal);pdfParagraph.add("\n");pdfParagraph.setAlignment(Element.ALIGN_RIGHT);} else if (text.contains("$e")) {pdfParagraph = new Paragraph(text.replace("$e", StrUtil.EMPTY));pdfParagraph.add("\n");} else {pdfParagraph = new Paragraph(text, normal);Chunk chunk = new Chunk();chunk.setLineHeight(12);pdfParagraph.add(chunk);}
//            pdfParagraph.setPaddingTop(40);pdfParagraph.setMultipliedLeading(2);
//            for (XWPFRun run : paragraph.getRuns()) {
                Text pdfText = new Text(run.getText(0) != null ? run.getText(0) : "");
//                String text = run.getText(0); // 注意:这里可能丢失格式化文本,但对于简单文档通常足够
//                if (text == null) {
//                    text = "";
//                } else {
//                    text = sb.toString();
//                }
//                Chunk chunk = new Chunk(text);
//
//                // 设置样式
//                if (run.isBold()) {
//                    chunk.setFont(fontChinese);
//                }
//                if (run.isItalic()) {
//                    chunk.setFont(fontChinese);
//                }
//                if (run.getFontSize() != -1) {
//                    chunk.setFont(fontChinese);
//                }
                chunk.setFontSize(run.getFontSize() != -1 ? run.getFontSize() : 12);
//                pdfParagraph.add(chunk);
//
                pdfDocument.add(new Paragraph(run.getText(0), fontChinese));
//            }pdfDocument.add(pdfParagraph);}}
}

相关文章:

itext 转换word文档转pdf

itext 转换word文档转pdf <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version><scope>compile</scope></dependency> <dependency><groupId>org.a…...

WSL-默认root登录

WSL-默认root登录 使用管理员&#xff0c;打开powershell PS C:\WINDOWS\system32> wsl -l 适用于 Linux 的 Windows 子系统分发版: Ubuntu-22.04 (默认) PS C:\WINDOWS\system32> ubuntu2204.exe config --default-user root PS C:\WINDOWS\system32>修改之后&…...

ASIO网络调试助手之四:浅谈QTcpServer性能

网络上有些质疑Qt Network模块性能的声音,本文将从理论和压测两个方面对比ASIO tcp server和QTcpServer在Windows上的性能,最后给出结论。 一.理论 QTcpServer在Windows上的实现是基于select模型,源码位置:5.12.6\Src\qtbase\src\network\socket\qnativesocketengine_win…...

快手 日常实习一面面经

官网投递&#xff0c;三天约面 线上面试 &#xff08;60mins&#xff09;&#xff1a; 1. 自我介绍 2. 问实习 介绍自己做的业务上一段实习的公司框架和开源的 RPC 框架的区别负责的业务与核心业务的依赖关系场景题 -> 设计高并发下的负载均衡 3. 项目拷打 手写 双检锁…...

Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目

最适合小白零基础的Cursor教程 网站lookai.top相同作者&#xff0c;最新文章会在网站更新&#xff0c;欢迎收藏书签 创建你的第一个Cursor 项目 实操视频 概述 开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项…...

通用序列化和反序列化实现思路

本文简单的记录一下采用模板来实现序列化与反序列的思路&#xff0c; 同时采用C20标准的concept和requires来简化模板函数的选择。 首先了解一下自定义类支持序列化的两种方式&#xff1a; 一、序列化自定义类型&#xff08;侵入式&#xff09; struct Test {std::string na…...

书生营第四期L0G2000 Python 基础知识

闯关任务 Leetcode 383(笔记中提交代码与leetcode提交通过截图) class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:note [0]*26maga [0]*26for s in ransomNote:note[ord(s)-ord(a)] 1for s in magazine:maga[ord(s)-ord(a)] 1for i in…...

Day12-数据库服务冗余架构

Day-12-数据库服务高可用集群 1、数据库MGR组复制实践2、数据库高可用MHA应用介绍3、数据库高可用MHA环境准备4、数据库高可用MHA原理机制5、数据库高可用MHA功能配置 1、数据库MGR组复制实践 &#xff08;强一致性主从同步) 2、数据库高可用MHA应用介绍 3、数据库高可用MHA环境…...

js监听div尺寸,ResizeObserver

示例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><style>.observedDiv {width: 40vw;height: 50vh;background-color: lightblue;}</style></head><body><div id"…...

STM32与openmv的串口通信

OpenMV与STM32的通信是嵌入式系统和物联网领域中的一项重要技术。OpenMV是一种开源的微型机器视觉模块&#xff0c;基于ARM Cortex-M7微控制器&#xff0c;支持多种图像处理功能&#xff0c;如颜色识别、形状检测等。而STM32是STMicroelectronics公司推出的基于ARM Cortex内核的…...

C#基于SkiaSharp实现印章管理(11)

PdfSharpCore支持类似GDI方式在PDF页面绘制文字、矩形、圆形、多边形、路径、图片等内容&#xff0c;本文学习基于PdfSharpCore将结构化印章数据导出为PDF文件的基本用法&#xff0c;评估其使用可行性。   PdfSharpCore创建PDF文件很方便&#xff0c;调用PdfDocument类创建实…...

Spring使用@Async出现循环依赖原因以及解决方案

场景复现 1、首先项目需要打开spring的异步开关&#xff0c;在application主类上加EnableAsync 2、创建一个包含了Async方法的异步类MessageService&#xff1a; Service public class MessageService {Resource private TaskService taskService; Async public void…...

如何训练 RAG 模型

训练 RAG&#xff08;Retrieval-Augmented Generation&#xff09;模型涉及多个步骤&#xff0c;包括准备数据、构建知识库、配置检索器和生成模型&#xff0c;以及进行训练。以下是一个详细的步骤指南&#xff0c;帮助你训练 RAG 模型。 1. 安装必要的库 确保你已经安装了必…...

鸿蒙网络编程系列34-Wifi热点扫描及连接示例

1. Wifi热点简介 Wifi热点是移动设备接入网络的重要形式&#xff0c;特别是在不具备固定网络接入点的情况下&#xff0c;可以通过Wifi热点灵活方便的接入网络&#xff0c;因此在日常生活中具有广泛的应用。鸿蒙系统也提供了方便的Wifi管理API&#xff0c;支持热点扫描&#xf…...

LVS三种模式工作原理

常用负载均衡设备 实现负载均衡的技术的方式有哪些&#xff1a;硬件层面有F5负载均衡器&#xff0c;网络层层面有LVS(Linux Virtual Server)&#xff0c;应用层层面就是nginx、Haproxy等。 lvs工作在网络层&#xff0c;nginx工作在应用层。 LVS有三种工作模式 lvs是由章文崇…...

【二轮征稿启动】第三届环境工程与可持续能源国际会议持续收录优质稿件

第三届环境工程与与可持续能源国际会议&#xff08;EESE 2024&#xff09;由中南林业科技大学主办&#xff0c;湖南农业大学协办&#xff0c;将于2024年12月20日-22日在湖南长沙召开。 大会邀请到国家杰出青年科学基金获得者、华中科技大学能源与动力工程学院冯光教授&#xf…...

网络安全——防火墙技术

目录 前言基本概念常见防火墙技术防火墙的主要功能防火墙的不足之处相关题目1.组织外部未授权用户访问内部网络2.DMZ区3.包过滤防火墙和代理服务防火墙 前言 这是在软件设计师备考时编写的资料文章&#xff0c;相关内容偏向软件设计师 基本概念 防火墙技术是网络安全领域中的…...

Missing classes detected while running R8报错解决方案

Android 打包release版本时报错如下&#xff1a; > Task :printlib:minifyReleaseWithR8 FAILED AGPBI: {"kind":"error","text":"Missing classes detected while running R8. Please add the missing classes or apply additional ke…...

智能指针

目录 1. 为什么需要智能指针&#xff1f; 2. 内存泄漏 2.1 什么是内存泄漏&#xff0c;内存泄漏的危害 2.2 内存泄漏分类&#xff08;了解&#xff09; 堆内存泄漏(Heap leak) 系统资源泄漏 2.3 如何检测内存泄漏&#xff08;了解&#xff09; 2.4如何避免内存泄漏 3.…...

通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)

介绍 这篇博文详细介绍了如何发现CVE-2024-6778和CVE-2024-5836的&#xff0c;这是Chromium web浏览器中的漏洞&#xff0c;允许从浏览器扩展&#xff08;带有一点点用户交互&#xff09;中进行沙盒逃逸。 简而言之&#xff0c;这些漏洞允许恶意的Chrome扩展在你的电脑上运行…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...