• 160603、使用pd4ml.jar和ss_css2.jar转pdf的工具类


    注意:需要导入pd4ml.jar和ss_css2.jar

    import java.awt.Insets;
    import java.io.BufferedInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.StringReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.security.InvalidParameterException;
    import org.zefer.pd4ml.PD4Constants;
    import org.zefer.pd4ml.PD4ML;
    /***
     * pd4ml.jar,ss_css2.jar
     * @author admin
     */
    public class ToPdfUtils {
        protected int topValue = 10;
        protected int leftValue = 20;
        protected int rightValue = 10;
        protected int bottomValue = 10;
        protected int userSpaceWidth = 1300;
        public static void main(String[] args) throws InvalidParameterException, MalformedURLException, IOException {
            ToPdfUtils pdfUtils = new ToPdfUtils();
    //        pdfUtils.doConversion("http://pd4ml.com/sample.htm", "g:/test/pd4ml.pdf");//网络地址
            String html = readFile("g:/test/confirm.html", "UTF-8");  //文件地址
            pdfUtils.doConversion2(html, "g:/test/pd4ml2.pdf");  
        }
        
        /**将文件转换成pdf,源文件为http://开头的网络地址*/
        public void doConversion(String url, String outputPath)
                throws InvalidParameterException, MalformedURLException,
                IOException {
            File output = new File(outputPath);
            FileOutputStream fos = new FileOutputStream(output);
            PD4ML pd4ml = new PD4ML();
            pd4ml.setHtmlWidth(userSpaceWidth);
            pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));
            pd4ml.setPageInsetsMM(new Insets(topValue, leftValue, bottomValue,rightValue));
            pd4ml.addStyle("BODY {margin: 0}", true);
            pd4ml.useTTF("java:fonts", true);//src下fonts文件夹中的字体设置
            pd4ml.render(new URL(url), fos);
            fos.close();
            System.out.println(outputPath + " done.");
        }
        
        public void doConversion2( String htmlDocument, String outputPath )   
                throws InvalidParameterException, MalformedURLException, IOException {  
            PD4ML pd4ml = new PD4ML();  
            pd4ml.setHtmlWidth(userSpaceWidth);
            // 选择目标文件的格式
            pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));   
            // 设置边距  
            pd4ml.setPageInsetsMM(new Insets(topValue, leftValue, bottomValue, rightValue));   
            //原来的html文档也有边距,可以通过这个方式压缩
            pd4ml.addStyle("BODY {margin: 0}", true);  
            // 如果内置的基本pdf字体不够用,可以设置成non-Latin,TTF能够做到这一点
            pd4ml.useTTF("java:fonts", true);  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            pd4ml.render(new StringReader(htmlDocument), baos);   
            baos.close();  
            File output = new File(outputPath);  
            FileOutputStream fos = new FileOutputStream(output);  
            fos.write( baos.toByteArray() );  
            fos.close();  
            System.out.println( outputPath + " done." );  
        }  
     
        private final static String readFile( String path, String encoding ) throws IOException {  
            File f = new File( path );  
            FileInputStream is = new FileInputStream(f);  
            BufferedInputStream bis = new BufferedInputStream(is);  
            ByteArrayOutputStream fos = new ByteArrayOutputStream();  
            byte buffer[] = new byte[2048];  
            int read;  
            do {  
                read = is.read(buffer, 0, buffer.length);  
                if (read > 0) {   
                    fos.write(buffer, 0, read);   
                }  
            } while (read > -1);  
            fos.close();  
            bis.close();  
            is.close();  
            return fos.toString(encoding);  
        }  
    }

  • 相关阅读:
    03月03日23:29:34 学习进度笔记
    9
    DATETIME vs TIMESTAMP vs INT,怎么选?
    @AllArgsConstructor与@Value共用的问题解决
    ios15使用高德地图定位失败问题 吴小明
    浏览器工作原理 吴小明
    互联网是如何运作的 吴小明
    isNaN()函数和Number.isNaN()方法的基本区别 吴小明
    【前端优化】dnsprefetch 吴小明
    get/post请求传参长度有什么特点 吴小明
  • 原文地址:https://www.cnblogs.com/zrbfree/p/5566503.html
Copyright © 2020-2023  润新知