[转]关于freemaker输出值为空的解决

用过freemarker的人领略过它的经典的黄色报错页面,特别是在页面上输出值时,只要为null,就整个页面都是黄黄的恶心的报错页面,一直以来,受够了这个折磨,今天一以前的同事发来好消息,原来现在的freemarker已经可以完美解决此问题了, 
现转一别人的文章: 
!:default value operator,语法结构为:unsafe_expr!default_expr,比如 ${mouse!"No mouse."} 当mouse不存在时,返回default value; 
(product.color)!"red"  这种方式,能够处理product或者color为miss value的情况; 
而product.color!"red"将只处理color为miss value的情况 
??: Missing value test operator ,测试是否为missing value 
unsafe_expr?? :product.color??将只测试color是否为null 
(unsafe_expr)??:(product.color)??将测试product和color是否存在null 
?exists:旧版本的用法 
比如:<#if mouse??> 
  Mouse found 
<#else> 
  No mouse found 
</#if> 
Creating mouse... 
<#assign mouse = "Jerry"> 
<#if mouse??> 
  Mouse found 
<#else> 
  No mouse found 
</#if> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用itextpdf和freemarker来实现Java中的HTMLPDF功能。首先,确保你的项目已经引入了相关的依赖,包括spring-boot-starter-freemarker、itextpdf、xmlworker和itext-asian。 接下来,你可以创建一个HtmlConvertPdfHelper类来实现HTMLPDF的功能。在这个类中,你可以使用freemarker来生成HTML内容,并使用itextpdf将HTML内容换为PDF文件。可以参考以下代码: ```java import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfWriter; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.*; import java.util.Map; public class HtmlConvertPdfHelper { public byte[] htmlConvertPDF(String templateName, Map<String, String> data) throws IOException, TemplateException, DocumentException { // 加载freemarker配置 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); configuration.setClassForTemplateLoading(getClass(), "/"); // 获取freemarker模板 Template template = configuration.getTemplate(templateName); // 使用StringWriter来保存生成的HTML内容 StringWriter writer = new StringWriter(); template.process(data, writer); // 使用itextpdf将HTML内容换为PDF Document document = new Document(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter.getInstance(document, baos); document.open(); InputStream is = new ByteArrayInputStream(writer.toString().getBytes()); com.itextpdf.tool.xml.XMLWorkerHelper.getInstance().parseXHtml(PdfWriter.getInstance(document, baos), document, is); document.close(); // 返回换后的PDF文件内容 return baos.toByteArray(); } } ``` 接下来,你可以在测试类中调用HtmlConvertPdfHelper类来完成HTMLPDF的操作。首先,创建一个Map对象来存储模板中的变量值,然后调用htmlConvertPDF方法将HTML内容换为PDF,并将换后的PDF内容保存到文件中。 ```java import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class Test { private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); @Test public void aaa() throws IOException, TemplateException, com.itextpdf.text.DocumentException { Map<String, String> data = new HashMap<>(); data.put("name", "鹤顶红"); data.put("type", "毒药"); byte[] bytes = new HtmlConvertPdfHelper().htmlConvertPDF("demo.ftl", data); OutputStream os = new FileOutputStream("G:/text.pdf"); os.write(bytes, 0, bytes.length); os.flush(); os.close(); LOGGER.info("换完成"); } } ``` 通过以上代码,你可以实现Java中的HTMLPDF功能。你需要按照你的实际情况进行适当的修改,如模板名称、变量值等。请确保模板文件存在,并且与HtmlConvertPdfHelper类处于相同的目录下。 希望这个回答能帮到你。如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值