在Spring Boot应用程序中生成PDF文件,可以通过以下几种方式实现:
一、使用PDFBox库:
PDFBox是一个开源的Java库,用于处理PDF文档。它支持创建、读取和修改PDF文件。在Spring Boot应用程序中,可以通过PDFBox库来生成PDF文件。具体实现包括创建一个PDDocument对象,添加页面,设置页面内容流,设置字体和大小,显示文本,最后保存并关闭文档。
1、添加依赖:
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency>
2、使用PDFBox API来创建、读取、编辑PDF文件。
以下是一个简单的例子,展示如何使用PDFBox创建一个PDF文件并添加一些文本:
importorg.apache.pdfbox.pdmodel.PDDocument;importorg.apache.pdfbox.pdmodel.PDPage;importorg.apache.pdfbox.pdmodel.PDPageContentStream;importorg.apache.pdfbox.pdmodel.font.PDType1Font;importjava.io.IOException;publicclassPDFBoxExample{publicstaticvoidmain(String[] args){try{// 创建一个PDF文档PDDocument document =newPDDocument();// 创建一页PDPage page =newPDPage();
document.addPage(page);// 创建一个内容流PDPageContentStream contentStream =newPDPageContentStream(document, page);// 设置字体
contentStream.setFont(PDType1Font.HELVETICA_BOLD);// 将文本添加到PDF页面
contentStream.drawString("PDFBox! This is a PDF document.");// 关闭内容流
contentStream.close();// 保存文档
document.save("PDFBox.pdf");// 关闭文档
document.close();}catch(IOException e){
e.printStackTrace();}}}
二、使用ReportLab库:
ReportLab是一个开源的PDF生成库,支持多种编程语言,包括Java和Python。在Spring Boot应用程序中,可以通过集成ReportLab库来实现PDF的生成。这需要在项目的pom.xml文件中添加ReportLab依赖。
1、添加依赖:
<dependency><groupId>com.reportlab</groupId><artifactId>reportlab</artifactId><version>4.5.3</version></dependency>
2、创建一个服务来生成 PDF
importcom.lowagie.text.Document;importcom.lowagie.text.DocumentException;importcom.lowagie.text.Paragraph;importcom.lowagie.text.pdf.PdfWriter;importorg.springframework.stereotype.Service;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;@ServicepublicclassPdfGenerationService{publicvoidgeneratePdf(String filePath)throwsDocumentException,FileNotFoundException{Document document =newDocument();PdfWriter.getInstance(document,newFileOutputStream(filePath));
document.open();
document.add(newParagraph("Hello, ReportLab!"));
document.close();}}
3、在一个控制器中调用服务生成 PDF
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importjava.io.FileNotFoundException;importjava.io.IOException;@RestControllerpublicclassPdfController{@AutowiredprivatePdfGenerationService pdfGenerationService;@GetMapping("/generatePdf")publicStringgeneratePdf(){try{
pdfGenerationService.generatePdf("output.pdf");return"PDF generated successfully";}catch(FileNotFoundException|DocumentException e){
e.printStackTrace();return"Error generating PDF";}}}
三、使用iText库:
iText是一个流行的PDF处理库,支持创建、编辑和提取PDF文件的内容。在Spring Boot中,可以通过集成iText库来生成PDF文件。这需要在pom.xml文件中添加iText依赖,并编写代码来生成PDF文件,例如创建一个Document对象,添加内容,然后保存为PDF文件。
1、添加依赖:
<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.9</version></dependency>
2、创建一个服务来生成 PDF
importcom.itextpdf.kernel.pdf.*;importcom.itextpdf.layout.*;importcom.itextpdf.layout.element.Paragraph;importorg.springframework.stereotype.Service;importjava.io.IOException;@ServicepublicclassPdfService{publicvoidgeneratePdf(String dest)throwsIOException{// Initialize PDF writerPdfWriter writer =newPdfWriter(dest);// Initialize PDF documentPdfDocument pdf =newPdfDocument(writer);// Initialize documentDocument document =newDocument(pdf);// Add content
document.add(newParagraph("Hello, Spring Boot and iText7!"));// Close document
document.close();System.out.println("PDF created successfully!");}}
3、创建一个控制器来调用服务生成 PDF
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importjava.io.IOException;@RestControllerpublicclassPdfController{@AutowiredprivatePdfService pdfService;@GetMapping("/generatePdf")publicStringgeneratePdf(){try{
pdfService.generatePdf("target/test.pdf");return"PDF generated";}catch(IOException e){
e.printStackTrace();return"Error generating PDF";}}}
四、使用动态HTML转换:
先创建一个动态HTML文件,然后使用HTML转PDF的工具或库将其转换为PDF。这种方法适用于需要从HTML内容生成PDF的情况。可以在Spring Boot应用程序中实现这种转换,例如通过将HTML内容保存为文件,然后使用外部工具或库将其转换为PDF。
在Spring Boot中,可以使用OpenPDF库(一个开源的iText分支)来动态生成PDF文件。
1、添加依赖:
<dependency><groupId>com.openhtmltopdf</groupId><artifactId>openhtmltopdf-core</artifactId><version>1.0.10</version></dependency>
2、创建一个服务来生成PDF
importcom.openhtmltopdf.pdfboxout.PdfRendererBuilder;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Paths;@ServicepublicclassPdfService{publicbyte[]generatePdfFromHtml(String htmlContent)throwsIOException{ByteArrayOutputStream outputStream =newByteArrayOutputStream();PdfRendererBuilder builder =newPdfRendererBuilder();
builder.useFastMode();
builder.withHtmlContent(htmlContent,null);
builder.toStream(outputStream);
builder.run();return outputStream.toByteArray();}}
3、创建一个控制器来提供PDF文件的下载
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.HttpHeaders;importorg.springframework.http.MediaType;importorg.springframework.http.ResponseEntity;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importjava.io.IOException;@Controller@RequestMapping("/pdf")publicclassPdfController{@AutowiredprivatePdfService pdfService;@GetMappingpublicResponseEntity<byte[]>generatePdf()throwsIOException{String htmlContent ="<html><body><h1>Hello, World!</h1></body></html>";byte[] pdfBytes = pdfService.generatePdfFromHtml(htmlContent);HttpHeaders headers =newHttpHeaders();
headers.setContentType(MediaType.APPLICATION_PDF);
headers.set("Content-Disposition","attachment; filename=example.pdf");returnnewResponseEntity<>(pdfBytes, headers,org.springframework.http.HttpStatus.CREATED);}}
五、使用itextpdf根据模板动态生成:
这种方法适用于需要根据特定模板生成PDF的情况。通过集成itextpdf库,可以根据合同模板动态生成包含合同标签、合同方以及签约时间等信息的PDF文件。
1、添加依赖:
<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.9</version><type>pom</type></dependency>
2、创建 PDF 文档
创建一个 PDF 文档并添加一些内容:
importcom.itextpdf.kernel.pdf.*;importcom.itextpdf.layout.*;importcom.itextpdf.layout.element.Paragraph;publicvoidcreatePdf(String dest)throwsException{//Initialize PDF writerPdfWriter writer =newPdfWriter(dest);//Initialize PDF documentPdfDocument pdf =newPdfDocument(writer);//Initialize documentDocument document =newDocument(pdf);//Add paragraph to the document
document.add(newParagraph("Hello, World!"));//Close document
document.close();System.out.println("PDF Created");}
3、调用 createPdf 方法
在你的 Spring Boot 应用中,你可以在任何需要的地方调用 createPdf 方法来创建 PDF 文档。
本文转载自: https://blog.csdn.net/qq_25987725/article/details/140730100
版权归原作者 cesske 所有, 如有侵权,请联系我们删除。
版权归原作者 cesske 所有, 如有侵权,请联系我们删除。