|
@@ -5,6 +5,7 @@ import com.ruoyi.framework.config.RuoYiConfig;
|
|
|
import com.ruoyi.framework.web.domain.server.Sys;
|
|
|
import freemarker.template.Configuration;
|
|
|
import freemarker.template.Template;
|
|
|
+import org.apache.commons.lang3.StringEscapeUtils;
|
|
|
import org.xhtmlrenderer.pdf.ITextRenderer;
|
|
|
|
|
|
|
|
@@ -44,6 +45,8 @@ public class PDFTemplateUtil {
|
|
|
Template template = cfg.getTemplate(templateFileName, "UTF-8");
|
|
|
StringWriter writer = new StringWriter();
|
|
|
|
|
|
+ // 对数据进行转义,防止非法字符
|
|
|
+// Map<String, Object> sanitizedMap = sanitizeMap(map);
|
|
|
// 将数据输出到html中
|
|
|
template.process(map, writer);
|
|
|
writer.flush();
|
|
@@ -72,6 +75,45 @@ public class PDFTemplateUtil {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 对输入的数据进行转义处理,避免非法字符
|
|
|
+ private static Map<String, Object> sanitizeMap(Map<String, Object> map) {
|
|
|
+ // 遍历 map 对数据进行处理
|
|
|
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
|
|
|
+ Object value = entry.getValue();
|
|
|
+ if (value != null) {
|
|
|
+ // 转义每个字符串中的非法字符
|
|
|
+ entry.setValue(escapeHtml4(value.toString()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 手动实现 HTML 转义方法
|
|
|
+ public static String escapeHtml4(String input) {
|
|
|
+ if (input == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (int i = 0; i < input.length(); i++) {
|
|
|
+ char c = input.charAt(i);
|
|
|
+ switch (c) {
|
|
|
+ case '<':
|
|
|
+ sb.append("<");
|
|
|
+ break;
|
|
|
+ case '>':
|
|
|
+ sb.append(">");
|
|
|
+ break;
|
|
|
+ case '&':
|
|
|
+ sb.append("&");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ sb.append(c);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
/**
|
|
|
* 通过模板导出pdf文件
|
|
|
*
|