javascript+java实现html转化为PDF文档

  1. 项目中引入相关的jar包

    itextasian-1.5.2.jar

    itext-4.2.1.jar

    itextpdf-5.1.2.jar

    itextpdf-5.1.2-sources.jar

  2. 在需要将页面转化为pdf文档的页面中添加按钮

     <span id="download" onclick="exportpdf();">转化为PDF</span>

     <a id="pdfdown" style="display: none"><span id="spanid">导出PDF</span></a>  

  3. 然后引入相关的js以及jar包

    html2canvas.js

  4.编写生成pdf文档的js代码

   

   /*

    * 导出pdf文档
    */
    function exportpdf(){
      var title = "";
      layer.prompt({title: "请输入pdf文件名", formType: 0,end:function(){
      if(title != "" && title != null){
        shot(title);
      }
    }}, function(pass, index){
      title = pass;
      layer.close(index);
    });
  };

  //将页面转化为图片
  function shot(title){
    $("#download").remove();    //隐藏按钮
    html2canvas(document.body, { //截图对象
    //此处可配置详细参数
      onrendered: function(canvas) { //渲染完成回调canvas
      canvas.id = "mycanvas";
      // 生成base64图片数据
      var dataUrl = canvas.toDataURL("image/png"); //指定格式,也可不带参数
      var formData = new FormData(); //模拟表单对象
      formData.append("imgData",convertBase64UrlToBlob(dataUrl)); //写入数据
      var xhr = new XMLHttpRequest(); //数据传输方法
      xhr.open("POST", "../pdftools/exportPdf?filename="+title); //配置传输方式及地址
      xhr.send(formData);
      xhr.onreadystatechange = function(){ //回调函数
      if(xhr.readyState == 4){
        if (xhr.status == 200) {
          var back = JSON.parse(xhr.responseText);
          if(back["mesg"] == "success"){
            $("#pdfdown").attr("href","../file/downloadFile?fileName="+back[‘fileName‘]);
            $("#spanid").click();
            $("#bodyId").prepend("<span onclick=\"exportpdf();\" id=\"download\">转化为PDF</span>");
            layer.msg("Pdf导出成功",{icon:1,time:2000});
          }else{
            layer.msg("Pdf导出失败",{icon:2,time:2000});
          }
        }
       }
     };
    }
  });
}
//将以base64的图片url数据转换为Blob
function convertBase64UrlToBlob(urlData){
  //去掉url的头,并转换为byte
  var bytes=window.atob(urlData.split(‘,‘)[1]);
  //处理异常,将ascii码小于0的转换为大于0
  var ab = new ArrayBuffer(bytes.length);
  var ia = new Uint8Array(ab);
  for (var i = 0; i < bytes.length; i++) {
    ia[i] = bytes.charCodeAt(i);
  }
  return new Blob( [ab] , {type : "image/png"});
}

  5. 编写后台方法

package com.sd.ddo.controller.pdf;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.util.Iterator;
import java.util.Map;

import javax.imageio.stream.FileImageOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import javax.swing.filechooser.FileSystemView;

import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSONObject;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfWriter;
import com.sd.cloud.util.alipay.HttpRequest;
import com.sd.cloud.util.alipay.HttpResponse;
import com.sd.cloud.util.common.CommonUtil;
import com.sd.cloud.util.common.SDConstants;
/**
 * 导出pdf文档
 * @author yugb
 * 将html,jsp页面转化为pdf文档
 */
