From 4856d115903afe7ac1225a4e356ced903a385a3d Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Wed, 28 May 2025 16:44:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=B7=A5=E5=85=B7=EF=BC=9APD?= =?UTF-8?q?F=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 +++++ .../aiagent/Service/ToolsService.java | 2 + .../Service/impl/ToolsServiceImpl.java | 7 ++- .../aiagent/controller/ToolController.java | 11 ++++ .../aiagent/tools/PDFGenerationTool.java | 56 +++++++++++++++++++ 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/huangge1199/aiagent/tools/PDFGenerationTool.java diff --git a/pom.xml b/pom.xml index 744e1c0..e3a775e 100644 --- a/pom.xml +++ b/pom.xml @@ -126,6 +126,21 @@ jsoup 1.20.1 + + + com.itextpdf + itext-core + 9.1.0 + pom + + + + com.itextpdf + font-asian + 9.1.0 + test + + diff --git a/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java b/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java index 5e008ec..87f28c7 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java +++ b/src/main/java/com/huangge1199/aiagent/Service/ToolsService.java @@ -24,4 +24,6 @@ public interface ToolsService { String terminalTool(String command); void downloadTool(String url, String name); + + void pdfTool(String name, String context); } diff --git a/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java b/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java index 79d0d46..6f8409f 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java +++ b/src/main/java/com/huangge1199/aiagent/Service/impl/ToolsServiceImpl.java @@ -9,7 +9,6 @@ import org.springframework.ai.ollama.OllamaChatModel; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; /** @@ -80,4 +79,10 @@ public class ToolsServiceImpl implements ToolsService { DownloadTool downloadTool = new DownloadTool(); downloadTool.downloadResource(url, name); } + + @Override + public void pdfTool(String name, String context) { + PDFGenerationTool pdfTool = new PDFGenerationTool(); + pdfTool.generatePDF(name, context); + } } diff --git a/src/main/java/com/huangge1199/aiagent/controller/ToolController.java b/src/main/java/com/huangge1199/aiagent/controller/ToolController.java index ea345cb..a1eb362 100644 --- a/src/main/java/com/huangge1199/aiagent/controller/ToolController.java +++ b/src/main/java/com/huangge1199/aiagent/controller/ToolController.java @@ -97,4 +97,15 @@ public class ToolController { toolsService.downloadTool(url, name); return R.ok(); } + + @PostMapping("/pdfTool") + @Operation(summary = "PDF生成") + public R pdfTool(@RequestBody JSONObject params) { + String context = params.getStr("context"); + String name = params.getStr("name"); + CheckUtils.checkEmpty(context, "内容"); + CheckUtils.checkEmpty(name, "文件名"); + toolsService.pdfTool(name, context); + return R.ok(); + } } diff --git a/src/main/java/com/huangge1199/aiagent/tools/PDFGenerationTool.java b/src/main/java/com/huangge1199/aiagent/tools/PDFGenerationTool.java new file mode 100644 index 0000000..dfddbe0 --- /dev/null +++ b/src/main/java/com/huangge1199/aiagent/tools/PDFGenerationTool.java @@ -0,0 +1,56 @@ +package com.huangge1199.aiagent.tools; + +import cn.hutool.core.io.FileUtil; +import com.itextpdf.kernel.font.PdfFont; +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.element.Paragraph; +import org.springframework.ai.tool.annotation.Tool; +import org.springframework.ai.tool.annotation.ToolParam; + +import java.io.IOException; + +/** + * PDFTool + * + * @author huangge1199 + * @since 2025/5/28 16:23:46 + */ +public class PDFGenerationTool { + + @Tool(description = "Generate a PDF file with given content") + public String generatePDF( + @ToolParam(description = "Name of the file to save the generated PDF") String fileName, + @ToolParam(description = "Content to be included in the PDF") String content) { + String fileDir = FileConstant.FILE_SAVE_DIR + "/pdf"; + String filePath = fileDir + "/" + fileName; + try { + // 创建目录 + FileUtil.mkdir(fileDir); + // 创建 PdfWriter 和 PdfDocument 对象 + try (PdfWriter writer = new PdfWriter(filePath); + PdfDocument pdf = new PdfDocument(writer); + Document document = new Document(pdf)) { + // 自定义字体(需要人工下载字体文件到特定目录) +// String fontPath = Paths.get("src/main/resources/static/fonts/simsun.ttf") +// .toAbsolutePath().toString(); +// PdfFont font = PdfFontFactory.createFont(fontPath, +// PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED); + // 使用内置中文字体 +// PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H"); +// document.setFont(font); + // 创建段落 + Paragraph paragraph = new Paragraph(content); + // 添加段落并关闭文档 + document.add(paragraph); + } + return "PDF generated successfully to: " + filePath; + } catch (IOException e) { + return "Error generating PDF: " + e.getMessage(); + } + } +} + +