`
pengjianbo1
  • 浏览: 232535 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

文档视图(PDF/Excel)

阅读更多

14.6. 文档视图(PDF/Excel)

14.6.1. 简介

对看模型数据输出的用户来说,返回一个HTML页面并不总是最好的方法。 Spring简化了根据模型数据动态输出PDF文档或Excel电子表格的工作。 这些文档即最终视图,它们将以适当的内容类型用流的形式从服务器输出,并在客户端PC相应地启动PDF或电子表格浏览器(希望如此)。

为了使用Excel视图,你需要把'poi'库加到classpath中;使用PDF的话需要iText.jar。 它们都已经包含在Spring的主发行包里。

14.6.2. 配置和安装

基于文档的视图几乎与XSLT视图的处理方式相同。 下面的内容将在前文基础上介绍,XSLT例子中的controller如何被用来渲染同一个的模型数据,分别产生PDF或Excel输出(输出文档可以用Open Office浏览和编辑)。

14.6.2.1. 文档视图定义

首先,我们修改view.properties(或等价的xml文件),增加两种文档类型的视图定义。 整个文件现在看起来是这个样子:

home.class=xslt.HomePage
home.stylesheetLocation=/WEB-INF/xsl/home.xslt
home.root=words

xl.class=excel.HomePage

pdf.class=pdf.HomePage

如果你想在一个电子表格模板基础上添加模型数据,可以在视图定义中为'url'属性指定一个文件位置。

14.6.2.2. Controller 代码

这里用的controller代码,除了视图名以外,其他的与XSLT例子中的完全一样。 当然,你可能有更聪明的做法,通过URL参数或其他方式选择视图名,这也证明了Spirng在控制器与视图的解耦方面确实非常优秀!

14.6.2.3. Excel视图子类

和在XSLT例子中一样,我们需要从适当的抽象类扩展一个具体类,以实现输出文档的行为。 对Excel来说,这意味着创建一个 org.springframework.web.servlet.view.document.AbstractExcelView(使用POI)或 org.springframework.web.servlet.view.document.AbstractJExcelView(使用JExcelApi)的子类, 并实现buildExcelDocument方法。

下面是一段使用POI生成Excel视图的完整代码,它从模型数据中取得词语列表,把它显示为电子表格中第一栏内连续的行:

package excel;

// imports omitted for brevity

public class HomePage extends AbstractExcelView {

    protected void buildExcelDocument(
        Map model,
        HSSFWorkbook wb,
        HttpServletRequest req,
        HttpServletResponse resp)
        throws Exception {
    
        HSSFSheet sheet;
        HSSFRow sheetRow;
        HSSFCell cell;

        // Go to the first sheet
        // getSheetAt: only if wb is created from an existing document
        //sheet = wb.getSheetAt( 0 );
        sheet = wb.createSheet("Spring");
        sheet.setDefaultColumnWidth((short)12);

        // write a text at A1
        cell = getCell( sheet, 0, 0 );
        setText(cell,"Spring-Excel test");

        List words = (List ) model.get("wordList");
        for (int i=0; i < words.size(); i++) {
            cell = getCell( sheet, 2+i, 0 );
            setText(cell, (String) words.get(i));

        }
    }
}

 

这是一个使用JExcelApi的版本,生成同样的Excel文件:

package excel;
				
// imports omitted for brevity

public class HomePage extends AbstractExcelView {

    protected void buildExcelDocument(Map model,
        WritableWorkbook wb,
        HttpServletRequest request,
        HttpServletResponse response)
    throws Exception {
			
        WritableSheet sheet = wb.createSheet("Spring");

        sheet.addCell(new Label(0, 0, "Spring-Excel test");
		
        List words  = (List)model.get("wordList");
        for (int i = -; i < words.size(); i++) {
            sheet.addCell(new Label(2+i, 0, (String)words.get(i));
        }
    }
}

 

注意这些API间的差别。我们发现JExcelApi使用起来更直观,而且在图像处理方面更好。 但也发现使用JExcelApi处理大文件时有些内存问题。

如果你现在修改controller的代码,让它返回名为 xl 的视图(return new ModelAndView("xl", map);), 然后再次运行你的应用,你会发现,当你请求同样的页面时,Excel电子表格被创建出来并自动开始下载。

14.6.2.4. PDF视图子类

生成PDF版本的词语列表就更简单了。 现在,你创建一个 org.springframework.web.servlet.view.document.AbstractPdfView 的子类,并实现buildPdfDocument()方法,如下:

package pdf;

// imports omitted for brevity

public class PDFPage extends AbstractPdfView {

    protected void buildPdfDocument(
        Map model,
        Document doc,
        PdfWriter writer,
        HttpServletRequest req,
        HttpServletResponse resp)
        throws Exception {
        
        List words = (List) model.get("wordList");
        
        for (int i=0; i<words.size(); i++)
            doc.add( new Paragraph((String) words.get(i)));
    
    }
}

同样地,修改controller,让它返回名为 pdf 的视图(return new ModelAndView("pdf", map);), 运行你的应用并请求同样的URL,这次将会打开一个PDF文档,列出模型数据中的每个词语。

分享到:
评论

相关推荐

    Thinkphp5实现pdf和excel 上传下载demo

    $info = $file-&gt;move('uploads/excel/'); if ($info) { // 使用PHPExcel处理文件 $filePath = $info-&gt;getSaveName(); // ... } else { return '上传失败:' . $file-&gt;getError(); } } ``` 下载Excel文件的...

    java web在线预览pdf、word、excel

    在IT行业中,尤其是在Web开发领域,提供用户在线预览PDF、Word、Excel等文档的功能是一项常见且实用的需求。本文将详细讲解如何利用Java Web技术实现这样的功能,主要涉及Maven构建工具、前端PDF插件以及后台...

    Java平台Excel文档处理类库API-Free Spire.XLS for Java

    1.1 文档格式转换:Excel转PDF/图片/HTML/XPS/SVG/XML/CSV/TIFF/ET/ETT/OFD/、XML转Excel等。 1.2 文档操作:创建、合并、拆分、删除文档;设置文档属性、背景、页边距;插入分页符;文档修订、加密、数字签名;...

    .pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx 文件网页预览 ASP.NET MVC 项目

    在IT行业中,尤其是在Web开发领域,常常需要处理各种类型的文件,如PDF、Word文档(.doc/.docx)、Excel表格(.xls/.xlsx)以及PowerPoint演示文稿(.ppt/.pptx)。这些文件格式广泛应用于日常工作和学习,因此提供...

    EXCEL快捷键大全.pdf

    由于我无法查看具体的PDF文档内容,我无法提供确切的“EXCEL快捷键大全”的详细知识点。不过,我可以根据我所掌握的知识,列举出许多常用的Excel快捷键,以及它们的用途。这样一来,即便无法直接引用文档内容,我也...

    EXCEL视图教程借鉴.pdf

    《EXCEL视图教程借鉴》是一份非常实用的网络文档,专为想要深入学习和提升Excel技能的用户设计。这份教程以简洁明了的方式,详细介绍了Excel中的多种关键功能和技巧,帮助用户从基础到进阶,全面提升Excel操作水平。...

    Openoffice转换多列EXCEL为PDF行列对应解决方法

    在IT行业中,转换数据格式是一项常见的任务,尤其是将电子表格(如Excel)转换为便携式文档格式(PDF)。OpenOffice是一款开源的办公软件套件,它提供了与Microsoft Office相似的功能,包括创建、编辑和转换文件。在...

    easypoi导入导出excel表格.pdf

    文档中提及了easypoi支持的五种注解方式,这些注解能够让开发者在导出数据时自定义Excel的行宽、列高、列名、格式化时间等等。例如: - `@Excel`属性:用于标注在字段上,控制导出的列名称、宽度、默认值、是否合并...

    NET_MVC_PDF+Word+Excel+PPT文档在线预览.rar

    在本示例中,“NET_MVC_PDF+Word+Excel+PPT文档在线预览.rar”是一个压缩包,其中包含了一个源码Demo,用于在ASP.NET MVC环境中实现对PDF、Word、Excel和PPT文档的在线预览功能。这一特性对于许多企业级应用来说非常...

    Android 本地预览Excel,Word,PPT,PDF 源代码

    在Android开发中,有时我们需要为用户提供查看文档的功能,如Excel表格、Word文档、PowerPoint演示文稿以及PDF文件。这个“Android本地预览Excel,Word,PPT,PDF源代码”项目提供了解决这一需求的解决方案。它允许用户...

    html在线预览pdf(pdf.js)

    PDF.js 是一个由 Mozilla 维护的开源库,专门用于在 Web 浏览器中显示 PDF 文档。这个库利用 JavaScript 实现了 PDF 文件的解析和渲染,使得开发者能够在 HTML 页面上实现 PDF 的在线预览功能,而无需依赖任何插件。...

    Excel单元格预览打印不全,与视图不一致方法

    PDF虚拟打印机可以将Excel单元格转换为PDF文件,并且可以选择打印质量为96dpi,这样就可以保证打印结果的正确性。 知识点: 1. Excel单元格预览打印不全的问题是由于电脑的分辨率与打印机的分辨率不同所致。 2. ...

    ASP.NET MVC 利用(aspose+pdfobject.js) 在线预览常用办公文档(word、excel、ppt、pdf)

    在本主题中,我们将探讨如何利用ASP.NET MVC结合aspose和pdfobject.js库来实现在线预览常用的办公文档,包括Word、Excel、PowerPoint和PDF文件。 首先,我们需要了解**aspose**。Aspose是一系列用于处理多种文件...

    easypoi教程总结

    2. 注解 View JeecgSingleExcelView:easypoi提供了多种View注解,例如JeecgSingleExcelView注解,用于标识Excel视图的配置信息。 easypoi教程总结为我们提供了关于easypoi的详细使用教程,涵盖了Excel、Word、HTML...

    用spring MVC 生成Excel和PDF.docx

    - **iText**:这是一个用于生成 PDF 文档的 Java 库。使用 iText,开发者可以构建 PDF 页面,添加文本、图像、表格等元素,同样以流的形式返回给客户端,以便在 PDF 阅读器中查看。 3. **Spring MVC 配置**: - *...

    aspose实现在线预览word,ppt,excel,pdf文件架包(1)

    Aspose 是一个强大的文件处理库,它允许开发者在多种编程语言环境下处理各种文件格式,包括Word文档、PowerPoint演示文稿、Excel电子表格以及PDF文档等。本篇将详细介绍如何利用Aspose实现在线预览这些文件类型。 1...

    Microsoft Excel 2010 Product Guide.pdf

    由于《Microsoft Excel 2010 产品指南.pdf》文件中包含了众多知识点,因此本文将仅针对文档中提到的关键特性和功能进行详细说明: 1. Excel 2010 引言 文档开篇介绍 Excel 2010,它是 Office 2010 套件的一部分,...

    Laravel开发-laravel-pdf

    在本文中,我们将深入探讨Laravel开发中的laravel-pdf组件,这是一个专为Laravel框架设计的包装器,用于集成MPDF 7.0库,帮助开发者轻松生成PDF文档。MPDF是一个广泛使用的PHP库,它允许从HTML或纯文本创建符合W3C...

    山东专升本计算机excel知识点总结材料(word文档物超所值).pdf

    "山东专升本计算机excel知识点总结材料(word文档物超所值)" Excel 是一个功能强大的电子表格处理软件,广泛应用于各种行业和领域。下面是 Excel 的主要功能和知识点总结: 1. 表格制作:Excel 可以创建和编辑表格...

    jacob的excel转pdf

    本示例主要涉及的是将Excel电子表格转换为PDF文档,这是一个实用的操作,能够方便地分享、打印或保存内容,而不用担心编辑问题。"jacob的excel转pdf"项目提供了一种解决方案,它可能利用了Java的Jacob库来实现这个...

Global site tag (gtag.js) - Google Analytics