『壹』 java调用freemarker模板文件在服务器生成pdf或word文
在线预览文档功能实现概述
在前年的项目中,需要一个在线预览功能,即用户上传的Word或Excel等文档可以不经过下载直接在线预览。项目部署在Linux上,对比了多种解决方案后,决定将所有文档统一转化为PDF,使用H5技术的PDF在线预览模块来实现在线预览。此过程涉及两个关键问题:文档转换为PDF和在线预览PDF。
首先,需解决用户上传文档转化为PDF的问题。考虑到项目部署环境,排除了基于MS Office的方案,最终选定使用LibreOffice的SDK完成转换。为解决Java与LibreOffice交互的问题,采用开源的JODConverter插件。测试结果显示转换效果满意,速度理想,但该插件不支持多线程。
其次,实现在线预览PDF的方案。考虑到Flash的复杂性和高昂成本,选择了使用火狐自家的PDF.js,纯H5实现,无需任何插件,满足在线预览需求。但其不支持IE8以下浏览器,存在一定的兼容性限制。
以上方案解决了文档预览问题,对于数据填写后生成固定格式的文档需求,可参考此解决方案。FreeMarker作为视图层的一部分,与文档生成属于不同层次,与生成文档并无直接关联。
针对生成固定格式文档的需求,推荐使用Java中强大的Apache POI库。POI库对于读取文档功能表现良好,但对于写入功能,尤其是对样式操作的直观性有所欠缺。尽管如此,对于所谓的“固定格式表格”生成,POI库应能满足需求。
综上所述,解决文档预览和生成固定格式文档的问题,推荐方案为:POI(生成文档)-> LibreOffice + JODConverter(转换文档至PDF)。如果需要在线预览文档,则使用PDF.js。此方案在满足用户需求的同时,兼顾了功能实现的高效性和兼容性。
『贰』 怎么用java动态生成pdf文档
Flying-Saucer + iText + Velocity
1. 第一步
将jar包放到你的工程里,需要的jar如下:
bcprov-jdk15-140.jar
core-renderer.jar
iText-2.0.8.jar
iTextAsian.jar
velocity-1.4.jar
Jar包下载地址:http://code.google.com/p/flying-saucer/downloads/list
2. 第二步
设计模版,进行排版调整样式,css样式也可以导入@import 等,通过Velocity模版引擎动态替换 页面内容,以下是模版内容:
<?xml version="1.0" encoding="UTF-8" ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>PDF模版</title>
<style type="text/css">
<!--
body {
font: 100% Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
.oneColLiqCtrHdr #container {
width: 100%;
margin: 0 auto;
text-align: left;
}
div.header-left {display: none}
div.header-right {display: none}
div.footer-left {display: none}
div.footer-right {display: none}
『叁』 Java如何使用Java创建一个空的PDF文档
package com.yii;import java.io.IOException;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;// 需要下 apache pdfbox包和apache.commons.loggin乌,下载地址:http://pdfbox.apache.org/download.cgi 和 http://commons.apache.org/proper/commons-logging/download_logging.cgi// 在本示例中下载使用的是:pdfbox-2.0.7.jar // 将下载的pdfbox-2.0.7.jar添加到Eclipse项目依懒库中。// 右键点击:"java_apache_pdf_box"->"Bulid Path"->"Add External Artchives...",然后选笃下载的"pdfbox-2.0.7.jar"和"commons-logging-1.2.jar"文件 public class CreatingEmptyPdf {
public static void main(String args[]) throws IOException {
// Creating PDF document object
PDDocument document = new PDDocument();
// Add an empty page to it
document.addPage(new PDPage());
// Saving the document
document.save("F:/worksp/javaexamples/java_apache_pdf_box/BlankPdf.pdf");
System.out.println("PDF created");
// Closing the document
document.close();
}}