精华内容
下载资源
问答
  • Spring Boot导出Pdf文件

    千次阅读 2018-10-14 14:12:06
    除了常见的jsp视图外,还有pdfexcel等。不管哪种视图,都会实现SpringMvc定义的视图接口View。这篇文章就讲讲怎么使用Pdf视图----AbstractPdfView。 AbstractPdfView属于非逻辑视图,不需要任何的视图解析器...

    除了常见的jsp视图外,还有pdf,excel等。不管哪种视图,都会实现SpringMvc定义的视图接口View。这篇文章就讲讲怎么使用Pdf视图----AbstractPdfView。

    AbstractPdfView属于非逻辑视图,不需要任何的视图解析器(ViewResolver)去定位。它是一个抽象类,有一个抽象方法需要我们去实现。

        /**
    	 * 通过数据模型自定义创建pdf文档
    	 * @param model 数据模型
    	 * @param document 代表一个pdf文档
    	 * @param writer pdf写入器
    	 * @param request HttpServletRequest请求对象
    	 * @param response HttpServletResponse响应对象
    	 */
    	protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
    			HttpServletRequest request, HttpServletResponse response) throws Exception;
    

    我们首先创建一个Spring Boot工程,这里的orm使用Mybatis,数据源使用Druid,为了能够使用pdf,我们需要加pom.xml中相关的依赖,下面贴出完整的pom文件

        <dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-aop</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>1.3.2</version>
    		</dependency>
    
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-tomcat</artifactId>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<!-- pdf相关的jar -->
    		<dependency>
    			<groupId>org.xhtmlrenderer</groupId>
    			<artifactId>core-renderer</artifactId>
    			<version>R8</version>
    		</dependency>
    		<dependency>
    			<groupId>com.itextpdf</groupId>
    			<artifactId>itextpdf</artifactId>
    			<version>5.5.12</version>
    		</dependency>
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.1.6</version>
    		</dependency>
    	</dependencies>
    

    继承了AbstractPdfView后,就得实现它的抽象方法,从而完成导出的逻辑,而每个控制器可能都有不同的导出逻辑,所以为了适应不同控制器的自定义导出,先定义一个导出接口。

    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.lowagie.text.Document;
    import com.lowagie.text.pdf.PdfWriter;
    
    /**
     * 定义一个导出的接口,方便每个控制器实现自己的导出逻辑
     * @author liu
     */
    public interface PdfExportService {
    	
    	/**
    	 * 导出的方法
    	 * @param model 数据模型
    	 * @param document 代表一个pdf文档
    	 * @param writer pdf写入器
    	 * @param request HttpServletRequest请求对象
    	 * @param response HttpServletResponse响应对象
    	 */
    	public void make(Map<String, Object> model, Document document, PdfWriter writer, 
    			HttpServletRequest request, HttpServletResponse response);
    }
    

    注意这里导的是com.lowagie.text包下的类。

    有了这个接口后,各个控制器只需要实现这个接口,就能自定义导出pdf的逻辑。

    接着就是继承AbstractPdfView,通过它调度PdfExportService 的make方法就可以让控制器去实现自定义的导出逻辑。

    /**
     * 继承AbstractPdfView类,实现抽象方法buildPdfDocument
     * @author liu
     */
    public class PdfView extends AbstractPdfView {
    	
    	private PdfExportService pdfExportService = null;
    	
    	/**
    	 * 创建对象时载入导出服务接口
    	 * @param pdfExportService
    	 */
    	public PdfView(PdfExportService pdfExportService) {
    		this.pdfExportService = pdfExportService;
    	}
    
    	/**
    	 * 调用接口实现导出
    	 */
    	@Override
    	protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
    			HttpServletRequest request, HttpServletResponse response) throws Exception {
    		
    		// 调用导出服务接口类
    		pdfExportService.make(model, document, writer, request, response);
    	}
    
    }
    

    这里可以看到,在创建自定义pdf视图时,需要自定义一个导出服务接口(PdfExportService ),通过实现这个接口,每个控制器都可以自定义其导出的逻辑。

    完成了上面的工作,接下来就是正常的SSM结合。首先在Spring Boot的配置文件中进行配置

    # 数据库配置
    jdbc.driver = com.mysql.jdbc.Driver
    jdbc.url = jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
    jdbc.username = root
    jdbc.password = 1311664842
    
    # mybatis 配置文件的路径
    mybatis_config_file = /mybatis/mybatis-config.xml
    # 映射文件的路径
    mapper_path = /mapper/**.xml
    # 实体类的路径
    entity_package = com.codeliu.entity
    
    # 日志配置
    logging.level.root = DEBUG
    logging.level.org.springframework = DDEBUG
    logging.level.org.mybatis = DEBUG
    

    可以看到进行了数据源的配置,还有mybatis的一些配置。

    接下来就是在指定路径下创建mybatis全局配置文件,创建实体类和创建映射文件,还有service层,这些就不写了,最重要的就是控制层,在写控制层之前,先写两个配置类,配置数据源和sqlSessionFactory。

    /**
     * 配置数据源
     * @author liu
     */
    @Configuration
    // 扫描dao层
    @MapperScan(value = "com.codeliu.dao")
    public class DataSourceConfig {
    	
    	@Value(value = "${jdbc.driver}")
    	private String jdbcDriver;
    	
    	@Value(value = "${jdbc.url}")
    	private String jdbcUrl;
    	
    	@Value(value = "${jdbc.username}")
    	private String jdbcUsername;
    	
    	@Value(value = "${jdbc.password}")
    	private String jdbcPassword;
    	
    	@Bean(value = "dataSource")
    	public DruidDataSource getDataSource() {
    		DruidDataSource dataSource = new DruidDataSource();
    		dataSource.setDriverClassName(jdbcDriver);
    		dataSource.setUrl(jdbcUrl);
    		dataSource.setUsername(jdbcUsername);
    		dataSource.setPassword(jdbcPassword);
    		return dataSource;
    	}
    }
    
    /**
     * SqlSessionFactory配置
     * @author liu
     */
    @Configuration
    public class SqlSessionFactoryConfig {
    
    	// mybatis配置文件的路径
    	@Value(value = "${mybatis_config_file}")
    	private String mybatisConfigPath;
    	
    	// mybatis映射文件的路径
    	@Value(value = "${mapper_path}")
    	private String mapperPath;
    	
    	// 实体包的路径
    	@Value(value = "${entity_package}")
    	private String entityPath;
    	
    	@Autowired
    	private DataSource dataSource;
    	
    	@Bean(value = "sqlSessionFactory")
    	public SqlSessionFactoryBean getSqlSessionFactoryBean() throws IOException {
    		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
    		
    		// mybatis配置文件的路径
    		sqlSessionFactory.setConfigLocation(new ClassPathResource(mybatisConfigPath));
    		
    		PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    		String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
    		// 指定映射文件的路径
    		sqlSessionFactory.setMapperLocations(resolver.getResources(packageSearchPath));
    		// 配置数据源
    		sqlSessionFactory.setDataSource(dataSource);
    		// 配置实体包的扫描路径
    		sqlSessionFactory.setTypeAliasesPackage(entityPath);
    		return sqlSessionFactory;
    	}
    }
    

    注意加上了@Configuration注解,表示这是一个配置类。这样Spring Boot启动的时候,就会进行相关的初始化。

    现在可以来进行controller的编写。

    @Controller
    @RequestMapping("/man")
    public class ManController {
    	
    	@Autowired
    	private ManService manService;
    	
    	/**
    	 * 导出接口
    	 * @return
    	 */
    	@GetMapping("/export/pdf")
    	public ModelAndView exportPdf() {
    		List<Man> manList = manService.getManList();
    		// 定义pdf视图
    		View view = new PdfView(exportService());
    		ModelAndView mv = new ModelAndView();
    		// 设置视图
    		mv.setView(view);
    		// 加入数据模型
    		mv.addObject("manList", manList);
    		return mv;
    	}
    	
    	
    	/**
    	 * 导出pdf自定义,每个控制器可以实现自己的导出逻辑
    	 * @return
    	 */
    	@SuppressWarnings("unchecked")
    	public PdfExportService exportService() {
    		// 使用Lambda表达式
    		return(model, document, writer, request, response)-> {
    			try {
    				// A4纸张
    				document.setPageSize(PageSize.A4);
    				// 标题
    				document.addTitle("用户信息");
    				// 换行
    				document.add(new Chunk("\n"));
    				// 表格,3列
    				PdfPTable table = new PdfPTable(3);
    				// 单元格
    				PdfPCell cell = null;
    				// 字体,定义为蓝色加粗
    				Font f8 = new Font();
    				f8.setColor(Color.BLUE);
    				f8.setStyle(Font.BOLD);
    				// 标题
    				cell = new PdfPCell(new Paragraph("id", f8));
    				// 居中对齐
    				cell.setHorizontalAlignment(1);
    				// 将单元格加入表格
    				table.addCell(cell);
    				
    				// 标题
    				cell = new PdfPCell(new Paragraph("age", f8));
    				// 居中对齐
    				cell.setHorizontalAlignment(1);
    				// 将单元格加入表格
    				table.addCell(cell);
    				
    				// 标题
    				cell = new PdfPCell(new Paragraph("name", f8));
    				// 居中对齐
    				cell.setHorizontalAlignment(1);
    				// 将单元格加入表格
    				table.addCell(cell);
    				
    				// 获取数据模型中的manList
    				List<Man> manList = (List<Man>)model.get("manList");
    				for(Man man:manList) {
    					document.add(new Chunk("\n"));
    					cell = new PdfPCell(new Paragraph(man.getId() + ""));
    					// 居中对齐
    					cell.setHorizontalAlignment(1);
    					table.addCell(cell);
    					cell = new PdfPCell(new Paragraph(man.getAge() + ""));
    					// 居中对齐
    					cell.setHorizontalAlignment(1);
    					table.addCell(cell);
    					cell = new PdfPCell(new Paragraph(man.getName()));
    					// 居中对齐
    					cell.setHorizontalAlignment(1);
    					table.addCell(cell);
    				}
    				// 文档中加入表格
    				document.add(table);
    			} catch(DocumentException e) {
    				e.printStackTrace();
    			}
    		};
    	}
    }
    

    可以看到我们先通过数据库查询出数据,然后放入模型和视图(ModelAndView)中,然后设置pdf视图(PdfView)。而定义PdfView时,使用Lambda表达式实现了导出服务接口,这样就可以很方便的让每一个控制器自定义样式和数据。导出pdf文件的逻辑在exportService方法中。

    启动Spring Boot文件后,输入url,显示下面的结果
    20.png

    关注微信公众号:秃头哥编程(ID:xp_1311664842),领取编程大礼包。
    在这里插入图片描述

    展开全文
  • 最近遇到导出excel的需求,系统已经有了基于jasperreports制导出pdf的功能(模板是jaspersoft report制作的),图省事直接利用jasperreports的方法来导出excel。单导出excel没有去掉grid line十分难看。后来查了一下...

    最近遇到导出excel的需求,系统已经有了基于jasperreports制导出pdf的功能(模板是jaspersoft report制作的),图省事直接利用jasperreports的方法来导出excel。单导出的excel没有去掉grid line十分难看。后来查了一下,要去掉grid line很简单。

    方式一:直接在jrxml的文件里配置

    <property name="net.sf.jasperreports.export.xls.show.gridlines" value="false"/>

    方式二:在代码里配置

    JRXlsxExporter exporter = new JRXlsxExporter();
    exporter.setExporterInput(SimpleExporterInput.getInstance(sheets1));
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("test.xlsx"));

    SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
    configuration.setShowGridLines(Boolean.FALSE);
    configuration.setOnePagePerSheet(Boolean.FALSE);
    configuration.setRemoveEmptySpaceBetweenColumns(true);
    configuration.setWhitePageBackground(Boolean.FALSE);
    exporter.setConfiguration(configuration);

    exporter.exportReport();

    最后上一张图看看什么是excel的grid line,就是下面红框标记的部分

    导出的excel去掉grid line的样子

    展开全文
  • 我用vb.net导出PDF文件:代码如下 Public Sub ExcelToPdf(excelPath As String) Dim excel = New FileInfo(excelPath) If excel.Exists Then Dim dir = excel.DirectoryName Dim fileName = excel.Name....
  • 怎么知道excel文件格式呢?其实很简单,随便新建一个excel文件,双击打开,然后点击“文件”-》“另存为”,保存的类型为“xml表格”,保存之后用文本格式打开,就可以看到excel的字符串格式一览无遗了。
  • 当前,对报表工具来说,支持导出基本算是标配功能,除了开源报表工具在支持的文件类型上有限制外,对于商业报表工具来说,常用的文件类型,几乎没什么区别,比如都支持导出 word、excelpdf、txt 等。 至于使用的...

    用报表工具开发,核心功能是把各种数据源的数据以表格或图表的形式在线上网页端呈现出来。但是很多场景都是线上和线下结合,既要方便线上在系统中查看到报表,同时还得能和传统的线下业务无缝贴合,比如把结果导出到文件来流转、电子归档呀之类的,这时就需要报表工具具备强有力的所见即所得的导出本领。

    当前,对报表工具来说,支持导出基本算是标配功能,除了开源报表工具在支持的文件类型上有限制外,对于商业报表工具来说,常用的文件类型,几乎没什么区别,比如都支持导出 word、excel、pdf、txt 等。

    至于使用的技术细节,这里就不做详细讨论了,像市面上最多的用 java 开发的报表工具,基本都是借助第三方开源的工具包,如 poi 导出 excel、itext 导出 pdf 等。

    需要强调的是,虽然商业报表工具一般都能导出希望的条件,但效果可能差出千万里,不能简单地听厂商宣传说能与不能,还要看好与不好。报表工具模型有传统条带式与新型网格式两种,前者在设计报表的时候就存在位置摆放精度不准,边框间重合、对齐等难搞的问题,结果会导致导出的文件出现失真的情况,或者搞出一大堆碎格子,反正都不是想要的效果;而后者才能充分体现表格的规律性,导出时能保证无失真。

    imagepng

    除了基本导出功能外,还会有些个性化需求,比如报表不需要展现,希望直接批量导出多个报表、多个报表导出到一个 excel 文件等。大多数国产老厂商也都提供了丰富的 api,例子一搜一堆,可轻松扩展导出能力。比如下面示例,几行代码解决批量导一个 excel 文件。

    imagepng

    尽管新型网格式设计器对于基本的导出效果都做的挺好了,各产品间也几乎无差异,但对于一些真正特殊格式或要求的报表,也不是谁都能搞好的。

    比如,word 报告式的报表

    imagepng
    图一

    这类报告用报表工具做的话都得是硬画(如富文本),好处在于可以让数据动态变化,图表设计更加灵活,不会因为数据不同,还要重复修改文件。但是有很大的缺点,比如页面展现尽管看着有标题格式等表现,但是导出 word 会发现实际页面上只是标题效果,word 内是正文了,还包括一些换行、排版,做起来麻烦,导出后的效果也无法完全达到预期效果。

    对于这种需求,其实还有更好的解决方案,比如我们可以用报表工具结合一些 api 来搞,像一些固定内容,如标题了、固定描述性的文字了就放在 word 文件内做好,在需要放入表格或图表的位置插入个书签。

    imagepng

    通过报表工具提供的 api 把计算后的报表结果插入到对应的书签位置就可以了。

    这么做,避免了硬排版(可以更好布局),方便调整样式,提高报告式报表开发效率的同时,导出的 word 也更符合报告的需求(图一)。详细方案可参考 怎样自动把报表插入到 word 文档中

    再如,产品中可能用到了第三方的展现控件,像开源的 echarts 统计图,图形丰富、展现酷炫,常被集成到报表中使用,但有个麻烦的事儿是没法导出。其中的原因是,报表导出是后台程序实现,而 echarts 需要从浏览器(前端)中截取图形才能导出,如果报表一页呈现,这个还好处理,一旦报表分了多页,echarts 图形也就可能分布到多页内了,而我们是无法从浏览器截取到当前页未展现的 echarts 图的,所以这个就要考察报表工具的功能完善度,方案实际比较清晰,把所有的 echarts 图形拿到,交给后台放到报表对应的位置就行,关键是看报表工具是不是已经解决了。想了解报表工具解决导出 echarts 方案细节的,推荐 如何才能导出和打印 Echarts 图形? 学习了解下。

    从上面的例子可以了解到,尽管宣传上每个报表工具的导出功能上还都挺全面的,基本的导出也支持。但具体到细节及扩展能力,可比较的功夫还是很多的。那我们在选产品的时候,导出基本效果就够用了?还是有些特殊的表样、需要特别的导出效果、导出功能扩展?那就要根据需求,花点时间扣扣细节,比比细节了。

    对进一步报表和 BI 技术感兴趣的同学还可以搜索“乾学院”,上面有整套的免费“商业智能”技术课程,. 或者直接点下面的链接也可以 :
    http://www.raqsoft.com.cn/wx/course-Business-Intelligence.html

    展开全文
  • 前言 ...Pandas非常善于处理大规模数据,支持将结果导出到CSV,Excel,HTML,json等文件中。 如果您想将 多种信息(excel、图片等)组合 到一个文档中,那么事情变得更加困难。今天我们介绍如何将ex...

    前言

    Pandas非常善于处理大规模数据,支持将结果导出到CSV,Excel,HTML,json等文件中。 如果您想将 多种信息(excel、图片等)组合 到一个文档中,那么事情变得更加困难。今天我们介绍如何将excel更好看的输出到pdf中,然后使用Jinja模板和WeasyPrint 再将其转换为独立的PDF文档。

    操作流程

    使用Pandas将数据输出到Excel文件中的多个工作表或者用DataFrames创建多个Excel文件非常方便。 但是,如果您想将 多种信息(excel、图片等)组合 输出到一个文件中,那么直接从Pandas进行操作的方法并不多。 幸运的是,万能的python有很多选项可以帮助我们。

    在本文中,我将采用以下流程来创建多页PDF文档。

    webp

    工具

    我决定使用HTML作为模板语言,因为它可能是生成结构化数据最便捷的方法,支持各种格式数据(如图片、excel表)。我也认为每个人都知道(或可以弄清楚)足够的HTML知识来生成一个简单的报告。

    这个工作流程中最困难的部分是弄清楚如何将HTML呈现为PDF。我觉得还没有最佳的解决方案,但我选择了 WeasyPrint ,因为它仍然在积极维护,我发现我可以相对容易地使它工作。作为替代方案,我过去使用过xhtml2pdf,它的效果也很好,遗憾的是该库缺乏文档说明,但它已存在一段时间,并且确实可以从HTML生成PDF。

    数据

    如上所述,我们将使用之前文章中的相同数据集。 为了使这一切成为一个独立的文章,下面是我如何导入数据,做描述性统计,及并生成关于CPU和软件销售的 数据透1视表 。

    导入模块,并读入销售渠道信息。


    webp

    对数据做透1视表

    sales_report = pd.pivot_table(df, index=["Manager", "Rep", "Product"], 
                                  values=["Price", "Quantity"],
                                  aggfunc=[np.sum, np.mean], 
                                  fill_value=0)
    sales_report.head()
    
    webp

    模板

    DataFrame拥有to_html()的方法,可以将dataframe数据转化为含有HTML格式的字符串。

    但是随着您的报告变得越来越复杂或您选择将Jinja模板用于您的网络应用,jinja的这些功能将为您提供良好的服务。Jinja的另一个不错的功能是它包含多个内置过滤器,这些过滤器允许我们以Pandas中难以做到的方式格式化我们的一些数据。

    为了在我们的应用程序中使用Jinja,我们需要做三件事:

    1. 创建一个模板
    2. 将变量添加到模板上下文中
    3. 将模板渲染为HTML

    这是一个非常简单的模板,我们称之为myreport.html:

    <!DOCTYPE html><html><head lang="en">
        <meta charset="UTF-8">
        <title>{{ title }}    </title></head><body>
        <h2>Sales Funnel Report - National</h2>
         {{ national_pivot_table }}</body></html>
    

    上面html代码中拥有 {{title}} 和 {{national_pivot_table }} 这两个关键词。这两个关键词用来接收需要渲染的数据,比如图片对象、dataframe对象等。

    要填充这些变量,我们需要创建一个Jinja环境并获取我们的模板对象:

    
    from jinja2 import Environment, FileSystemLoader
    env = Environment(loader=FileSystemLoader('.'))
    template = env.get_template('myreport.html')
    

    在上面的示例中,我假设模板位于当前目录中,但您可以将完整路径放到模板位置。

    另一个关键组件是 env 的创建。 这个变量是我们将数据(或对象)填充给模板的方式。 我们创建了一个名为 template_var 的字典,其中包含我们想要传递给模板的所有变量。

    请注意变量的名称如何与我们的模板匹配。即名称要与myreport.html中的{{}}夹住的关键词一样。

    template_vars = {"title" : "Sales Funnel Report - National",                 "national_pivot_table": sales_report.to_html()}
    

    最后一步是将 template_vars 渲染到html模板中,并输出为html字符串,最终我们将使用该html字符串来生成pdf报告。

    
    html_out = template.render(template_vars)
    

    为简洁起见,我不会显示完整的HTML,但您应该明白这一点。

    生成pdf

    pdf报告的生成部分相当简单,这里用到weasyprint库

    
    from weasyprint import HTML
    HTML(string=html_out).write_pdf("report.pdf")
    
    webp

    但是打开的pdf样式很简单,白底黑字并不美观。之所以这样是因为我们没有使用自定义样式表css,但是咱们不熟悉css,有一种简单的办法就是用成熟的css,这里我用的typography.css 作为填充表格时的样式表。这个css的优点有:

    1. 相对较小且易于理解
    2. 可以在PDF引擎中运行而不会抛出错误和警告
    3. 能让表格表格看起来很美观

    让我们尝试使用我们更新的样式表重新渲染它:

    HTML(string=html_out).write_pdf('beautiful_report.pdf', stylesheets=["typography.css"])
    
    webp

    图文来源于网络:侵删

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69912078/viewspace-2638226/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/69912078/viewspace-2638226/

    展开全文
  • 很多的小伙伴在为文件转换而烦恼,不知道怎么样才能将PPT转换成PDF文档的格式,下面小编就给大家简单的分享一个超实用的PPT转PDF的方法,希望大家会喜欢。 方法一:简单文档保存法 通过【文件】-【导出】-【创建 PDF...
  • Saiku查询完数据之后,可以以excel,pdf,csv等格式将数据导出,这里我们来讲一下怎么更改导出的文件名。 找到对应的导出方法所在的js文件:saiku-server\tomcat\webapps\ROOT\js\saiku\views\WorkspaceToolbar.js ...
  • Java文件下载功能实现

    千次阅读 2016-06-14 00:41:18
    在做web开发的时候,常常会有这样的功能,比如说导出excelpdf、txt等,将读取要导出的数据,然后生成临时文件,然后调用一个下载的子程序。现在我们来说说这个下载子程序怎么写吧。 首先生成的临时文件肯定是有...
  • 第8章 POI报表的高级应用 掌握基于模板打印的POI报表导出 理解自定义工具类的执行流程 熟练使用SXSSFWorkbook完成百万数据报表打印 理解基于事件驱动的POI报表导入 1 模板打印 1.1 概述 自定义生成Excel报表文件还是...
  • XCLWinKits是款收录了windows常用工具的软件工具箱,内置多款实用软件,包括文件格式转换、文本处理、加密解密、编码转换等功能,甚至无需安装office即可实现Word、ExcelPdf、HTML等文档内容的修改。XCLWinKits...
  • →人名字文件夹中有word、excelpdf、jpg格式的材料 二、需要功能是: 1.打开“软件”后,点击导入数据,然后就选择“档案”文件,点击“更新”,档案文件夹的内容就全部出现在了软件左侧,档案文件夹中内容有...
  • 它可以将PDF里的表格转换成excel文件,这样在编辑表格时会更加的方便,另外,还可以导出成CSV格式的文件,适合导出通讯录时使用,不仅如此,该软件还可以手动分割表格,想怎么分就怎么分。 VeryPDF PDF Table ...
  • 因为水晶报表授权价格的问题,打算在新的项目中使用Visual Studio 2005中自带的MicosoftReportViewer,但VS2005中的MicosoftReportViewer在浏览的时候不能直接打印,只能先导出Excel或者PDF文件再使用Excel或PDF...
  • 因为水晶报表授权价格的问题,打算在新的项目中使用Visual Studio 2005中自带的MicosoftReportViewer,但VS2005中的MicosoftReportViewer在浏览的时候不能直接打印,只能先导出Excel或者PDF文件再使用Excel或PDF...
  • * 增加 paf转换组件,微信中解析pdf文件 20190301 * 增加 移动端 自定义日历组件 * 可以根据需求自定义修改 20190125 * 增加 vue 项目初始化目录 20190121 *更新 address 地址选择四级联动组件 适配移动端 750...
  • 因为水晶报表授权价格的问题,打算在新的项目中使用Visual Studio 2005中自带的MicosoftReportViewer,但VS2005中的MicosoftReportViewer在浏览的时候不能直接打印,只能先导出Excel或者PDF文件再使用Excel或PDF...

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

excel怎么导出pdf文件