引入依赖
<dependencies><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> <!-- 或者使用最新的版本 --></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.24</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version><scope>provided</scope></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> <!-- 检查最新版本 --></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version> <!-- 检查最新版本 --></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>LATEST</version></dependency></dependencies>
</project>
生成多页pdf不同大小的页面
import java.io.FileOutputStream;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;import javax.imageio.ImageIO;public class test01 {public static void main(String[] args) throws Exception {Document document = new Document();String fileName = "./pageSize.pdf";Document doc = new Document(PageSize.A4);PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(fileName));doc.open();PdfContentByte pdfContentByte = writer.getDirectContent();pdfContentByte.getPdfDocument().setPageSize(PageSize.A3);doc.newPage();doc.add(new Paragraph("Hello A3"));pdfContentByte.getPdfDocument().setPageSize(PageSize.A2);doc.newPage();doc.add(new Paragraph("Hello A2"));doc.close();}
}
页面添加图片
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;public class test03 {public static void main(String[] args) throws Exception {try {Image image = Image.getInstance("./files/files-pdf/images_0.png");// 获取图片的原始宽度和高度float originalWidth = image.getWidth();float originalHeight = image.getHeight();Document document = new Document(new Rectangle(originalWidth, originalHeight), 0, 0, 0, 0);PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("./hello2.pdf"));document.open();// 获取PDF页面的宽度和高度Rectangle pageSize = document.getPageSize();float pageWidth = pageSize.getWidth();// 根据页面宽度计算图片的缩放比例float scaleRatio = pageWidth / originalWidth;// 根据缩放比例计算图片的新宽度和高度float newWidth = originalWidth * scaleRatio;float newHeight = originalHeight * scaleRatio;// 设置图片的新宽度和高度,并保持纵横比不变image.scaleToFit(newWidth, newHeight);image.setAlignment(Element.ALIGN_CENTER);document.add(image);// 获取当前页面的直接内容PdfContentByte canvas = pdfWriter.getDirectContent();// 计算文字位置,这里以图片下方10pt为例float textX = 500; // 根据需要调整X坐标float textY = 800;// 设置字体和大小canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 12);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX, textY);canvas.showText("Your Text Here");canvas.endText();canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 18);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX+200, textY+200);canvas.showText("Your Text Here12121212121");canvas.endText();document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
或者
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.pdf.draw.DrawInterface;public class test02 {public static void main(String[] args) throws Exception {try {Image image = Image.getInstance("./files/files-pdf/images_0.png");// 获取图片的原始宽度和高度float originalWidth = image.getWidth();float originalHeight = image.getHeight();Document document = new Document(new Rectangle(originalWidth, originalHeight), 0, 0, 0, 0);PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("./hello2.pdf"));document.open();// 获取PDF页面的宽度和高度Rectangle pageSize = document.getPageSize();float pageWidth = pageSize.getWidth();// 根据页面宽度计算图片的缩放比例float scaleRatio = pageWidth / originalWidth;// 根据缩放比例计算图片的新宽度和高度float newWidth = originalWidth * scaleRatio;float newHeight = originalHeight * scaleRatio;// 设置图片的新宽度和高度,并保持纵横比不变image.scaleToFit(newWidth, newHeight);image.setAlignment(Element.ALIGN_CENTER);document.add(image);// 获取当前页面的直接内容PdfContentByte canvas = pdfWriter.getDirectContent();// 计算文字位置,这里以图片下方10pt为例float textX = 500; // 根据需要调整X坐标float textY = 800;// 设置字体和大小canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 12);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX, textY);canvas.showText("Your Text Here");canvas.endText();canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 18);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX+200, textY+200);canvas.showText("Your Text Here12121212121");canvas.endText();document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}