spring boot itext7的生成一个pdf(hello,world),并且相关一些简单的使用方法及相关说明

1、我们经常会碰到生成Pdf的场景,比如说有很多题目,又比如说来个质检的报告,我们都需要导出为pdf,那这种情况有二种方法,一种是通过报表来实现,一种就是通过itext来生成。一般我们会通过报表来直接导出pdf。

2、下面我们通过itext7来生成一个pdf:

复制代码
<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext7-core</artifactId>
			<version>7.2.5</version>
			<type>pom</type>
		</dependency>

3、创建表:

复制代码
float[] colWidths = new float[] { 50, 50 };

			Table table = new Table(UnitValue.createPercentArray(colWidths), true);
			doc.add(table);

4、使用canvas

复制代码
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle[] columns = { new Rectangle(30, 130, 15, 100),
new Rectangle(60, 130, 15, 100), }; // 几个Rectangle对应几个位置
String[] textList = { "第一行", "第二行"};
for (int i = 0; i < columns.length; i++) {
				pdfCanvas.rectangle(columns[i]);
				pdfCanvas.stroke();
				Canvas canvas = new Canvas(pdfCanvas, columns[i]);
				Paragraph p = new Paragraph(textList[i]).setFont(font).setBold().setFontSize(8)
						.setVerticalAlignment(VerticalAlignment.TOP).setHorizontalAlignment(HorizontalAlignment.CENTER)
						.setTextAlignment(TextAlignment.CENTER); // Bold为设置粗体
				p.setBorder(Border.NO_BORDER);
				canvas.add(p);
				canvas.flush();
				canvas.close();
			}

5、背景图的使用及图片的创建:

复制代码
File bgFile = ResourceUtils.getFile("classpath:img/bg.png");
			PdfImageXObject xObject = new PdfImageXObject(ImageDataFactory.create(bgFile.getAbsolutePath()));
		
PdfImageXObject xObject = new PdfImageXObject(ImageDataFactory.create(bgFile.getAbsolutePath())).put(
					PdfName.BBox, new PdfArray(new Rectangle(0, 0, rect.getWidth() / 2, rect.getHeight())));
			BackgroundImage backgroundImage = new BackgroundImage.Builder().setImage(xObject)
					.setBackgroundRepeat(new BackgroundRepeat(BackgroundRepeatValue.NO_REPEAT)).build();


//图片的创建
			Image image = new Image(ImageDataFactory.create(bgFile.getAbsolutePath()));	

图片的目录结构见下面:

6、生成一个helloworld

复制代码
@SuppressWarnings("resource")
	@RequestMapping(path = "/test", method = RequestMethod.GET)
	public void TestHello(HttpServletRequest req) {
		String rootPath = req.getSession().getServletContext().getRealPath("/");
		File logDir = new File(rootPath);
		if (!logDir.exists()) {
			logDir.mkdirs();
		}
		String outFileName = rootPath + "test.pdf";
		System.out.println(outFileName);
		PdfDocument pdfDocument;
		try {
			pdfDocument = new PdfDocument(new PdfWriter(new FileOutputStream(outFileName)));
			new Document(pdfDocument).add(new Paragraph("hello,world!"));
			pdfDocument.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

7、简要的说明:

从以上的概念我们就知道了,为什么还要new Document(pdfDocument),只有这样才可以来使用API,进行一些操作,比如增加Table,Image等。

8、还有一点比较特别的:

x,y,width,height,这里面的y是跟html中css不一样的。要从下面bottom开始。

9、官方example: Examples

相关推荐
张彦峰ZYF5 小时前
从“全量 OCR”到按页智能路由:pdf-inspector 与企业 PDF 解析架构的工程化重构
人工智能·pdf·ocr·ai agent·pdf-inspector
SamChan907 小时前
Python批量处理PDF踩坑实录:中文编码、字体内嵌、多栏排版与内存占用
python·单片机·ai·pdf·机器翻译
一念春风9 小时前
PDF浏览器(WPF C# )
pdf
麻花地1 天前
MinerU 文档解析全指南:从 magic-pdf 到 3.4.5,PDF→Markdown 开源利器深度实战
pdf·开源
2601_967760781 天前
PDF 转图片再转回总翻车?2026 国内免费实测
pdf
zhlx28351 天前
小初高教材 PDF 批量获取|中小学电子课本下载器,支持批量下载带书签 PDF 教材[Windows]
pdf
张某布响丸辣1 天前
Node 16 下用 pdfjs + @napi-rs/canvas 把中文 PDF 渲染成图片
pdf·node·字体映射
weixin_493503672 天前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式
、如果2 天前
PDF图片文字提取零依赖方案:pymupdf+AI视觉实战
人工智能·数据分析·pdf·图片提取·文字提取·skills
SamChan902 天前
PDF翻译后的格式完整性校验:用Python自动比对译文与原文档的表格与段落结构
开发语言·python·ai·pdf·机器翻译