引入依赖
<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();
}
}
}