博客

  • Java实现格式转换为PDF的两种方案

    在Java中实现格式转换为PDF,通常需要借助第三方开源库。目前业界最常用且功能强大的两个库是 iText 和 Apache PDFBox

    以下我将为您提供基于这两种主流方案的完整逻辑与代码示例,涵盖最常见的三种转换场景:纯文本转PDF图片转PDF 以及 HTML网页转PDF

    方案一:使用 iText 库(推荐,API更高级)

    iText 提供了丰富的文档排版能力,非常适合生成复杂的报表或文档。

    1. 引入 Maven 依赖1. 引入 Maven 依赖

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>7.2.5</version>
        <type>pom</type>
    </dependency>
    <!-- 如果需要HTML转PDF,还需要引入 pdfHTML -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf</artifactId>
        <version>4.0.3</version>
    </dependency>

    2. 完整转换工具类代码

    import com.itextpdf.html2pdf.HtmlConverter;
    import com.itextpdf.kernel.geom.PageSize;
    import com.itextpdf.kernel.pdf.PdfDocument;
    import com.itextpdf.kernel.pdf.PdfWriter;
    import com.itextpdf.layout.Document;
    import com.itextpdf.layout.element.Image;
    import com.itextpdf.layout.element.Paragraph;
    import com.itextpdf.io.image.ImageDataFactory;
    
    import java.io.*;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class PdfConverter {
    
        /**
         * 1. 纯文本 (TXT) 转换为 PDF
         */
        public static void textToPdf(String txtPath, String pdfPath) throws IOException {
            // 读取文本内容
            String content = new String(Files.readAllBytes(Paths.get(txtPath)), StandardCharsets.UTF_8);
            
            try (PdfWriter writer = new PdfWriter(pdfPath);
                 PdfDocument pdfDoc = new PdfDocument(writer);
                 Document document = new Document(pdfDoc, PageSize.A4)) {
                
                // 将文本按行分割并添加到PDF中
                for (String line : content.split("\n")) {
                    document.add(new Paragraph(line));
                }
            }
        }
    
        /**
         * 2. 图片转换为 PDF
         */
        public static void imageToPdf(String imagePath, String pdfPath) throws Exception {
            try (PdfWriter writer = new PdfWriter(pdfPath);
                 PdfDocument pdfDoc = new PdfDocument(writer);
                 Document document = new Document(pdfDoc, PageSize.A4)) {
                
                Image image = new Image(ImageDataFactory.create(imagePath));
                // 缩放图片以适应A4纸张宽度
                image.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight()); 
                document.add(image);
            }
        }
    
        /**
         * 3. HTML 字符串/文件转换为 PDF
         */
        public static void htmlToPdf(String htmlContent, String pdfPath) throws IOException {
            try (OutputStream os = new FileOutputStream(pdfPath)) {
                // 核心方法:直接将HTML流转换为PDF流
                HtmlConverter.convertToPdf(htmlContent, os);
            }
        }
    
        // 测试入口
        public static void main(String[] args) throws Exception {
            // 示例:HTML转PDF
            String html = "<h1>Hello PDF</h1><p>这是一段由Java生成的PDF内容。</p>";
            htmlToPdf(html, "output_from_html.pdf");
        }
    }

    方案二:使用 Apache PDFBox 库(轻量级,完全免费开源)

    PDFBox 在处理基础的文本写入和图片嵌入时非常稳定,适合不需要复杂排版的场景。

    1. 引入 Maven 依赖

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.24</version>
    </dependency>

    2. 基础文本写入示例

    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.font.PDType1Font;
    
    import java.io.IOException;
    
    public class PdfBoxConverter {
        public static void createSimplePdf(String pdfPath, String text) throws IOException {
            try (PDDocument document = new PDDocument()) {
                PDPage page = new PDPage();
                document.addPage(page);
    
                try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
                    contentStream.beginText();
                    contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
                    contentStream.newLineAtOffset(100, 700); // 设置文本起始坐标
                    contentStream.showText(text);
                    contentStream.endText();
                }
                document.save(pdfPath);
            }
        }
    }

    核心开发建议与注意事项:

    1. 中文乱码问题:上述 iText 和 PDFBox 的基础示例使用的是默认英文字体。如果您的业务涉及中文转换,必须在代码中显式加载中文字体文件(如 msyh.ttf 微软雅黑),否则生成的PDF会出现乱码或方块。
    2. 资源释放:无论使用哪种库,务必确保 DocumentPdfWriter 或 ContentStream 等对象在使用后被正确关闭(推荐使用 Java 的 try-with-resources 语法),以防止内存泄漏和文件被占用无法删除。
    3. HTML转PDF的局限性:在使用 iText 的 html2pdf 模块时,它不支持所有的 CSS3 特性(如部分伪类 :hover 或 @import 规则)。对于复杂的网页,建议在转换前先将外部CSS内联化。
  • 模拟千问Qwen-AI对话响应式模板

    模拟千问Qwen-AI对话响应式模板

    • 本模板采用纯原生前端技术栈打造,基于 HTML5 + CSS3 + Vanilla JavaScript (ES6+) 构建,零框架依赖(无需 Bootstrap、jQuery、React 或 Vue),实现了极致的轻量级加载与高性能渲染。代码严格遵循 关注点分离 (SoC) 原则,HTML 结构、CSS 样式与 JS 逻辑完全独立文件存储,模块化清晰,极大地降低了二次开发与维护成本。
    • 设计风格定位为 现代极简科技风 (Modern Minimalist Tech),主色调选用 静谧靛蓝 (#6366f1) 搭配 纯净雪白 (#ffffff) 与 柔和灰阶 (#f8fafc),营造出专业、冷静且富有未来感的 AI 交互氛围。界面细节融入了 玻璃拟态 (Glassmorphism) 导航栏、流式打字机效果多模态输入预览 及 平滑过渡动画,旨在提供沉浸式的对话体验。
    • 功能架构上,模板内置了 完整的认证模拟系统(登录/注册/状态持久化)、动态侧边栏历史管理富文本消息渲染(支持图片上传预览、代码块展示)、个人中心仪表盘 及 深度设置面板。特别设计了 移动端优先的响应式布局,通过多档断点适配,确保在桌面大屏、平板及手机端均能呈现完美的操作手感,完美适用于 AI 助手、智能客服、SaaS 对话框、企业内部知识库 等场景。
    • 模板代码完全开源免费,结构规范,注释详尽,欢迎开发者直接复用或作为大型项目的 UI 基础框架!
  • 生产企业-响应式模板

    生产企业-响应式模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖(如 Bootstrap、jQuery 等),结构清晰、代码分离(HTML/CSS/JS 独立文件),易于二次开发与维护。
    • 设计风格以 现代工业美学 为主,采用 深空蓝 (#0f172a) 搭配 活力橙 (#f97316) 的专业配色方案,凸显制造企业的严谨、科技感与信赖度。模板内置了 产品筛选、案例数据展示、新闻详情、询盘表单 等核心功能模块,注重 B2B 业务转化与品牌形象塑造。
    • 全站支持 多档响应式断点 适配,完美兼容桌面端、平板及移动端设备,适合机械加工、电子制造、化工生产、自动化设备等各类生产企业官网场景。
    • 模板完全免费开源,欢迎下载并用于您的商业项目!
  • 技术分享博客-响应式模板

    技术分享博客-响应式模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。
    • 外部仅引入了 Google Fonts 字体库(Inter 与 JetBrains Mono),并使用 Emoji 表情符号(如 🌙)替代图标库,确保极致轻量且加载迅速。
    • 设计风格以极客专业为主,采用简洁的排版与高对比度配色方案(配合 CSS 变量 var(--primary-color) 实现主题色定制),注重技术内容的可读性与开发者用户体验。支持响应式布局适配,适合技术博客、个人开发者主页、架构师笔记等场景。
    • 模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。
  • 家政服务宣传网站模板

    家政服务宣传网站模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。
    • 外部仅引入了 Google Fonts 字体库,使用 Emoji 表情符号替代图标库,确保极致轻量且加载迅速。
    • 设计风格以 温馨专业 为主,采用橙色系配色方案,注重家政服务行业特色与用户体验,支持多档响应式断点适配,适合家政公司、保洁服务、育儿养老服务等场景。
    • 模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。
  • 农村宣传网站模板

    农村宣传网站模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。
    • 外部仅引入了 Google Fonts 字体库,使用 Emoji 表情符号替代图标库,确保极致轻量且加载迅速。
    • 设计风格以 乡土自然 为主,采用棕色 + 绿色配色方案,融入书法字体元素,注重农村特色与用户体验,支持多档响应式断点适配,适合行政村、自然村、乡村旅游示范点等场景。
    • 模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。
  • 城市乡镇政府宣传网站模板

    城市乡镇政府宣传网站模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。
    • 外部仅引入了 Google Fonts 字体库,使用 Emoji 表情符号替代图标库,确保极致轻量且加载迅速。
    • 设计风格以 庄重正式 为主,采用中国红 + 政府蓝配色方案,注重政府网站规范性与用户体验,支持多档响应式断点适配,适合乡镇政府、街道办事处、村委会等基层政务网站场景。
    • 模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。
  • 永恒之约婚纱摄影网站模板

    永恒之约婚纱摄影网站模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。
    • 外部仅引入了 Google Fonts 字体库,无图标库依赖,确保极致轻量且加载迅速。
    • 设计风格以 浪漫优雅 为主,采用金色系配色方案 (#d4af37),注重婚纱摄影行业特色与用户体验,支持多档响应式断点适配,适合婚纱摄影工作室、婚礼跟拍服务、个人摄影师作品集等场景。
    • 模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。
  • 绿野农业网站响应式模板

    绿野农业网站响应式模板

    • 本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。
    • 外部仅引入了 Google Fonts 字体库,使用 Emoji 表情符号替代图标库,确保极致轻量且加载迅速。
    • 设计风格以 自然生态 为主,采用绿色系配色方案 (#4caf50),注重农业行业特色与用户体验,支持多档响应式断点适配,适合农业企业官网、农产品展示页、农场落地页等场景。
    • 模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。
  • 现代商务科技-响应式官网模板

    现代商务科技-响应式官网模板

    本模板采用纯原生技术开发,基于 HTML5 + CSS3 + JavaScript 构建,无任何框架依赖,结构清晰、易于修改。

    外部仅引入了 Google Fonts 字体库和 Font Awesome 6.4.0 图标库,确保轻量且功能完整。

    设计风格以 现代商务科技 为主,采用蓝紫色渐变配色方案,注重排版层次与交互体验,支持五档响应式断点适配,适合企业官网、产品展示页、服务落地页等场景。

    模板完全免费下载,欢迎使用!如您喜欢,可直接下载并用于您的项目。