精华内容
下载资源
问答
  • java将Word转换成PDF

    万次阅读 热门讨论 2018-12-24 15:07:23
    网上有很多将Word转换成PDF的方式,这里找了两种比较简单的工具:jacob和aspose。 1.jacob 使用Jacob需要一些环境的准备,首先需要Jacob的jar包: 然后还需要jacob版本对应的ddl文件放到jdk或jre的bin目录里...

    网上有很多将Word转换成PDF的方式,这里找了两种比较简单的工具:jacob和aspose。

    1.jacob

    使用Jacob需要一些环境的准备,首先需要Jacob的jar包:

    然后还需要将jacob版本对应的ddl文件放到jdk或jre的bin目录里:

    下面只需要使用写好的工具类就可以了:

    public class Word2PdfJacobUtil {
    
    	/* 转PDF格式值 */
    	private static final int wdFormatPDF = 17;
    	/**
    	 * Word文档转换
    	 * 
    	 * @param inputFile
    	 * @param pdfFile
    	 */
    	public static boolean word2PDF(String inputFile, String pdfFile) {
    		ComThread.InitMTA(true);
    	    long start = System.currentTimeMillis();
    	    ActiveXComponent app = null;
    	    Dispatch doc = null;
    	    try {
    	        app = new ActiveXComponent("Word.Application");// 创建一个word对象
    	        app.setProperty("Visible", new Variant(false)); // 不可见打开word
    	        app.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
    	        Dispatch docs = app.getProperty("Documents").toDispatch();// 获取文挡属性
    
    	        System.out.println("打开文档 >>> " + inputFile);
    	        // Object[]第三个参数是表示“是否只读方式打开”
    	        // 调用Documents对象中Open方法打开文档,并返回打开的文档对象Document
    	        doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch();
    	        System.out.println("转换文档 [" + inputFile + "] >>> [" + pdfFile + "]");
                // 调用Document对象的SaveAs方法,将文档保存为pdf格式
                // word保存为pdf格式宏,值为17
                Dispatch.call(doc, "SaveAs", pdfFile, wdFormatPDF);// word保存为pdf格式宏,值为17
    
    	        long end = System.currentTimeMillis();
    
    	        System.out.println("用时:" + (end - start) + "ms.");
    	        return true;
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	        System.out.println("========Error:文档转换失败:" + e.getMessage());
    	    } finally {
    	        Dispatch.call(doc, "Close", false);
    	        System.out.println("关闭文档");
    	        if (app != null)
    	            app.invoke("Quit", new Variant[] {});
                // 如果没有这句话,winword.exe进程将不会关闭
                ComThread.Release();
                ComThread.quitMainSTA();
            }
    	    return false;
    	}
    }

    测试运行:

    public static void main(String[] arg){
    		String docPath = "C:\\Users\\Administrator\\Desktop\\test.docx";
    		String pdfPath = "C:\\Users\\Administrator\\Desktop\\test.pdf";
            boolean res = Word2PdfJacobUtil.word2PDF(docPath, pdfPath);
            System.out.println(res);
        }

    结果如下:


    2.aspose

    使用aspose不需要像jacob那样往jdk里加入ddl文件,但是需要在项目里加入一个license.xml,不然生成的pdf会有水印

    license.xml如下:

    <?xml version="1.0" encoding="UTF-8" ?> 
    <License>
      <Data>
        <Products>
          <Product>Aspose.Total for Java</Product>
          <Product>Aspose.Words for Java</Product>
        </Products>
        <EditionType>Enterprise</EditionType>
        <SubscriptionExpiry>20991231</SubscriptionExpiry>
        <LicenseExpiry>20991231</LicenseExpiry>
        <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
      </Data>
      <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
    </License>

    引入jar包:

    工具类:

    public class Word2PdfAsposeUtil {
    
    	
    	public static boolean getLicense() {
            boolean result = false;  
            try {  
                InputStream is = Test.class.getClassLoader().getResourceAsStream("\\license.xml"); // license.xml应放在..\WebRoot\WEB-INF\classes路径下
                License aposeLic = new License();  
                aposeLic.setLicense(is);  
                result = true;  
            } catch (Exception e) {
                e.printStackTrace();  
            }  
            return result;  
        }  
      
        public static boolean doc2pdf(String inPath, String outPath) {
            if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生  
                return false;  
            }
            FileOutputStream os = null;
            try {  
                long old = System.currentTimeMillis();
                File file = new File(outPath); // 新建一个空白pdf文档
                os = new FileOutputStream(file);
                Document doc = new Document(inPath); // Address是将要被转化的word文档  
                doc.save(os, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,  
                                             // EPUB, XPS, SWF 相互转换  
                long now = System.currentTimeMillis();
                System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒"); // 转化用时
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }finally {
                if (os != null) {
                    try {
                        os.flush();
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return true;
        }  
      }

    测试运行:

     public static void main(String[] arg){
            String docPath = "C:\\Users\\Administrator\\Desktop\\test.docx";
            String pdfPath = "C:\\Users\\Administrator\\Desktop\\test.pdf";
            Word2PdfAsposeUtil.doc2pdf(docPath,pdfPath);
           }

    结果:

    展开全文
  • jabcob Java将Word转换成PDF的工具jar包,能够word、Excel等转化成PDF格式输出
  • 使用Java将word转换成pdf文件

    热门讨论 2012-07-19 16:43:49
    大家可以试一试,使用Java将word转换成pdf文件
  • java将WORD文档转换成pdf文件

    万次阅读 2007-10-14 11:31:00
    本文试验的是将WORD转换成PDF文件.实现思路一、先WORD文档转换HMTL文件格式(参阅我的前一文《JAVA操作WORD文档)。二、用流读取HTML文件。其保存在一个String对象中。三、用Itext组件,生成的字符串对象...

    总结对jacob和Itext学习总结.本文试验的是将WORD转换成PDF文件.

    实现思路

    一、先将WORD文档转换成HMTL文件格式(参阅我的前一文《JAVA操作WORD文档)。

    二、用流读取HTML文件。将其保存在一个String对象中。

    三、用Itext组件,将生成的字符串对象转换成PDF文件。

    四、在要生成的PDF文件加入所需信息。

    在此:有几点问题如还请前辈解答:1、怎么控制我在PDF文件加入某段文字的字体、大小、间距等。

    /**
     * 生成PDF文件
     * @author 于学明
     *
     */
    public class CreatePdf {

    /**
     * 获得PDF文件所需图片
     * @param imagePath  //图片文件路径
     * @return
     * @throws BadElementException
     * @throws MalformedURLException
     * @throws IOException
     */
     public Image getImageFile(String imagePath) throws BadElementException, MalformedURLException, IOException{
      Image jpg = Image.getInstance(imagePath);
      //设置图片居中
      jpg.setAlignment(Image.MIDDLE);
      return jpg;
     }
     
     /**
      * 获得文字内容
      * @param inputFilePath 原DOC文件路径
      * @param outputFilePath 生成HTML文件路径
      * @return
      */
     public String getPdfContext(String inputFilePath,String outputFilePath){
    //  读取DOC文件内容
      String htmlText = new FileExtracter().extractDoc(inputFilePath, outputFilePath);
      //把读取的HTML文件,生成一个字符串
      String pdf =  new FileExtracter().getContext(htmlText);
      
      return pdf;
     }
     /**
      * 用ITEXT生成指定PDF格式文件
      * @param imagePath0
      * @param inputFilePath
      * @param outputFilePath
      * @param imagePath1
      * @param outputPdf
      * @return
      * @throws DocumentException
      * @throws IOException
      */
     public String createPDF(String imagePath0,String inputFilePath,String outputFilePath,String imagePath1,String outputPdf) throws DocumentException, IOException{
      
      //返回的pdf全路径  
      String returnPdf="";  
      File dir=new File("out_pdf");
      //若目录不存在则新建该目录
      if(!dir.exists()){
       dir.mkdir();
      }
        
      //新建空白文件
      File outPdfPath=new File(dir+"/"+outputPdf);//输出pdf文件的全路径
      try {
       outPdfPath.createNewFile();
      } catch (IOException e1) {
       e1.printStackTrace();
       returnPdf=null;
      }
      //定义PDF文件大小和边距
      Document document = new Document(PageSize.A4, 50, 50, 50, 50);  
      //生成PDF文件的路径
      PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(outPdfPath));
      writer.setViewerPreferences(PdfWriter.PageModeFullScreen);
      document.open();
      //文件头图片
      document.add(getImageFile(imagePath0));
      //定义字体,可以正常显示中文
      BaseFont bfComic = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
      Font font = new Font(bfComic, 12, Font.NORMAL);
        
      String pdf =  getPdfContext(inputFilePath, outputFilePath);
    //  String str=new String(pdf.getBytes("ISO-8859-1"),"GB2312");
      document.add(new Paragraph(pdf,font));
      //文件尾图片
      document.add(getImageFile(imagePath1));
      document.close();
      returnPdf = outPdfPath.getAbsolutePath();
      return returnPdf;
     }
     
     /**
      *  用ITEXT生成指定PDF格式文件
      * @param imagePath
      * @param inputFilePath
      * @param outputFilePath
      * @param outputPdf
      * @return
      * @throws DocumentException
      * @throws IOException
      */
     public String createPDF(String imagePath,String inputFilePath,String outputFilePath,String outputPdf) throws DocumentException, IOException{
      
      //  返回的pdf全路径  
      String returnPdf="";  
      File dir=new File("out_pdf");
      //若目录不存在则新建该目录
      if(!dir.exists()){
       dir.mkdir();
      }
        
      //新建空白文件
      File outPdfPath=new File(dir+"/"+outputPdf);//输出pdf文件的全路径
      try {
       outPdfPath.createNewFile();
      } catch (IOException e1) {
       e1.printStackTrace();
       returnPdf=null;
      }
      Document document = new Document(PageSize.A4, 50, 50, 50, 50);  
      //生成PDF文件的路径
      PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(outPdfPath));
      writer.setViewerPreferences(PdfWriter.PageModeFullScreen);
      document.open();  
      document.add(getImageFile(imagePath));
    //  定义字体,可以正常显示中文
      BaseFont bfComic = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
      Font font = new Font(bfComic, 12, Font.NORMAL);
        
      String pdf =  getPdfContext(inputFilePath, outputFilePath);
    //  String str=new String(pdf.getBytes("ISO-8859-1"),"GB2312");
      document.add(new Paragraph(pdf,font));
      document.close();
      returnPdf = outPdfPath.getAbsolutePath();
      return returnPdf;
     }

     public static void main(String [] args){
      
      try {
       String s = new CreatePdf().createPDF("c:/a.gif","c:/s.doc", "c:/x.html", "a.pdf");
       System.out.println(s);
      } catch (DocumentException e) {
       // TODO 自动生成 catch 块
       e.printStackTrace();
      } catch (IOException e) {
       // TODO 自动生成 catch 块
       e.printStackTrace();
      }
     }
    }
     

    展开全文
  • java word转换成pdf

    2016-09-18 16:17:06
    wordpdf文件
  • Java将word成pdf

    千次阅读 2018-09-19 15:03:10
    最近在工作中需要上传简历文件,需求是可以上传word文档,但在前端预览时iframe不支持word预览,所以需要把word文档转成pdf,网上有很多种转换的方法,不列举出来,我使用的不需要引入jar包,显示效果接近,但速度慢...

    最近在工作中需要上传简历文件,需求是可以上传word文档,但在前端预览时iframe不支持word预览,所以需要把word文档转成pdf,网上有很多种转换的方法,不列举出来,我使用的不需要引入jar包,显示效果接近,但速度慢,如果需求速度快的小伙伴可以选择其他方法

    直接贴上代码

    import java.io.File;
    import java.io.FileInputStream;
    import java.time.LocalDateTime;
    import java.util.Date;
    import java.util.List;
    import java.util.Optional;
    import java.util.Random;
    /**
         * 描述: word转PDf
         *
         * @param docUrl
         * @return
         * @auther 
         * @date 2018/9/14 11:22
         */
        private String getWordToPdf(String docUrl) {
            String fileUrl = docUrl;
            try {
                String suffix = docUrl.substring(docUrl.lastIndexOf("."), docUrl.length()).toLowerCase();
                if (StringUtils.equals(suffix, ".doc") || StringUtils.equals(suffix, ".docx")) {
                    XDocService xDocService = new XDocService();
                    File file = new File(createFilePath());
                    xDocService.to(docUrl, file);
    
                    FileInputStream inputStream = new FileInputStream(file);
                    fileUrl = FileUtil.uploadFileForSurffix(inputStream, ".pdf", "resumeAttachment/");
                    file.delete();
                }
            } catch (Exception e) {
                log.error("转换文件失败", e);
            }
            return fileUrl;
        }
    
        /**
         * 描述: 生成文件路径
         *
         * @param
         * @return
         * @auther 
         * @date 2018/8/9 10:42
         */
        private static String createFilePath() throws Exception {
            //获取当前文件的根路径
            File path = new File(ResourceUtils.getURL("classpath:").getPath());
            if (!path.exists()) path = new File("");
    
            //路径,盘符路径
            StringBuilder codeUrl = new StringBuilder().append(path.getAbsolutePath()).append("/static/attachment");
    
            String filePath = codeUrl.toString();
            File filedir = new File(filePath);
            if (!filedir.exists())
                filedir.mkdirs();
            codeUrl.append("/").append(getFileName()).append(".pdf");
            return codeUrl.toString();
        }
    
    
    package com.dxyl.util.file;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.io.*;
    import java.lang.annotation.*;
    import java.lang.reflect.Array;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.net.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    /**
     * XDoc服务
     *
     * @author xdoc
     * @version 11.4.2
     */
    public class XDocService {
        /**
         * 默认服务器地址
         */
        public static String DEFAULT_URL = "http://www.xdocin.com";
        /**
         * 默认账号口令
         */
        public static String DEFAULT_KEY = "";
        private String url;
        private String key;
    
        /**
         * 服务地址
         *
         * @return
         */
        public String getUrl() {
            return url;
        }
    
        /**
         * 服务地址
         *
         * @param url
         */
        public void setUrl(String url) {
            this.url = url;
        }
    
        /**
         * 账号口令
         *
         * @return
         */
        public String getKey() {
            return key;
        }
    
        /**
         * 账号口令
         *
         * @param key
         */
        public void setKey(String key) {
            this.key = key;
        }
    
        /**
         * 构造器
         */
        public XDocService() {
            this(DEFAULT_URL, DEFAULT_KEY);
        }
    
        /**
         * 构造器
         *
         * @param url 服务地址
         */
        public XDocService(String url) {
            this(url, DEFAULT_KEY);
        }
    
        /**
         * 构造器
         *
         * @param url 服务地址
         * @param key 账号
         */
        public XDocService(String url, String key) {
            this.url = url;
            this.key = key;
        }
    
        /**
         * 转换为其它格式文件
         *
         * @param xdoc xdoc
         * @param file 其它格式文件,如:a.pdf
         * @throws IOException
         */
        public void to(File xdoc, File file) throws IOException {
            to(xdoc.getAbsolutePath(), file);
        }
    
        /**
         * 转换为其它格式文件
         *
         * @param xdoc xdoc文本<br>
         *             URL:文档URL地址,格式支持:xdoc、json、docx、epub、txt、rtf等,支持datauri协议,可传递二进制数据,支持本地文件<br>
         *             纯文本:以"text:"开头的文本<br>
         *             JSON:符合XDOC-JSON规范的JSON文本<br>
         *             XML:符合XDOC-XML规范的XML文本<br>
         *             HTML:用html标签括起来的html文本,如:&lt;html&gt;&lt;h1&gt;Hello&lt;/h1&gt;&lt;/html&gt;
         * @param file 其它格式文件,如:a.pdf
         * @throws IOException
         */
        public void to(String xdoc, File file) throws IOException {
            to(xdoc, new FileOutputStream(file), getFormat(file.getName()));
        }
    
        /**
         * 转换为其它格式,保存到指定流中
         *
         * @param xdoc   xdoc
         * @param out    输出目标,OutputStream或HttpServletResponse
         * @param format format
         * @throws IOException
         */
        public void to(String xdoc, Object out, String format) throws IOException {
            Map<String, Object> param = new HashMap<String, Object>();
            param.put("_func", "to");
            param.put("_xdoc", xdoc);
            param.put("_format", format);
            invoke(checkParam(param), out);
        }
    
        /**
         * 转换为其它格式并发送
         *
         * @param xdoc   xdoc
         * @param to     目标,支持ftp、http、mail、datauri等
         * @param format format
         * @throws IOException
         */
        public String to(String xdoc, String to, String format) throws IOException {
            Map<String, Object> param = new HashMap<String, Object>();
            param.put("_func", "to");
            param.put("_xdoc", xdoc);
            param.put("_to", to);
            param.put("_format", format);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(checkParam(param), out);
            return new String(out.toByteArray(), "UTF-8");
        }
    
        /**
         * 运行xdoc
         *
         * @param xdoc  xdoc
         * @param param 参数
         * @param file  目标文件
         * @throws IOException
         */
        public void run(File xdoc, Map<String, Object> param, File file) throws IOException {
            if (!param.containsKey("_xformat")) {
                param.put("_xformat", getFormat(file.getName()));
            }
            run(xdoc.getAbsolutePath(), param, file);
        }
    
        /**
         * 运行xdoc
         *
         * @param xdoc  xdoc
         * @param param 参数
         * @param file  目标文件
         * @throws IOException
         */
        public void run(String xdoc, Map<String, Object> param, File file) throws IOException {
            run(xdoc, param, new FileOutputStream(file), getFormat(file.getName()));
        }
    
        /**
         * 运行xdoc
         *
         * @param xdoc   xdoc
         * @param param  参数
         * @param out    输出目标,OutputStream或HttpServletResponse
         * @param format 目标格式
         * @throws IOException
         */
        public void run(String xdoc, Map<String, Object> param, Object out, String format) throws IOException {
            param.put("_func", "run");
            param.put("_xdoc", xdoc);
            param.put("_format", format);
            invoke(checkParam(param), out);
        }
    
        /**
         * 运行xdoc并发送
         *
         * @param xdoc   xdoc
         * @param param  参数
         * @param to     目标,支持ftp、http、mail、datauri等
         * @param format 目标格式
         * @throws IOException
         */
        public String run(String xdoc, Map<String, Object> param, String to, String format) throws IOException {
            param.put("_func", "run");
            param.put("_xdoc", xdoc);
            param.put("_to", to);
            param.put("_format", format);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(checkParam(param), out);
            return new String(out.toByteArray(), "UTF-8");
        }
    
        /**
         * 运行注解XDoc
         *
         * @param obj
         * @param file
         * @throws IOException
         */
        public void run(Object obj, File file) throws IOException {
            run(obj, new FileOutputStream(file), getFormat(file.getName()));
        }
    
        /**
         * 运行注解XDoc
         *
         * @param obj
         * @param out    目标流
         * @param format 目标格式
         * @throws IOException
         */
        public void run(Object obj, Object out, String format) throws IOException {
            run(obj, out, null, format);
        }
    
        /**
         * 运行注解XDoc
         *
         * @param obj
         * @param to     目标,支持ftp、http、mail、datauri等
         * @param format 目标格式
         * @throws IOException
         */
        public void run(Object obj, String to, String format) throws IOException {
            run(obj, null, to, format);
        }
    
        private void run(Object obj, Object out, String to, String format) throws IOException {
            String xurl = "";
            XDoc xdoc = obj.getClass().getAnnotation(XDoc.class);
            if (xdoc != null) {
                xurl = xdoc.value();
            }
            if (xurl.length() == 0) {
                xurl = "./" + obj.getClass().getSimpleName() + ".xdoc";
            }
            Field[] fields = obj.getClass().getDeclaredFields();
            boolean hasXParam = false;
            XParam xParam;
            Map<String, Object> param = new HashMap<String, Object>();
            String name;
            Object value;
            for (Field field : fields) {
                xParam = field.getAnnotation(XParam.class);
                if (xParam != null) {
                    hasXParam = true;
                    name = xParam.value();
                    if (name.length() == 0) {
                        name = field.getName();
                    }
                    try {
                        field.setAccessible(true);
                        value = field.get(obj);
                        if (name.equals("_xdoc")) {
                            xurl = String.valueOf(value);
                        } else {
                            param.put(name, value);
                        }
                    } catch (Exception e) {
                        throw new IOException(e);
                    }
                }
            }
            if (!hasXParam) { //没有指定xparam,传入所有属性
                for (Field field : fields) {
                    try {
                        field.setAccessible(true);
                        param.put(field.getName(), field.get(obj));
                    } catch (Exception e) {
                        throw new IOException(e);
                    }
                }
            }
            if (out != null) {
                this.run(xurl, param, out, format);
            } else {
                this.run(xurl, param, to, format);
            }
        }
    
        /**
         * 招呼
         *
         * @return
         * @throws IOException
         */
        public boolean hi() throws IOException {
            return invokeStringFunc("hi").equals("ok");
        }
    
        /**
         * 关于
         */
        public String about() throws IOException {
            return invokeStringFunc("about");
        }
    
        /**
         * 动态口令
         *
         * @return
         * @throws IOException
         */
        public String dkey() throws IOException {
            return invokeStringFunc("dkey");
        }
    
        /**
         * 修改口令
         *
         * @return
         * @throws IOException
         */
        public String ckey() throws IOException {
            return invokeStringFunc("ckey");
        }
    
        /**
         * 注册
         *
         * @param mail 邮件
         * @return
         * @throws IOException
         */
        public String reg(String mail) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "reg");
            params.put("_mail", mail);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (String) parse(out.toByteArray());
        }
    
        /**
         * 账户信息
         *
         * @return
         * @throws IOException
         */
        @SuppressWarnings("unchecked")
        public Map<String, String> acc() throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "acc");
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (Map<String, String>) parse(out.toByteArray());
        }
    
        /**
         * 基于ID上传
         *
         * @param id
         * @param file
         * @return
         * @throws IOException
         */
        public void sup(String id, File file) throws IOException {
            sup(id, toDataURI(file.getAbsolutePath()));
        }
    
        /**
         * 基于ID上传
         *
         * @param id
         * @param in
         * @throws IOException
         */
        public void sup(String id, InputStream in) throws IOException {
            sup(id, toDataURI(in));
        }
    
        private void sup(String id, String dataUri) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "sup");
            params.put("_id", id);
            params.put("_data", dataUri);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            parse(out.toByteArray());
        }
    
        /**
         * 基于ID下载
         *
         * @param id
         * @param file
         * @throws IOException
         */
        public void sdown(String id, File file) throws IOException {
            sdown(id, new FileOutputStream(file));
        }
    
        /**
         * 基于ID下载
         *
         * @param id
         * @param out 输出目标,OutputStream或HttpServletResponse
         * @throws IOException
         */
        public void sdown(String id, Object out) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "sdown");
            params.put("_id", id);
            invoke(params, out);
        }
    
        /**
         * 基于ID删除
         *
         * @param id
         * @return
         * @throws IOException
         */
        public boolean sremove(String id) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "sremove");
            params.put("_id", id);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return parse(out.toByteArray()).equals("ok");
        }
    
        /**
         * 创建目录
         *
         * @param dir
         * @return
         * @throws IOException
         */
        public boolean mkdir(String dir) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "mkdir");
            params.put("_dir", dir);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return parse(out.toByteArray()).equals("ok");
        }
    
        /**
         * 目录列表
         *
         * @param dir
         * @return
         * @throws IOException
         */
        @SuppressWarnings("unchecked")
        public List<Map<String, String>> dirlist(String dir) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "dirlist");
            params.put("_dir", dir);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (List<Map<String, String>>) parse(out.toByteArray());
        }
    
        /**
         * 文件列表
         *
         * @param dir
         * @return
         * @throws IOException
         */
        @SuppressWarnings("unchecked")
        public List<Map<String, String>> filelist(String dir) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "filelist");
            params.put("_dir", dir);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (List<Map<String, String>>) parse(out.toByteArray());
        }
    
        /**
         * 上传
         *
         * @param dir
         * @param file
         * @return
         * @throws IOException
         */
        public void up(String dir, File file) throws IOException {
            up(dir, toDataURI(file.getAbsolutePath()));
        }
    
        /**
         * 上传
         *
         * @param dir
         * @param in
         * @throws IOException
         */
        public void up(String dir, InputStream in) throws IOException {
            up(dir, toDataURI(in));
        }
    
        private void up(String dir, String dataUri) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "up");
            params.put("_dir", dir);
            params.put("_data", dataUri);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            parse(out.toByteArray());
        }
    
        /**
         * 下载
         *
         * @param dir
         * @param file
         * @throws IOException
         */
        public void down(String dir, File file) throws IOException {
            down(dir, new FileOutputStream(file));
        }
    
        /**
         * 下载
         *
         * @param dir
         * @param out 输出目标,OutputStream或HttpServletResponse
         * @throws IOException
         */
        public void down(String dir, Object out) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "down");
            params.put("_dir", dir);
            invoke(params, out);
        }
    
        /**
         * 删除
         *
         * @param dir
         * @return
         * @throws IOException
         */
        public boolean remove(String dir) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "remove");
            params.put("_dir", dir);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return parse(out.toByteArray()).equals("ok");
        }
    
        /**
         * 文件是否存在
         *
         * @param dir
         * @return
         * @throws IOException
         */
        public boolean exists(String dir) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "exists");
            params.put("_dir", dir);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return parse(out.toByteArray()).equals("true");
        }
    
        /**
         * 数据查询
         *
         * @param sql SQL
         * @return
         * @throws IOException
         */
        @SuppressWarnings("unchecked")
        public List<Map<String, String>> query(String sql) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "query");
            params.put("_sql", sql);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (List<Map<String, String>>) parse(out.toByteArray());
        }
    
        /**
         * 基于ID的XDATA转换
         *
         * @param id
         * @param format 目标格式:xml、json、csv
         * @return
         * @throws IOException
         */
        public String xdataById(String id, String format) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "xdata");
            params.put("_id", id);
            params.put("_format", format);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (String) parse(out.toByteArray());
        }
    
        /**
         * XDATA转换
         *
         * @param xdata  xdata数据,格式:xml、json、csv
         * @param format 目标格式:xml、json、csv
         * @return
         * @throws IOException
         */
        public String xdata(String xdata, String format) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", "xdata");
            params.put("_xdata", xdata);
            params.put("_format", format);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (String) parse(out.toByteArray());
        }
    
        /**
         * 通过url地址调用服务,支持本地文件xdoc和xdata
         *
         * @param args
         */
        public static void main(String[] args) {
            if (args.length > 0 && args[0].length() > 0) {
                String url = args[0];
                if (url.charAt(0) == '@') { //命令文件
                    File cmdFile = new File(url.substring(1));
                    try {
                        FileReader reader = new FileReader(cmdFile);
                        url = (new BufferedReader(reader)).readLine();
                        reader.close();
                        cmdFile.delete();
                    } catch (Exception e) {
                        e.printStackTrace();
                        return;
                    }
                }
                String server = DEFAULT_URL;
                int pos = url.indexOf('?');
                if (pos > 0) {
                    server = url.substring(0, pos);
                    if (server.endsWith("/xdoc")) {
                        server = server.substring(0, server.length() - 5);
                    }
                    url = url.substring(pos + 1);
                }
                String xkey = "";
                try {
                    String[] params = url.split("&");
                    Map<String, String> map = new HashMap<String, String>();
                    String key, value;
                    String to = null;
                    for (int i = 0; i < params.length; i++) {
                        pos = params[i].indexOf('=');
                        if (pos > 0) {
                            key = decode(params[i].substring(0, pos));
                            value = decode(params[i].substring(pos + 1));
                            if (isXDocData(key, value)) {
                                value = toDataURI(value);
                            } else if (key.indexOf("@file") > 0) {
                                key = key.substring(0, key.length() - 5);
                                value = toDataURI(value);
                            } else if (key.equals("_key")) {
                                xkey = value;
                                continue;
                            } else if (key.equals("_to") && isFile(value)) {
                                to = value;
                                continue;
                            }
                            map.put(key, value);
                        }
                    }
                    if (!map.containsKey("_format") && to != null && to.indexOf('.') > 0) {
                        map.put("_format", to.substring(to.lastIndexOf('.') + 1));
                    }
                    XDocService client = new XDocService(server, xkey);
                    OutputStream out;
                    if (to != null) {
                        out = new FileOutputStream(to);
                    } else {
                        out = System.out;
                    }
                    client.invoke(map, out);
                    if (to != null) {
                        out.flush();
                        out.close();
                        System.out.println(">> " + to);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        private void invoke(Map<String, String> param, Object out) throws IOException {
            String xurl = this.url + (this.url.endsWith("/") ? "xdoc" : "/xdoc");
            HttpURLConnection httpConn = (HttpURLConnection) new URL(xurl).openConnection();
            httpConn.setDoOutput(true);
            OutputStream reqOut = httpConn.getOutputStream();
            reqOut.write(("&_key=").getBytes());
            reqOut.write(encode(this.key).getBytes());
            Iterator<String> it = param.keySet().iterator();
            String key;
            while (it.hasNext()) {
                key = it.next();
                reqOut.write(("&" + encode(key) + "=").getBytes());
                reqOut.write(encode(param.get(key)).getBytes());
            }
            reqOut.flush();
            reqOut.close();
            OutputStream os = null;
            if (out instanceof OutputStream) {
                os = (OutputStream) out;
            } else {
                try {
                    Method method = out.getClass().getMethod("getOutputStream");
                    os = (OutputStream) method.invoke(out);
                    method = out.getClass().getMethod("setHeader", String.class, String.class);
                    String[] headerNames = new String[]{"Content-Type", "Content-Disposition"};
                    String headerValue;
                    for (String headerName : headerNames) {
                        headerValue = httpConn.getHeaderField(headerName);
                        if (headerValue != null) {
                            method.invoke(out, headerName, headerValue);
                        }
                    }
                } catch (Exception e) {
                    throw new IOException(e);
                }
            }
            pipe(httpConn.getInputStream(), os);
        }
    
        private Object parse(byte[] data) throws IOException {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setValidating(false);
            try {
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document document = builder.parse(new ByteArrayInputStream(data));
                document.getDocumentElement().normalize();
                Element root = document.getDocumentElement();
                if (root.getAttribute("success").equals("true")) {
                    Element result = (Element) root.getElementsByTagName("result").item(0);
                    String dataType = result.getAttribute("dataType");
                    if (dataType.equals("string")) {
                        return result.getTextContent();
                    } else if (dataType.equals("map")) {
                        NodeList items = result.getElementsByTagName("value");
                        Map<String, String> map = new HashMap<String, String>();
                        Element value;
                        NamedNodeMap atts;
                        for (int i = 0; i < items.getLength(); i++) {
                            value = (Element) items.item(i);
                            atts = value.getAttributes();
                            for (int j = 0; j < atts.getLength(); j++) {
                                map.put(atts.item(j).getNodeName(), atts.item(j).getNodeValue());
                            }
                        }
                        return map;
                    } else if (dataType.equals("rowset")) {
                        Map<String, String> fieldMap = new HashMap<String, String>();
                        String[] fields = result.getAttribute("fields").split(",");
                        String[] formerFields = fields;
                        if (result.hasAttribute("formerFields")) {
                            formerFields = csvSplit(result.getAttribute("formerFields"));
                        }
                        for (int j = 0; j < formerFields.length; j++) {
                            fieldMap.put(fields[j], formerFields[j]);
                        }
                        NodeList eleList = result.getElementsByTagName("row");
                        Element ele;
                        Map<String, String> map;
                        List<Map<String, String>> List = new ArrayList<Map<String, String>>();
                        for (int i = 0; i < eleList.getLength(); i++) {
                            ele = (Element) eleList.item(i);
                            map = new HashMap<String, String>();
                            List.add(map);
                            for (int j = 0; j < fields.length; j++) {
                                map.put(formerFields[j], ele.getAttribute(fields[j]));
                            }
                        }
                        return List;
                    } else {
                        return "";
                    }
                } else {
                    throw new IOException(root.getElementsByTagName("error").item(0).getTextContent());
                }
            } catch (ParserConfigurationException e) {
                throw new IOException(e);
            } catch (SAXException e) {
                throw new IOException(e);
            }
        }
    
        private String invokeStringFunc(String func) throws IOException {
            Map<String, String> params = new HashMap<String, String>();
            params.put("_func", func);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            invoke(params, out);
            return (String) parse(out.toByteArray());
        }
    
        private Map<String, String> checkParam(Map<String, Object> param) throws IOException {
            Map<String, String> map = new HashMap<String, String>();
            String key, value;
            Iterator<String> it = param.keySet().iterator();
            while (it.hasNext()) {
                key = it.next();
                value = toParamString(param.get(key));
                if (isXDocData(key, value)) {
                    value = toDataURI(value);
                } else if (key.endsWith("@file")) {
                    key = key.substring(0, key.length() - 5);
                    value = toDataURI(value);
                }
                map.put(key, value);
            }
            return map;
        }
    
        private static String toParamString(Object obj) throws IOException {
            String str;
            if (obj == null) {
                str = "";
            } else if (obj.getClass().isPrimitive()
                    || obj instanceof Boolean
                    || obj instanceof Number
                    || obj instanceof CharSequence) {
                str = obj.toString();
            } else if (obj instanceof Date) {
                str = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) obj);
            } else if (obj instanceof File) {
                str = toDataURI(((File) obj).getAbsolutePath());
            } else if (obj instanceof InputStream) {
                str = toDataURI((InputStream) obj);
            } else {
                StringBuilder sb = new StringBuilder();
                Set<Object> chainSet = new HashSet<Object>();
                writeParamString(sb, obj, chainSet);
                str = sb.toString();
            }
            return str;
        }
    
        private static void writeParamString(StringBuilder sb, Object obj, Set<Object> set) throws IOException {
            if (obj == null) {
                sb.append("null");
            } else if (obj.getClass().isPrimitive()
                    || obj instanceof Boolean
                    || obj instanceof Number) {
                sb.append(toParamString(obj));
            } else if (obj instanceof CharSequence
                    || obj instanceof Date) {
                jencode(toParamString(obj), sb);
            } else if (obj instanceof Collection) {
                sb.append("[");
                boolean b = false;
                Iterator<?> it = ((Collection<?>) obj).iterator();
                while (it.hasNext()) {
                    if (b) sb.append(",");
                    writeParamString(sb, it.next(), set);
                    b = true;
                }
                sb.append("]");
            } else if (obj.getClass().isArray()) {
                sb.append("[");
                boolean b = false;
                int n = Array.getLength(obj);
                for (int i = 0; i < n; i++) {
                    if (b) sb.append(",");
                    writeParamString(sb, Array.get(obj, i), set);
                    b = true;
                }
                sb.append("]");
            } else if (obj instanceof Map) {
                sb.append("{");
                Map<?, ?> map = (Map<?, ?>) obj;
                boolean b = false;
                Object key;
                Iterator<?> it = map.keySet().iterator();
                while (it.hasNext()) {
                    if (b) sb.append(",");
                    key = it.next();
                    jencode(key.toString(), sb);
                    sb.append(":");
                    writeParamString(sb, map.get(key), set);
                    b = true;
                }
                sb.append("}");
            } else {
                sb.append("{");
                if (!set.contains(obj) && obj.getClass() != Object.class && obj.getClass() != Class.class) {
                    set.add(obj);
                    try {
                        boolean b = false;
                        BeanInfo bi = Introspector.getBeanInfo(obj.getClass(), Object.class);
                        PropertyDescriptor[] pds = bi.getPropertyDescriptors();
                        Object res;
                        Method method;
                        for (PropertyDescriptor pd : pds) {
                            method = pd.getReadMethod();
                            if (method != null) {
                                if (b) sb.append(",");
                                jencode(pd.getName(), sb);
                                sb.append(":");
                                res = method.invoke(obj, new Object[0]);
                                writeParamString(sb, res, set);
                                b = true;
                            }
                        }
                    } catch (Exception e) {
                        throw new IOException(e);
                    }
                    set.remove(obj);
                }
                sb.append("}");
            }
        }
    
        private static void jencode(String str, StringBuilder sb) {
            sb.append("\"");
            char c;
            for (int i = 0; i < str.length(); i++) {
                c = str.charAt(i);
                if (c == '\\') {
                    sb.append("\\\\");
                } else if (c == '/') {
                    sb.append("\\/");
                } else if (c == '\n') {
                    sb.append("\\n");
                } else if (c == '\r') {
                    sb.append("\\r");
                } else if (c == '\t') {
                    sb.append("\\t");
                } else if (c == '\'') {
                    sb.append("\\\'");
                } else if (c == '\"') {
                    sb.append("\\\"");
                } else {
                    sb.append(c);
                }
            }
            sb.append("\"");
        }
    
        private static boolean isXDocData(String name, String value) {
            if (name.equals("_xdoc") || name.equals("_xdata")) {
                if (value.startsWith("./")
                        || value.startsWith("<")
                        || value.startsWith("{")
                        || value.startsWith("[")
                        || value.startsWith("data:")
                        || name.equals("_xdoc") && value.startsWith("text:")) {
                    return false;
                } else {
                    return true;
                }
            }
            return false;
        }
    
        private static String getFormat(String url) {
            String format = "xdoc";
            int pos = url.lastIndexOf(".");
            if (pos > 0) {
                format = url.substring(pos + 1).toLowerCase();
                if (format.equals("zip")) {
                    url = url.substring(0, pos);
                    pos = url.lastIndexOf(".");
                    if (pos > 0) {
                        format = url.substring(pos + 1).toLowerCase() + ".zip";
                    }
                }
            }
            return format;
        }
    
        private static String encode(Object str) {
            try {
                return URLEncoder.encode(String.valueOf(str), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                return String.valueOf(str);
            }
        }
    
        private static String decode(String str) {
            try {
                return URLDecoder.decode(str, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                return str;
            }
        }
    
        private static void pipe(InputStream in, OutputStream out) throws IOException {
            int len;
            byte[] buf = new byte[4096];
            while (true) {
                len = in.read(buf);
                if (len > 0) {
                    out.write(buf, 0, len);
                } else {
                    break;
                }
            }
            out.flush();
            out.close();
            in.close();
        }
    
        private static boolean isFile(String url) {
            int pos = url.indexOf(':');
            return pos < 0
                    || pos == 1
                    || (pos == 2 && url.charAt(0) == '/');
        }
    
        private static String toDataURI(InputStream in) throws IOException {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            pipe(in, out);
            StringBuffer sb = new StringBuffer();
            sb.append("data:application/octet-stream;base64,");
            sb.append(toBase64(out.toByteArray()));
            return sb.toString();
        }
    
        private static String toDataURI(String url) throws IOException {
            if (url.length() > 0) {
                StringBuffer sb = new StringBuffer();
                String format = null;
                ;
                InputStream in = null;
                if (isFile(url) || url.startsWith("class://")) {
                    int pos = url.lastIndexOf('.');
                    if (pos > 0) {
                        format = url.substring(pos + 1);
                        if (format.equals("jpg")) {
                            format = "jpeg";
                        } else if (format.equals("htm")) {
                            format = "html";
                        }
                        if (format.equals("png") || format.equals("jpeg") || format.equals("gif")) {
                            format = "image/" + format;
                        } else if (format.equals("html") || format.equals("xml")) {
                            format = "text/" + format;
                        } else {
                            format = "application/" + format;
                        }
                    }
                    if (url.startsWith("class://")) {
                        String cls = url.substring(8, url.indexOf("/", 8));
                        String path = url.substring(url.indexOf("/", 8) + 1);
                        try {
                            in = Class.forName(cls).getResourceAsStream(path);
                        } catch (Exception e) {
                            throw new IOException(e);
                        }
                    } else {
                        in = new FileInputStream(url);
                    }
                } else {
                    URLConnection conn = new URL(url).openConnection();
                    in = conn.getInputStream();
                    format = ((HttpURLConnection) conn).getContentType();
                }
                if (format == null) {
                    format = "application/octet-stream";
                }
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                pipe(in, out);
                sb.append("data:").append(format).append(";base64,");
                sb.append(toBase64(out.toByteArray()));
                return sb.toString();
            } else {
                return "";
            }
        }
    
        private static String toBase64(final byte[] data) {
            final char[] out = new char[((data.length + 2) / 3) * 4];
            for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {
                boolean quad = false;
                boolean trip = false;
    
                int val = (0xFF & data[i]);
                val <<= 8;
                if ((i + 1) < data.length) {
                    val |= (0xFF & data[i + 1]);
                    trip = true;
                }
                val <<= 8;
                if ((i + 2) < data.length) {
                    val |= (0xFF & data[i + 2]);
                    quad = true;
                }
                out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];
                val >>= 6;
                out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];
                val >>= 6;
                out[index + 1] = alphabet[val & 0x3F];
                val >>= 6;
                out[index + 0] = alphabet[val & 0x3F];
            }
            return new String(out);
        }
    
        private static char[] alphabet =
                "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();
        private static byte[] codes = new byte[256];
    
        static {
            for (int i = 0; i < 256; i++) {
                codes[i] = -1;
            }
            for (int i = 'A'; i <= 'Z'; i++) {
                codes[i] = (byte) (i - 'A');
            }
            for (int i = 'a'; i <= 'z'; i++) {
                codes[i] = (byte) (26 + i - 'a');
            }
            for (int i = '0'; i <= '9'; i++) {
                codes[i] = (byte) (52 + i - '0');
            }
            codes['+'] = 62;
            codes['/'] = 63;
        }
    
        private static String[] csvSplit(String str) {
            List<List<String>> list = csvList(str);
            if (list.size() > 0) {
                List<String> cols = (List<String>) list.get(0);
                String[] strs = new String[cols.size()];
                for (int i = 0; i < strs.length; i++) {
                    strs[i] = cols.get(i);
                }
                return strs;
            } else {
                return new String[0];
            }
        }
    
        private static List<List<String>> csvList(String txt) {
            if (txt.length() > 0) {
                ArrayList<List<String>> rows = new ArrayList<List<String>>();
                ArrayList<String> cols = new ArrayList<String>();
                rows.add(cols);
                char c;
                boolean strBegin = false;
                StringBuffer sb = new StringBuffer();
                for (int i = 0; i < txt.length(); i++) {
                    c = txt.charAt(i);
                    if (strBegin) {
                        if (c == '"') {
                            if (i + 1 < txt.length()) {
                                if (txt.charAt(i + 1) == '"') {
                                    sb.append(c);
                                    i++;
                                } else {
                                    strBegin = false;
                                }
                            } else {
                                strBegin = false;
                            }
                        } else {
                            sb.append(c);
                        }
                    } else {
                        if (c == ',') {
                            cols.add(sb.toString());
                            sb.setLength(0);
                        } else if (c == '\n') {
                            cols.add(sb.toString());
                            sb.setLength(0);
                            cols = new ArrayList<String>();
                            rows.add(cols);
                        } else if (c == '"') {
                            strBegin = true;
                        } else if (c != '\r') {
                            sb.append(c);
                        }
                    }
                }
                if (sb.length() > 0) {
                    cols.add(sb.toString());
                }
                return rows;
            } else {
                return new ArrayList<List<String>>();
            }
        }
    
        /**
         * XDOC注解
         *
         * @author XDOC
         */
        @Target(ElementType.TYPE)
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        public @interface XDoc {
            /**
             * xdoc
             *
             * @return
             */
            public String value() default "";
        }
    
        /**
         * XDOC参数注解
         *
         * @author XDOC
         */
        @Target(ElementType.FIELD)
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        public @interface XParam {
            /**
             * 参数名称
             *
             * @return
             */
            public String value() default "";
        }
    }
    
    
    展开全文
  • java代码实现word转换成pdf

    千次下载 热门讨论 2013-09-18 12:45:07
    va代码 wordpdfword批量转换成pdfword单独转换成pdf,只需要调用WordToPDFUtil方法就可以实现批量或者单独转换
  • 本文重点从以下三个方面演示如何使用Spire.Doc for JavaJava应用程序中转换Word(DOC / DOCX)。

    在共享文档之前,当我们操作Word文档时,Word到PDF的转换是一项广泛使用的功能。 我们可以找到许多在线单词编辑器来将单个或大量的Word文档转换为PDF。 同时,需要从服务器端以编程方式完成从Doc / docx到PDF的批量转换,以节省时间和精力。 如果尚未使用Spire.Doc,请从Maven获取Java的Spire.Doc。 借助Spire.Doc,我们可以将带有文本框,页眉/页脚,表格,目录,超链接,注释,书签,图像和形状的Word文档转换为高质量的PDF。 本文将重点从以下三个方面演示如何使用Spire.Doc for Java在Java应用程序中转换Word(DOC / DOCX)。

    • 直接在Java应用程序中将Word文档转换为PDF。
    • 使用生成的PDF文件的加密密码将Word文档转换为PDF
    • 将Word文档转换为PDF时设置图像质量

    直接在Java应用程序中将Word文档转换为PDF。 要将Word文档转换为PDF,Spire.Doc for Java提供了一种document.saveToFile()方法,可通过三行代码将Word(.doc,.docx)保存为PDF。

    import com.spire.doc.*;
    public class toPDF {
        public static void main(String[] args) {
            String inputFile="data/Sample.docx";
            String outputFile="output/toPDF.pdf";
            //create word document
            Document document = new Document();
            document.loadFromFile(inputFile);
    
            //save the document to a PDF file.
            document.saveToFile(outputFile, FileFormat.PDF);
        }
    }

    将Word文档转换为PDF时设置图像质量 为了确保生成的PDF的安全性,Spire.Doc for Java支持在将Word转换为PDF时直接创建密码加密的PDF。

    import com.spire.doc.Document;
    import com.spire.doc.ToPdfParameterList;
    import com.spire.pdf.security.*;
    
    public class toPdfWithPassword {
        public static void main(String[] args) {
    
            String inputFile="data/Sample.docx";
            String outputFile="output/toPdfWithPassword.pdf";
    
            //create word document
            Document document = new Document();
            document.loadFromFile(inputFile);
    
            //create a parameter
            ToPdfParameterList toPdf = new ToPdfParameterList();
    
            //set the password
            String password = "E-iceblue";
            toPdf.getPdfSecurity().encrypt(password, password, PdfPermissionsFlags.None, PdfEncryptionKeySize.Key_128_Bit);
    
            //save doc file.
            document.saveToFile(outputFile, toPdf);
        }
    }

    将Word文档转换为PDF时设置图像质量 转换Word文档后,尤其是文档中包含大量图像之后,输出的PDF文档的大小明显大于原始Word文档。 同时,我们可以设置图像质量来设置生成的PDF文件的大小。 Spire.Doc for Java提供了一种document.setJPEGQuality()方法,可将JPEG图像质量设置为0到100。输出图像质量的默认设置是原始图像质量的80%。

    import com.spire.doc.*;
    
    
    public class ImageQuality {
        public static void main(String[] args) throws Exception {
    
            //Create Word document.
            Document document = new Document();
    
            //Load the file from disk.
            document.loadFromFile("Sample.docx");
    
            //Set the output image quality to be 40% of the original image. The default set of the output image quality is 80% of the original.
            document.setJPEGQuality(40);
    
            ToPdfParameterList pdf = new ToPdfParameterList();
            pdf.setDisableLink(true);
    
            //Save to file.
            document.saveToFile("output/ImageQuality.pdf", FileFormat.PDF);
        }
    }

    感谢您的阅读。

    from: https://dev.to//eiceblue/java-convert-word-to-pdf-4ofk

    展开全文
  • java中将word成PDF

    2020-10-29 19:42:18
    本文用的aspose-words15.8.0,代码下载下来之后,只要有jdk环境即可 源码链接
  • 1.首先下载aspose-words-15.8.0-jdk16.jar license.xml (我的博客可下载) ...import java.io.*; import com.aspose.words.*; //引入aspose-words-15.8.0-jdk16.jar import org.junit.Test; p...
  • 将Word或Excel转换成PDF 使用1.jacob的方式进行Word转为PDF 使用Jacob需要因为Jacob的jar包如果是maven的话我这是使用的私服的形式进行引用的。 然后还需要jacob版本对应的ddl文件放到jdk或jre的bin目录里: /* ...
  • Word转换成PDF 引用地址,请点击这里,Place click on me 导入jar包 <!--word 转换 pdf begin--> <dependency> <groupId>com.documents4j</groupId> <artifactId>documents4j...
  • 1Java Word 文档转换PDF 的完美工具 在日常工作中,PDF格式良好...本文就通过使用Java程序来演示如何将Word文档转换成PDF格式。 使用工具: https://www.e-iceblue.cn/Downloads/Free-Spire-Doc-JAVA.htm...
  • 工作原理:调用word本身自带的另存为PDF格式 注意:JDK1.6 要使用jacob1.8+;JDK1.7要使用jac1.8- 注意32位和64的.dll的选择 以及.dll放的位置system32下(最好在自己电脑的jdk/bin下也放上) import ...
  • java OpenOffice wordExcel转换PDF.zip 带jar包
  • Java 将Word文档转换PDF

    千次阅读 2020-03-26 15:48:44
    本文就通过使用Java程序来演示如何将Word文档转换成PDF格式。 使用工具:Free Spire.Doc for Java(免费版) Jar文件获取及导入: 方法1:通过官网下载获取jar包。解压后lib文件夹下的Spire.Doc.jar文件导入Java...
  • Java将Word/Excel转换成PDF—aspose工具

    热门讨论 2020-12-24 12:51:38
    1、引入破解版aspose-words-15.8.0-jdk16...若不是破解版的Jar包,word成pdf之后,pdf中会有水印。可以自己在网上找破解的Jar包资源。并且使用aspose需要在项目里加入一个license.xml,不然生成的pdf会有水印: ...
  • 相信大家对于java应该都不陌生了,毕竟作为一款计算机语言它的使用频率...java如何将word转化pdf文件 背景:日常开发ERP系统,会有一些工单或者合同之类需要填写打印。我们就会word模板来通过系统自动化填写...
  • Java将WORD成PDF

    2019-09-14 01:27:39
    请务必在windows操作系统中进行本操作,因为word需要在服务器上转为pdf。 请在电脑上安装word,注意是安装word,不是安装wps(这一点非常重要)。 请在电脑上安装wordpdf的插件:“软件名:SaveAsPDFandXPS”,...
  • word成PDF /** * word文档转成pdf(doc、docx、txt) * @param oldFilePath 旧文件地址 * @param toFilePath 生成文件地址 * @param suffix 文件后缀 * @return */ public static boolean wordtoPDF(String...
  • 转换工具类public class Word2PdfUtils {/*** docx文档转换PDF** @param pdfPath PDF文档存储路径* @throws Exception 可能为Docx4JException, FileNotFoundException, IOException等*/public void ...
  • 这个工具类全面支持DOC, DOCX,OOXML, RTF HTML,OpenDocument,PDF, EPUB, XPS,SWF 相互转换 转化时需要的jar包和pom: jar包地址如下:链接:https://pan.baidu.com/s/1w1aMvTYqMKRhrRtum88HbQ提取码:y1qg <!-...
  • javaword成pdf

    2011-08-22 10:24:26
    问问各位大哥大姐 怎么用javaword成pdf, 还有用java操纵word 获得word中的数据
  • java实现WORD成PDF

    2013-10-17 22:32:36
    1、需要用到组建在转PDF,安装OpenOffice 3:下载路径:http://www.openoffice.org/download/...我实现的是读取access数据库中对应WORD文件名然后到指定文件夹查找并转换,你也可以到指定文件夹中去遍历所有WORD文件转换
  • Java Word 文档转换PDF 的完美工具 在日常工作中,PDF格式良好的视觉阅读性和稳定性使其使用越来越广泛。因此我们常会遇到需要成型的Word文档转换PDF格式的情况。本文就通过使用Java程序来演示如何...
  • 该项目通过jacob将word转换成pdf图片,在jdk中需要导入jacob的.dll文件,然后项目导入到工具中直接运行即可,项目中有详细文档

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,195
精华内容 5,678
关键字:

java将word转换成pdf

java 订阅