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();
+ }
+ }
+}
+
+