@Controller
@RequestMapping("/pdftools")
public class PDFExportController {
    /**
     * 导出pdf文档
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     * @throws DocumentException
     */
    @SuppressWarnings("rawtypes")
    @RequestMapping("/exportPdf")
    public @ResponseBody Object exportPdf(MultipartHttpServletRequest request,HttpServletResponse response)throws ServletException, IOException, DocumentException {
        JSONObject result = new JSONObject(); //自定义结果格式
        try{
             String filename = URLDecoder.decode(request.getParameter("filename"),"utf-8");
             String filePath =SDConstants.fileDir+filename+".pdf";
             String imagePath = SDConstants.fileDir +filename+".bmp";
             Document document = new Document();
             Map getMap = request.getFileMap();
             MultipartFile mfile = (MultipartFile) getMap.get("imgData"); //获取数据
             InputStream file = mfile.getInputStream();
             byte[] fileByte = FileCopyUtils.copyToByteArray(file);
             FileImageOutputStream imageOutput = new FileImageOutputStream(new File(imagePath));
             imageOutput.write(fileByte, 0, fileByte.length);//生成本地图片文件
             imageOutput.close();

             PdfWriter.getInstance(document, new FileOutputStream(filePath)); //itextpdf文件
             document.open();
             Image image = Image.getInstance(imagePath); // itext-pdf-image
             float heigth = image.getHeight();
             float width = image.getWidth();
             int percent = getPercent(heigth, width);  //按比例缩小图片
             image.setAlignment(Image.MIDDLE);
             image.scalePercent(percent+3);
             document.add(image);
             document.close();
             result.put("fileName", filename+".pdf");
             result.put("imageName", filename+".bmp");
             result.put("mesg", "success");
        }catch (DocumentException de) {
             System.err.println(de.getMessage());
        }catch (Exception e) {
            e.printStackTrace();
            result.put("mesg", "error");
        }
        return result;
    }
    /**
     * 获得百分比
     * @param h
     * @param w
     * @return
     */
    private static int getPercent(float h, float w) {
       int p = 0;
       float p2 = 0.0f;
       p2 = 560 / w * 100;
       p = Math.round(p2);
       return p;
    }
}

原文地址:https://www.cnblogs.com/yugb/p/9571599.html

时间: 2024-10-07 12:27:44

javascript+java实现html转化为PDF文档的相关文章

java技术开发 ,将pdf文档转成图片,使用PDFRenderer-0.9.0架包

其实使用也不加简单,将架包导入,但是,我导入了架包后,有些使用的类方法没有,有导入了基础架包rt.jar 方法实现: public ldc_pdftojpg(String pdfpath, String jpgpath) throws IOException { File file = new File(pdfpath); RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.

Java实现web在线预览office文档与pdf文档实例

https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档与pdf文档实例, 1.首先我们需要找到可以把office转换成pdf的方法,查找资料发现有openoffice这一软件可以把office转换成pdf,这一软件先下载下来,然后记住自己安装的在那个位置.然后在cmd环境下进入安装目录的program目 云计算 云服务器ECS 大数据 建站 备案 文档

java将office文档pdf文档转换成swf文件在线预览

java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org   openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库) 笔者下载的是openoffice.org 3.3.0.下载完直接安装即可.      但是,我们还需要启动openof

Java实现office文档与pdf文档的在线预览功能

最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完.查找资料发现我们要实现的过程就是把office转换成pdf,当然pdf就不用转换了.然后在pdf转换为swf文件,在浏览器实现预览swf文件.整个过程就是这样,看起来很简单,实际操作起来会出现各种问题.下面我就把自己写的这一小功能记录下来. 1.首先我们需要找到可以把office转换成pdf的方法

java导出pdf文档

java导出pdf文档,多是iText实现的,可以创建pdf文档,并向文档写入内容. 1 导入包:itext-2.0.6.jar       itext必须使用的包. iTextAsian.jar      向pdf写入中文必须的包. 2 代码: package com.exp.pdf; import java.awt.Color; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowa

Java生成PDF文档(表格、列表、添加图片等)

需要的两个包及下载地址: (1)iText.jar:http://download.csdn.net/source/296416 (2)iTextAsian.jar(用来进行中文的转换):http://download.csdn.net/source/172399 代码如下: 1 import java.awt.Color; 2 import java.io.FileOutputStream; 3 import com.lowagie.text.Cell; 4 import com.lowagi

java操作office和pdf文件java读取word,excel和pdf文档内容

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.zip 

利用Java动态生成 PDF 文档

利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那么目前最佳的解决方案,你可能会想到 iText ,对没错... iText+(Velocity / Freemarker)可以实现.不过据我熟悉,iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式会让你头大的.不要失望,接下来

[开源框架推荐]Icepdf:纯java的pdf文档的提取和转换库

ICEpdf 是一个轻量级的开源 Java 语言的 PDF 类库.通过 ICEpdf 可以用来浏览.内容提取和转换 PDF 文档,而无须一些本地PDF库的支持. 可以用来做什么? 1.从pdf文件中提取所有的文字或信息,比如给pdf文档做摘要 2.把pdf转换成图片,这个功能非常的棒,比如给pdf文件做缩略图或者直接做一个纯js的pdf阅读器. 3.pdf文档的分页打印和信息搜索. 4.pdf中添加.修改或删除批注信息. 在pdf到图片转换方面,最好的开源产品. 官方地址:http://www.