【word毕业论文排版(3)】word导出带有书签的PDF失败,转为用WPS成功

写一个系列,记录好毕业论文的排版

word转含有书签的PDF

  • 背景:想要把微软Word的论文转为带有书签的PDF,但是出错不让转,用一张图把这个方法也简单记一下;
    在这里插入图片描述

  • 但是MS Word报错,不让转出PDF;

  • 转为用WPS:WPS不需要相关的选项,导出后直接就带有书签,不过前提是,文本当中已经设置好多级目录;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先当然是定义word模板,在需要替换的地方加上标签。 菜单-插入-书签,输入属性名,如year,date,pic1,voList等等。 打印页面: 需要把打印的数据从后台取出,以单个vo(一个对象)为一组,或以voList(对象的列表集合)为一组 组织好页面上 再得到这些数据后进行替换。 数据组织形式如下: <div id="export2word"> <form id="singleVo" name="singleVo"> <textarea name="jcxcrs" style="display:none"><c:out value="${zywstjfxbgVO.jcxcrs }"/></textarea> <textarea name="xcjhl" style="display:none"><c:out value="${zywstjfxbgVO.xcjhl }"/></textarea> <textarea name="tbjcxcrs" style="display:none"><c:out value="${tbjcxcrs }"/></textarea> <textarea name="tptest" style="display:none">../zwgl/zw008-ZwMkjbxxCTRL-showWxytp.png?xh=3041</textarea> </form> <c:forEach var="mxvo" items="${jgList}" varStatus="s"> <form name="mxvoForm"> <!-- 注:这里的宽度设置为表格单元格宽度(厘米*100)--> <textarea name="tbjcmcrs" style="width:349;display:none"><c:out value="${mxvo.tbjcmcrs }"/></textarea> <textarea name="tbjcmcrsbl" style="width:270;display:none"><c:out value="${mxvo.tbjcmcrsbl }"/></textarea> <textarea name="tbjcxcrs" style="width:477;display:none"><c:out value="${mxvo.tbjcxcrs}"/></textarea> <textarea name="tbjcxcrsbl" style="display:none"><c:out value="${mxvo.tbjcxcrsbl }"/></textarea> </form> </c:forEach> </div> 使用: <input type="button" id="select2" name="select2" class="button" value="导出数据" onclick="print2doc();"> <script type="text/javascript" src="../public/scripts/export2word.js"></script> <script type="text/javascript"> function print2doc(){ //参数为模板(与页面的相对)路径 var word = new WordApp("test.doc"); //参数为form名,vo中需要添加的属性(为空时form里所有属性) var vo = word.getSingleVo("singleVo",["jcxcrs","xcjhl","tbjcxcrs"]); //var vo = word.getSingleVo("singleVo"); //组织成的图片vo var tpvo = word.getSingleVo("singleVo",["tptest"]); //参数为 form名,需要添加的属性(顺序为生成表格列的顺序,为空时form里的所有属性和顺序) var voList = word.getVoList("mxvoForm",["tbjcmcrs","tbjcmcrsbl","tbjczsrs"]); //var voList = word.getVoList("mxvoForm"); //替换普通书签 word.replaceBookmarkUsevo(vo); //替换图片书签 word.replaceBookmarkUsepicvo(tpvo); //替换书签jgList,画出表格形成多行数据。 word.replaceBookmarkUsevolist("jgList",voList); //文档可见 word.wordObj.visible=true; //word.closeApp(); } </script> 注意: 替换图片的值需要解释一下: 1.可以设为相对本页面的路径如../zbgl/abc.png 2.如果是输出流,则需要把请求输出流的url映射成以图片格式结尾的。如/.../abc.do?id=123换成/../abc.png?id=123 可以在web.xml里配一个servlet,如以*.png的请求成.do的。如: public class PngDispatcherServlet extends HttpServlet { private static final long serialVersionUID = 6230740581031996144L; public void init() throws ServletException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //StringBuffer url = request.getRequestURL(); StringBuffer url = new StringBuffer(request.getRequestURI()); if(request.getQueryString() != null) { url.append('?'); url.append(request.getQueryString()); } String newUrl = url.toString().replaceAll(".png", ".do"); ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(newUrl); //定向的页面 rd.forward(request, response); } }
以下是两种Java实现WordPDF并解决排版问题的方法: 1. 使用POI和iTextPDF进行WordPDF: ```java import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun;import com.itextpdf.text.Document; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; public class WordToPdfConverter { public static void convert(String inputFilePath, String outputFilePath) { try { XWPFDocument document = new XWPFDocument(new FileInputStream(inputFilePath)); Document pdfDocument = new Document(); PdfWriter.getInstance(pdfDocument, new FileOutputStream(outputFilePath)); pdfDocument.open(); for (XWPFParagraph paragraph : document.getParagraphs()) { XWPFRun run = paragraph.createRun(); String text = run.getText(0); Paragraph pdfParagraph = new Paragraph(text); pdfDocument.add(pdfParagraph); } pdfDocument.close(); document.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 2. 使用Aspose实现WordPDF并解决排版问题: ```java import com.aspose.words.Document; import com.aspose.words.SaveFormat; public class WordToPdfConverter { public static void convert(String inputFilePath, String outputFilePath) { try { Document document = new Document(inputFilePath); document.save(outputFilePath, SaveFormat.PDF); } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,这两种方法都需要相应的依赖库。你可以根据你的需求选择其中一种方法来实现WordPDF并解决排版问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值