Java 導出pdf 寫出demo 1、需要設置自定義頁眉和文字 2、可以插入表格 3、可以插入圖片

以下是一個使用 iText 7 庫實現 PDF 導出的 Java 示例,包含自定義頁眉、文字、表格和圖片功能:

添加 Maven 依賴

<dependencies><!-- iText 7 Core --><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.5</version></dependency><!-- PDF Layout 擴展 --><dependency><groupId>com.itextpdf</groupId><artifactId>layout</artifactId><version>7.2.5</version></dependency>
</dependencies>

Java 示例代碼

import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;import java.io.File;
import java.io.IOException;public class PdfExportDemo {public static void main(String[] args) throws IOException {// 1. 創建PDF文檔String dest = "demo.pdf";PdfWriter writer = new PdfWriter(dest);PdfDocument pdf = new PdfDocument(writer);Document document = new Document(pdf);// 添加自定義頁眉處理器HeaderEventHandler handler = new HeaderEventHandler();pdf.addEventHandler(PdfDocumentEvent.START_PAGE, handler);// 2. 添加文字內容PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");Paragraph title = new Paragraph("PDF導出示例").setFont(font).setFontSize(20).setBold().setTextAlignment(TextAlignment.CENTER);document.add(title);Paragraph content = new Paragraph("這是一個使用iText 7創建的PDF文檔示例,展示了如何添加自定義頁眉、文字、表格和圖片。").setFont(font).setFontSize(12).setMarginTop(20);document.add(content);// 3. 添加表格Table table = new Table(UnitValue.createPercentArray(new float[]{2, 3, 2})).setWidth(UnitValue.createPercentValue(80)).setHorizontalAlignment(HorizontalAlignment.CENTER).setMarginTop(20);// 表頭table.addHeaderCell(createCell("ID", true, font));table.addHeaderCell(createCell("產品名稱", true, font));table.addHeaderCell(createCell("價格", true, font));// 表格內容table.addCell(createCell("001", false, font));table.addCell(createCell("Java編程指南", false, font));table.addCell(createCell("¥89.00", false, font));table.addCell(createCell("002", false, font));table.addCell(createCell("PDF生成教程", false, font));table.addCell(createCell("¥59.00", false, font));document.add(table);// 4. 添加圖片String imagePath = "logo.png"; // 替換為實際圖片路徑if (new File(imagePath).exists()) {Image img = new Image(ImageDataFactory.create(imagePath)).setWidth(150).setHorizontalAlignment(HorizontalAlignment.CENTER).setMarginTop(30);document.add(img);} else {System.out.println("圖片文件不存在: " + imagePath);}// 5. 關閉文檔document.close();System.out.println("PDF生成成功: " + dest);}// 創建表格單元格輔助方法private static Cell createCell(String text, boolean isHeader, PdfFont font) {Cell cell = new Cell().add(new Paragraph(text).setFont(font));if (isHeader) {cell.setBackgroundColor(ColorConstants.LIGHT_GRAY);cell.setBold();}cell.setBorder(new SolidBorder(1));cell.setPadding(5);return cell;}// 自定義頁眉處理器static class HeaderEventHandler implements IEventHandler {@Overridepublic void handleEvent(Event event) {PdfDocumentEvent docEvent = (PdfDocumentEvent) event;PdfPage page = docEvent.getPage();Rectangle pageSize = page.getPageSize();PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), docEvent.getDocument());Canvas canvas = new Canvas(pdfCanvas, pageSize);// 繪制頁眉文本Paragraph header = new Paragraph("公司機密文檔 - 2023年度報告").setFontSize(10).setFontColor(ColorConstants.DARK_GRAY).setTextAlignment(TextAlignment.CENTER).setFixedPosition(0, pageSize.getTop() - 30, pageSize.getWidth());// 繪制頁眉分隔線LineSeparator line = new LineSeparator(new SolidBorder(0.5f));line.setWidth(pageSize.getWidth() - 60);line.setMarginTop(5);line.setHorizontalAlignment(HorizontalAlignment.CENTER);canvas.add(header);canvas.add(line);canvas.close();}}
}

功能說明

  1. 自定義頁眉

    • 使用 HeaderEventHandler 實現在每頁頂部添加頁眉
    • 包含居中文本和分隔線
    • 通過 PdfDocumentEvent.START_PAGE 事件觸發
  2. 文字內容

    • 添加標題和正文段落
    • 支持中文字體(使用 STSong-Light
    • 設置字體大小、加粗、對齊方式等樣式
  3. 表格功能

    • 創建3列表格(ID、產品名稱、價格)
    • 設置表頭背景色和單元格邊框
    • 控制表格寬度和頁面居中
  4. 圖片插入

    • 從文件系統加載圖片(需替換實際路徑)
    • 設置圖片寬度和居中顯示
    • 添加錯誤處理(文件不存在時提示)

使用說明

  1. 替換圖片路徑:

    String imagePath = "your_image_path.png"; // 修改為實際圖片路徑
    
  2. 調整中文字體:

    • 如需使用其他中文字體,需引入字體文件:
    PdfFont font = PdfFontFactory.createFont("font_path.ttf", PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
    
  3. 運行程序:

    • 執行后生成 demo.pdf 文件
    • 完整功能包括:頁眉、標題、正文、表格和圖片

常見問題解決

  1. 中文顯示問題

    • 確保使用支持中文的字體
    • 或添加額外中文字體依賴:
    <dependency><groupId>com.itextpdf</groupId><artifactId>font-asian</artifactId><version>7.2.5</version>
    </dependency>
    
  2. 圖片路徑錯誤

    • 使用絕對路徑或確保相對路徑正確
    • 添加文件存在檢查邏輯
  3. 頁眉位置調整

    • 修改 setFixedPosition 的 Y 坐標值:
    .setFixedPosition(0, pageSize.getTop() - 40, pageSize.getWidth()); // 調整-40值
    

這個示例提供了完整的 PDF 導出功能,可根據實際需求調整樣式和內容布局。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88280.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88280.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88280.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ntfs!LfsReadRestart函數分析得到Ntfs!LFS_RESTART_PAGE_HEADER

第一部分&#xff1a;0: kd> p Ntfs!LfsPinOrMapData0x8c: f71797f6 ff15a40016f7 call dword ptr [Ntfs!_imp__CcPinRead (f71600a4)] 0: kd> t nt!CcPinRead: 80bf9a5a 6a2c push 2Ch 0: kd> kc# 00 nt!CcPinRead 01 Ntfs!LfsPinOrMapData 02 N…

skywalking-agent-docker鏡像

FROM centos:7.9.2009 USER root# 定義 Arthas 目錄環境變量 ENV ARTHAS_HOME/opt/arthas# 更改 YUM 源并清理緩存 RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak && \rm -rf /etc/yum.repos.d/* && \curl -o /etc/yum.rep…

數據庫開發運維的集成:彌合開發與運維之間的鴻溝

在傳統的軟件開發工作流程中&#xff0c;數據庫變更往往是事后才考慮的問題。應用程序代碼遵循定義明確的開發運維實踐&#xff0c;包括版本控制、自動測試和持續部署&#xff0c;而數據庫變更則經常是由數據庫管理員手動執行的高風險操作。這種脫節造成了瓶頸&#xff0c;帶來…

PiscTrace應用:從 YOLO-Pose 到深蹲與引體向上計數:實時健身動作分析與實現

隨著健身行業的發展&#xff0c;越來越多的智能應用涌現&#xff0c;用于幫助健身者更好地記錄和分析運動情況。特別是在體能訓練中&#xff0c;俯臥撐和引體向上是兩個非常常見的動作&#xff0c;它們通常用來鍛煉上半身力量和耐力。為了使訓練更加科學和高效&#xff0c;實時…

【unity】webCanvas.enabled = false;和webCanvas.gameObject.SetActive(false);的優缺點比較

在 Unity 中&#xff0c;webCanvas.gameObject.SetActive(false) 和 webCanvas.enabled false 是兩種不同的隱藏 UI 的方式&#xff0c;它們的核心區別在于作用范圍和對組件狀態的影響。理解這些差異能幫助你避免初始化失敗、性能問題和邏輯錯誤。 1核心區別 gameObject.SetAc…

深入探索 pnpm:高效磁盤利用與靈活的包管理解決方案

引言 在現代 JavaScript 開發中&#xff0c;依賴管理效率直接影響開發體驗。傳統工具如 npm 和 yarn 在大型項目中常面臨磁盤冗余和性能瓶頸。pnpm&#xff08;Performant npm&#xff09;通過創新的硬鏈接和符號鏈接機制&#xff0c;解決了這些痛點。本文將深入解析 pnpm 的核…

Hive MetaStore的實現和優化

在大數據領域&#xff0c;數據管理與存儲至關重要&#xff0c;Hive MetaStore&#xff08;HMS&#xff09;作為 Hive 數據倉庫的核心組件&#xff0c;承擔著元數據管理的關鍵職責。隨著數據規模不斷膨脹&#xff0c;其性能與穩定性面臨挑戰。本文將深入剖析 HMS 的實現機制&…

一文讀懂動態規劃:多種經典問題和思路

一、動態規劃算法的思想與核心概念框架 1. 動態規劃的基本思想 動態規劃&#xff08;Dynamic Programming, DP&#xff09;是一種通過將復雜問題分解為重疊子問題&#xff0c;并利用子問題的解來高效解決原問題的方法。其核心思想是避免重復計算&#xff0c;通過存儲中間結果&a…

阿幸課堂隨機點名

代碼功能 這個是一個HTML網頁端&#xff0c;簡單來說就是可以雙擊之后運行進行點名。 當然&#xff0c;不局限于課堂點名 代碼功能 Excel 導入增強&#xff1a; 增加了列選擇器&#xff0c;可以指定從哪一列讀取學生姓名 增加了起始行選擇器&#xff0c;可以跳過標題行或其…

LeetCode 560: 和為K的子數組

題目描述給定一個整數數組 nums 和一個整數 k&#xff0c;請統計并返回該數組中和為 k 的連續子數組的個數。示例 1&#xff1a;輸入&#xff1a;nums [1,1,1], k 2 輸出&#xff1a;2示例 2&#xff1a;輸入&#xff1a;nums [1,2,3], k 3 輸出&#xff1a;2提示&#xff…

微軟官方C++構建工具:歷史演變、核心組件與現代實踐指南

引言&#xff1a;C構建工具的戰略意義 在Windows生態系統中&#xff0c;??微軟C構建工具??&#xff08;Microsoft C Build Tools&#xff09;構成了數百萬開發者和應用程序的技術基石。從早期的MS-DOS命令行工具到如今支持??跨平臺開發??的現代化工具鏈&#xff0c;微…

探索Cocos_CoilTheRope:一款創新的游戲引擎擴展項目

探索Cocos_CoilTheRope&#xff1a;一款創新的游戲引擎擴展項目 去發現同類優質開源項目:https://gitcode.com/ 是一個基于Cocos2d-x游戲引擎的擴展庫&#xff0c;旨在為開發者提供一種簡便的方法來實現繩子纏繞和物理交互效果。該項目由DreamLXW開發并維護&#xff0c;為游戲…

爬蟲-正則表達式

在線正則表達式測試OSCHINA.NET在線工具,ostools為開發設計人員提供在線工具&#xff0c;提供jsbin在線 CSS、JS 調試&#xff0c;在線 Java API文檔,在線 PHP API文檔,在線 Node.js API文檔,Less CSS編譯器&#xff0c;MarkDown編譯器等其他在線工具https://tool.oschina.net/…

【BTC】數據結構

目錄 那比特幣區塊鏈的組織形式到底是以鏈表的形式&#xff0c;還是樹的形式呢&#xff1f; 區塊頭和區塊體與默克爾樹的關系 默克爾證明詳解 區塊鏈和鏈表最大的區別就是區塊鏈用哈希指針代替了普通指針。 鏈表的指針就是指向一個結構體在內存中的地址&#xff0c;而哈希指…

飛算 JavaAI:讓 Java 開發效率飆升的智能助手,日常開發全場景應用指南

飛算 JavaAI&#xff1a;讓 Java 開發效率飆升的智能助手 &#xff0c;日常開發全場景應用指南 在 Java 開發的日常工作中&#xff0c;開發者常常面臨各類重復性勞動與邏輯復雜度挑戰。飛算 JavaAI 作為專注于 Java 領域的智能開發助手&#xff0c;能夠覆蓋從代碼生成到項目維護…

8.2 文檔預處理模塊(二)

一、從0開始&#xff1a;簡易RAG實現 在構建更復雜的 RAG 架構之前&#xff0c;我們先從最基礎的版本入手。整個流程可以分為以下幾個關鍵步驟&#xff1a; 1.數據導入&#xff1a;加載并預處理原始文本數據&#xff0c;為后續處理做好準備。 2.文本分塊&#xff1a;將長文本…

【系統與工具】Linux——Linux簡介、安裝、簡單使用

計算機概論與Linux簡介 計算機概論Linux介紹與版本 Linux的規劃與安裝 Linux與硬件平臺密切相關規劃硬件與Linux安裝 主機規劃與磁盤分區安裝CentOS、多重引導 簡單使用 幫助手冊文本編輯器關機 0. Linux介紹與版本 操作系統&#xff08;Linux&#xff09;&#xff1a;高效…

從視頻數據到數字孿生:如何構建虛擬與現實的橋梁?

概述 視頻數據與三維場景融合渲染技術通過將動態視頻與靜態三維模型結合&#xff0c;利用GPU加速、WebGL渲染、數字孿生等技術&#xff0c;實現虛擬與現實的交互式融合。該技術廣泛應用于智慧城市、工業監控、虛擬現實、游戲特效等領域&#xff0c;能夠提升場景的直觀性和用戶沉…

【筆記】開源 AI Agent 項目 V1 版本 [新版] 部署 日志

kortix-ai/suna at v1 一、最新版本號 V1 二、部署截圖 本地開發環境仍然依賴于 Poetry 環境&#xff1a; &#xff08;Python>3.11,<3.13&#xff09; 創建本地 Poetry 虛擬環境 Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自…

NumPy-梯度與導數計算詳解

NumPy-梯度與導數計算詳解一、梯度與導數的基本概念1. 導數的定義2. 梯度的定義二、NumPy中的梯度計算函數&#xff1a;np.gradient()1. 函數語法2. 一維數組的梯度計算3. 多維數組的梯度計算三、基于梯度的導數近似方法1. 前向差分2. 中心差分四、實際應用場景1. 函數優化2. 數…