当前位置: 首页 > 面试题库 >

使用POI API将页脚添加到MS Word

奚高扬
2023-03-14
问题内容

我进行了很多搜索,并得到一些结果,这些结果中包含一些示例代码,但是没有人在工作。所有人都将获得空指针异常,或者如果生成了文档,则在打开文件(.docx)时出现错误并显示消息
时,仅在输入开始时才可能出现text / xml声明。

我以为可能是我要添加一些内容,然后添加页脚会带来一些问题,所以这次我一开始就粘贴了页脚代码

索引超出范围的异常

这是我的完整代码

String fileName ="Book.docx";
String   folderPath=SystemProperties.get(SystemProperties.TMP_DIR)+File.separator+"liferay" + File.separator    + "document_preview";
String filePath=folderPath+File.separator+fileName;
File file=new File(filePath);
XWPFDocument document = new XWPFDocument();  
XWPFParagraph paragraphOne = document.createParagraph();
paragraphOne.setAlignment(ParagraphAlignment.CENTER);
XWPFRun paragraphOneRunOne = paragraphOne.createRun();
paragraphOneRunOne.setText("Training Report");
paragraphOneRunOne.addBreak();
XWPFTable table = document.createTable();
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText("No");
tableRowOne.createCell().setText("Name");
XWPFHeaderFooterPolicy headerFooterPolicy = document.getHeaderFooterPolicy();
            if (headerFooterPolicy == null) {
                CTBody body = document.getDocument().getBody();
                CTSectPr sectPr = body.getSectPr();
                if (sectPr == null) {
                sectPr = body.addNewSectPr();
                }
                headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr);
                }
            CTP ctP1 = CTP.Factory.newInstance();
            CTR ctR1 = ctP1.addNewR();
            CTText t = ctR1.addNewT();
            t.setStringValue("first footer");
            XWPFParagraph codePara = new XWPFParagraph(ctP1);
            XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
            newparagraphs[0] = codePara;
             XWPFFooter xwpfFooter = null;
    xwpfFooter =  headerFooterPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT);
 FileOutputStream fileoutOfTraining = new FileOutputStream(file);
            document.write(fileoutOfTraining);
            fileoutOfTraining.flush();
            fileoutOfTraining.close();
   downloadOperation(file, fileName, resourceResponse);

downloadOperation方法中的代码

HttpServletResponse httpServletResponse =PortalUtil.getHttpServletResponse(resourceResponse);
BufferedInputStream input = null;
        BufferedOutputStream output = null;
 httpServletResponse.setHeader("Content-Disposition", "attachment;    filename=\""+fileName+"\"; filename*=UTF-8''"+fileName);
int  DEFAULT_BUFFER_SIZE=1024;
        try {
            input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            resourceResponse.flushBuffer();
            output = new BufferedOutputStream(httpServletResponse.getOutputStream(), DEFAULT_BUFFER_SIZE);
        } catch (IOException e) {
            e.printStackTrace();
        }
byte[] buffer = new byte[2*DEFAULT_BUFFER_SIZE];
        int length;
        try {
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            output.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

请帮助我生成页脚,这是我的代码,如果我在段落和表后添加页脚代码,则没有运行时错误,但打开生成的文件时出错,如果我将页脚放在要添加到文档中的内容之前我收到错误“索引超出绑定异常”。如果有任何代码片段或至少有一些指向该解决方案的指针,请帮助我。谢谢


问题答案:

我遇到了这个问题,解决方法是我们必须使用3.10最终的poi jar。 3.9有这个问题。

请删除以前版本的jar,然后添加3.10已修复此错误的最终版本的jar 。

罐子需要:

  1. poi-3.10-FINAL.jar

  2. poi-ooxml-3.10-FINAL.jar

  3. poi-ooxml-schemas-3.10-FINAL.jar

容易在网上获得:

http://mvnrepository.com/artifact/org.apache.poi/poi/3.10-FINAL

XWPFDocument document = new XWPFDocument();
CTP ctp = CTP.Factory.newInstance();
CTR ctr = ctp.addNewR();
CTRPr rpr = ctr.addNewRPr();
CTText textt = ctr.addNewT();
textt.setStringValue( " Page 1" );
XWPFParagraph codePara = new XWPFParagraph( ctp, document );
XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
newparagraphs[0] = codePara;
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy headerFooterPolicy = new  XWPFHeaderFooterPolicy( document, sectPr );
headerFooterPolicy.createFooter( STHdrFtr.DEFAULT, newparagraphs );

上面的代码运行良好,请使用我上面提到的3.10 wars。



 类似资料:
  • 问题内容: 我花了一点时间试图找出一种将标头添加到的方法,但未成功。 这是我到目前为止所得到的: 在似乎是处理的配置对象的项目。由于找不到任何方法,因此决定使用方法,并将标头视图添加到第一个位置以用作标头。 Aaand这就是事情变得更糟的地方: 在尝试创建的不同时刻调用了几次之后(还尝试在设置所有内容(甚至是适配器的数据)后添加视图),我意识到我不知道这是否是正确的方法(并且它看起来不是)。 PS

  • 使用iTextSharp,您可以通过将事件附加到PDF来向PDF添加页眉/页脚,如本SO答案中所述:https://stackoverflow.com/a/19004392 我怎样才能用 iText 7 做同样的事情? 这个链接有Java代码示例,但看起来不像它使用的页面事件。

  • 问题内容: 我有一个ListView活动,该活动需要项目列表的页脚,以便您可以单击它,这会将更多项目加载到列表中。该列表由我的SimpleAdapter支持,该SimpleAdapter由字符串映射支持,并且在设置适配器之前,我这样做是为了添加页脚: 但是我在调​​试器中得到了这个异常 java.lang.NullPointerException android.widget.ListView.c

  • 问题内容: 我在将新的简单XWPFTable添加到XWPFHeader(或Footer)时遇到了严重的麻烦。不幸的是,似乎只有一个人遇到相同的问题(https://bz.apache.org/bugzilla/show_bug.cgi?id=57366#c0)。 有谁有办法实现这一目标? 任何帮助将不胜感激! 亲切的问候… 〜丹尼尔 问题答案: 这可以使用公共XWPFTable insertNew

  • 问题内容: 如何使用itext从html源向pdf添加标头? 当前,我们扩展了PdfPageEventHelper并覆盖了这些方法。工作正常,但是当我进入2个以上页面时,它将引发RuntimeWorkerException。 问题答案: 通常, 禁止 在事件中添加内容。这是 禁止 添加内容到的对象。您应该使用而 不是 文档在方法中添加页眉和页脚。此外:通过一遍又一遍地解析HTML,您正在浪费大量C

  • 亲切的问候... ~丹尼尔