今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

结合Freemaker导出文件

public void exportSimpleWord() throws Exception{
           // 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
          Map<String,String> dataMap = new HashMap<String,String>();
          dataMap.put("username", "张三");
          dataMap.put("sex", "男");

        //Configuration用于读取ftl文件
          Configuration configuration = new Configuration();
          configuration.setDefaultEncoding("utf-8");

          /*以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是
           * 指定ftl文件所在目录的路径,而不是ftl文件的路径
           */
          //指定路径的第一种方式(根据某个类的相对路径指定)
          //configuration.setClassForTemplateLoading(this.getClass(),"");

          //指定路径的第二种方式,我的路径是C:/a.ftl
          configuration.setDirectoryForTemplateLoading(new File("C:/"));


          // 输出文档路径及名称
         File outFile = new File("D:/test.doc");

         //以utf-8的编码读取ftl文件
         Template t =  configuration.getTemplate("a.ftl","utf-8");
         Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240);
         t.process(dataMap, out);
         out.close();
       }

在公司做在线简历导出,用freemaker导出word文档,无法换行,问题,解决方法如下:

当数据保存到数据库的时候如何有换行,换行也会存储到数据库里面,当页面拿到这些数据的时候,这些换行会以 ‘\n’ 的形式实现页面上换行的效果,导入到word文档,如果继续使用\n肯定是没用的

使用freemaker的replace方法,使用word文档的标签,替换\n,实现word文档的换行.
实现的关键代码,其次就是细心认真,一点一点调试。

<#if showcase?&&showcase!="">
                                                <w:t>${showcase?replace("\n",
                                                "</w:t>
                                    </w:r>
                                    <w:bookmarkStart w:id=\"0\" w:name=\"_GoBack\"/>
                                    <w:bookmarkEnd w:id=\"0\"/>
                                </w:p>

                                <w:p w:rsidR=\"009025F9\" w:rsidRPr=\"002A1E10\" w:rsidRDefault=\"009025F9\"
                                     w:rsidP=\"00514E73\">
                                    <w:pPr>
                                        <w:spacing w:before=\"42\" w:after=\"42\" w:line=\"241\" w:lineRule=\"atLeast\"/>
                                        <w:rPr>
                                            <w:rFonts w:ascii=\"微软雅黑\" w:eastAsia=\"微软雅黑\" w:hAnsi=\"微软雅黑\" w:cs=\"Tahoma\"/>
                                            <w:color w:val=\"444444\"/>
                                            <w:sz w:val=\"21\"/>
                                            <w:szCs w:val=\"21\"/>
                                        </w:rPr>
                                    </w:pPr>
                                    <w:r w:rsidRPr=\"002A1E10\">
                                        <w:rPr>
                                            <w:rFonts w:ascii=\"微软雅黑\" w:eastAsia=\"微软雅黑\" w:hAnsi=\"微软雅黑\" w:cs=\"Tahoma\"
                                                      w:hint=\"eastAsia\"/>
                                            <w:color w:val=\"444444\"/>
                                            <w:sz w:val=\"21\"/>
                                            <w:szCs w:val=\"21\"/>
                                        </w:rPr>
                                        <w:t>")}</w:t>
                                            </w:r>
                                                <w:bookmarkStart w:id="0" w:name="_GoBack"/>
                                                <w:bookmarkEnd w:id="0"/>
                                            </w:p>
                                            <#else>
                                                <w:t></w:t>
                                                </w:r>
                                                <w:bookmarkStart w:id="0" w:name="_GoBack"/>
                                                <w:bookmarkEnd w:id="0"/>
                                                </w:p>
                                            </#if>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用Apache POI库和iText库来将Freemarker生成Word文档转换为PDF。首先,您需要使用Freemarker生成Word文档,然后使用Apache POI库将其加载到内存中。接下来,您可以使用iText库将加载的Word文档转换为PDF格式。以下是一个示例代码片段,演示如何执行此操作: ```java import freemarker.template.Configuration; import freemarker.template.Template; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import java.io.*; import java.util.HashMap; import java.util.List; import java.util.Map; public class WordToPdfConverter { public static void main(String[] args) { try { // Load the Freemarker template Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); configuration.setClassForTemplateLoading(WordToPdfConverter.class, "/"); Template template = configuration.getTemplate("template.ftl"); // Prepare data for the template Map<String, Object> data = new HashMap<>(); data.put("name", "John Doe"); // ... add more data // Generate the Word document using Freemarker Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.docx"))); template.process(data, out); out.close(); // Convert the Word document to PDF using Apache POI and iText FileInputStream in = new FileInputStream(new File("output.docx")); XWPFDocument document = new XWPFDocument(in); File outputFile = new File("output.pdf"); FileOutputStream outStream = new FileOutputStream(outputFile); PdfOptions options = PdfOptions.create(); PdfConverter.getInstance().convert(document, outStream, options); // Clean up outStream.close(); in.close(); System.out.println("Word document converted to PDF successfully!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 请确保在运行代码之前将`template.ftl`替换为您自己的Freemarker模板文件。此外,您需要在项目中添加Apache POI和iText库的依赖项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一缕阳光直射你的心扉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值