java生成pdf文件

1.依賴

    <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.4</version><type>pom</type></dependency>

2.代碼

package org.example;import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.io.source.ByteArrayOutputStream;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.Style;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.properties.BorderRadius;
import com.itextpdf.layout.properties.HorizontalAlignment;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;public class App {public static void setCell1(Table table,int row,String name, float font,boolean color,boolean bold){Style style1 = new Style().setPaddingLeft(2).setPaddingTop(0);Paragraph gg = new Paragraph(name).addStyle(style1).setFontSize(font);if(bold){gg.setBold();}if(color){gg.setBold().setFontColor(new DeviceRgb(0, 0, 255));}table.addCell(new Cell(row,2).add(gg).setBorder(Border.NO_BORDER));}public static void main(String[] args) throws Exception{String name="a"+".pdf";PdfDocument pdfDocument = new PdfDocument(new PdfWriter(name));Document document = new Document(pdfDocument);float[] col = {133, 160,107};Table table = new Table(col).setHorizontalAlignment(HorizontalAlignment.CENTER).setWidth(350).setBorder(new SolidBorder(1)).setFont(PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H"));// 設置左邊圖片頭像ImageData imageData ;String url="C:\\Users\\Administrator\\Desktop\\1.PNG";try {imageData= ImageDataFactory.create(url);} catch (Exception e) {File file = new File(url);BufferedImage read = ImageIO.read(file);ByteArrayOutputStream baStream = new ByteArrayOutputStream();ImageIO.write(read, "jpg", baStream);imageData = ImageDataFactory.create(baStream.toByteArray());}Image image = new Image(imageData);Cell cell = new Cell(4, 1);cell.setPaddingLeft(10);image.setWidth(96);image.setHeight(96);image.setBorderRadius(new BorderRadius(5));cell.add(image);cell.setBorder(Border.NO_BORDER);table.addCell(cell);//String mName="材料名稱:水泥";String mNo="識別編號:sbhlb1025";String mUnit="箱:包:袋(1:10:100)";String mType="材料分類:養護材料";setCell1(table,1,mName,16,false,true);setCell1(table,1,mNo,11,false,false);setCell1(table,1,mUnit,11,true,false);setCell1(table,1,mType,11,false,false);String spec="尺寸:L 4320mm * W 310mm * D 85mm * T 4mm";setCell1(table,1,spec,11,false,false);Image image1 = new Image(ImageDataFactory.create("C:\\Users\\Administrator\\Desktop\\1.PNG"));Cell cell1 = new Cell(1, 1);cell1.setHeight(65);cell1.setWidth(65);image1.setWidth(60);image1.setHeight(60);image1.setMarginRight(5);image1.setMarginBottom(5);image1.setHorizontalAlignment(HorizontalAlignment.RIGHT);cell1.add(image1);cell1.setBorder(Border.NO_BORDER);table.addCell(cell1);int total=4;// 把元素添加到文檔里,每頁展示三個卡片信息,超過三個另起一頁for (int i = 0; i < total; i++) {document.add(table);document.add(new Paragraph(" "));if (i > 0 && (i % 3 == 2)) {document.add(new AreaBreak());}}//刪除最后一頁的空白頁if(total%3==0){int lastPage = document.getPdfDocument().getNumberOfPages();document.getPdfDocument().removePage(lastPage);}document.close();}
}

3.效果

4.說明

代碼中有兩處使用圖片路徑,注意切換成對應的路徑。

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

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

相關文章

macOS掛載iOS應用沙盒文件夾

背景 工具 libimobiledevice: linux&#xff0c;macOS等與ios設備通信是的工具 macFUSE 是 macOS 文件系統擴展的“引擎”&#xff0c;支持開發者創建各類虛擬文件系統。 iFUSE 是專為 iOS 設備設計的“連接器”&#xff0c;需依賴 macFUSE 實現功能。 若需訪問 iPhone/iP…

嵌入式軟件面經(四)Q:請說明在 ILP32、LP64 與 LLP64 三種數據模型下,常見基本類型及指針的 sizeof 值差異,并簡要解釋其原因

從事嵌入式開發深入理解 ILP32、LP64、LLP64 三種主流數據模型及其在平臺上的實際表現&#xff0c;可以幫助我們避免諸如類型越界、結構錯位、指針截斷等致命錯誤。 一、何為數據模型&#xff1f;為何重要&#xff1f; 數據模型&#xff08;Data Model&#xff09;是指在某一編…

計算機組成原理與體系結構-實驗二 ALU(Proteus 8.15)

目錄 一、實驗目的 二、實驗內容 三、實驗器件 四、實驗原理 五、實驗步驟 六、思考題 一、實驗目的 1、了解算術邏輯運算器&#xff08;74LS181&#xff09;的組成和功能。 2、掌握基本算術和邏輯運算的實現方法。 二、實驗內容 設計算數邏輯運算器系統的通路&#x…

ubuntu下免sudo執行docker

前言 在ubuntu中&#xff0c;默認是無法使用root賬號的&#xff0c;安裝完docker后&#xff0c;不可避免的要使用sudo來執行docker命令&#xff0c;這就讓運維變得很麻煩 避免sudo # 添加當前用戶到 docker 組 sudo usermod -aG docker $USER# 刷新組權限 newgrp docker# 驗…

微處理原理與應用篇---STM32寄存器控制GPIO

在 ARM 架構下使用 C 語言控制 32 位寄存器實現 GPIO 操作&#xff0c;需結合芯片手冊進行寄存器映射和位操作。以下以 STM32F103&#xff08;Cortex-M3 內核&#xff09;為例&#xff0c;詳細介紹實現方法&#xff1a; 一、STM32F103 GPIO 控制&#xff08;標準外設庫&#x…

基于OPUS-MT模型的中譯英程序實現

這是我的kaggle賬號名“fuliuqin” 代碼參考如下&#xff1a; nlp.paperflq | KaggleExplore and run machine learning code with Kaggle Notebooks | Using data from [Private Datasource]https://www.kaggle.com/code/fuliuqin/nlp-paperflq 目錄 緒論 研究背景與意義 研究…

炸雞派-定時器基礎例程

定時器簡介 基本定時器&#xff0c;計數中斷、產生DMA請求。 通用定時器&#xff0c;PWM輸出、輸入捕獲、脈沖計數。 高級定時器&#xff0c;輸出比較、互補輸出帶死區控制、PWM輸入。 中心對齊的計數模式可以生成對稱的PWM波形信號。計數可以先增后減。 這種模式下&#xff…

利用不坑盒子的Copilot,快速排值班表

馬上放暑假了&#xff0c;有多少人拼命排值班表的&#xff1f; 今天用我親身制作值班表的一些Excel操作&#xff0c;給大家分享一些在Excel中的小技巧&#xff0c;需要的及時收藏&#xff0c;有一天用得上~ 值班表全貌 先給大家看看我制作的值班表的樣子&#xff0c;應該大家…

Linux 面試知識(附常見命令)

目錄結構與重要文件 Linux 中一切皆文件&#xff0c;掌握目錄結構有助于理解系統管理與配置。 目錄說明/根目錄&#xff0c;所有文件起點/bin基本命令的可執行文件&#xff0c;如 ls, cp/sbin系統管理員用的命令&#xff0c;如 shutdown/etc配置文件目錄&#xff0c;如 /etc/…

Lua 安裝使用教程

一、Lua 簡介 Lua 是一門輕量級、高性能的腳本語言&#xff0c;具有簡潔語法、嵌入性強、可擴展性高等特點。廣泛應用于游戲開發&#xff08;如 Roblox、World of Warcraft&#xff09;、嵌入式開發、配置腳本、Nginx 擴展&#xff08;OpenResty&#xff09;等領域。 二、Lua …

SPAD像素概念理解

SPAD(Single Photon Avalanche Diode,單光子雪崩二極管)像素是一種能夠檢測單個光子的超靈敏光電探測器,其核心原理是通過雪崩倍增效應將單個光子產生的微弱電流信號放大到可觀測水平。 一、工作原理 雪崩倍增效應 當SPAD反向偏壓超過其擊穿電壓時,進入蓋革模式(Geiger M…

SSSSS

#include <iostream> void LineOf(bool** n1, bool** n2, int column, int raw, int* result) { for (int i 0; i < column; i) { int d -1, n -1; // 反向遍歷&#xff0c;找最后一個 true for (int j raw - 1; j > 0; j--) { …

【AI智能體】社交娛樂-智能助教

智能助教是扣子官方提供的教育類智能體模板。助教模板分為學習陪伴和作業批改兩種場景&#xff0c;分別適用于學生角色和教師角色&#xff0c;你可以根據需求選擇對應的模板&#xff0c;并將其改造為其他學科或其他教育階段的智能助教。 模板介紹 在智能學伴/助教的落地過程中…

自動化保護 AWS ECS Fargate 服務:使用 Prisma Cloud 實現容器安全

引言 在云原生時代,容器化技術已成為現代應用部署的標準方式。AWS ECS Fargate 作為一種無服務器容器服務,讓開發者能夠輕松運行容器化應用而無需管理底層基礎設施。然而,隨著容器技術的普及,安全問題也日益突出。本文將介紹如何通過 Python 腳本自動化地為 ECS Fargate 服…

Kafka Controller 元數據解析與故障恢復實戰指南

#作者&#xff1a;張桐瑞 文章目錄 1 生產案例&#xff1a;Controller 選舉在故障恢復中的關鍵作用1.1 問題背景1.2 核心操作原理&#xff1a; 2 Controller 元數據全景&#xff1a;從 ZooKeeper 到內存的數據鏡像2.1元數據核心載體&#xff1a;ControllerContext 類2.2核心元…

《尋北技術的全面剖析與應用前景研究報告》

一、引言 1.1 研究背景與意義 尋北&#xff0c;作為確定地理北極方向的關鍵技術&#xff0c;在眾多領域中扮演著舉足輕重的角色。在軍事領域&#xff0c;精確的尋北對于武器系統的瞄準、導彈的精確制導以及部隊的戰略部署都至關重要。例如&#xff0c;火炮在發射前需要精確尋…

深入比較 Gin 與 Beego:Go Web 框架的兩大選擇

引言 在 Go 語言生態系統中&#xff0c;Gin 和 Beego 是兩個非常受歡迎的 Web 框架。它們各自有著不同的設計理念和目標用戶群體。本文將對這兩個框架進行深入比較&#xff0c;并幫助你理解它們之間的區別&#xff0c;以便根據項目需求做出合適的選擇。 一、Gin 概述 Gin是一…

全新大模型開源,騰訊(int4能打DeepSeek) Vs 谷歌(2GB運行多模態)

大家好&#xff0c;我是 Ai 學習的老章 最近除了阿里 Qwen3 模型更新了圖片生成和處理能力&#xff0c;大家都可以玩轉吉卜力風格 還有幾個最近發布的大模型值得關注 1 是騰訊開源了 80B 混元 A13B 模型&#xff0c;亮點是精度無損的 int4 很能打 2 是谷歌開源的小參數 Gemm…

向量數據庫milvus中文全文檢索取不到數據的處理辦法

?檢查中文分詞配置? Milvus 2.5 支持原生中文全文檢索&#xff0c;但需顯式配置中文分詞器&#xff1a; 創建集合時指定分詞器類型為 chinese python schema.add_field(field_name"text", datatypeDataType.VARCHAR, max_length65535, enable_analyzerTrue, an…

Stable Diffusion 項目實戰落地:從0到1 掌握ControlNet 第一篇 打造光影字形的創意秘技

大家好呀,歡迎來到 AI造字工坊! 在這篇文章中,我們將帶領你走進一個神奇的世界——ControlNet。你可能聽說過它,但可能還沒摸清它的深奧之處。 今天,我們就來揭開它神秘的面紗,輕松帶你玩轉字形設計! 話說回來,相信大家對圖片生成、提示詞、放大操作、抽卡這些基本操…