• 使用jacob调用Windows的com对象,进行word、ppt等转换成ptf、html(二)


    富文本转pdf :

    注意:simsun.ttc 可以百度下载:http://www.pc6.com/softview/SoftView_100415.html

    package com.orangecds.officeconvert.utils;

    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.pdf.PdfWriter;
    import com.itextpdf.tool.xml.XMLWorkerFontProvider;
    import com.itextpdf.tool.xml.XMLWorkerHelper;
    import com.lowagie.text.pdf.BaseFont;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import org.xhtmlrenderer.pdf.ITextFontResolver;
    import org.xhtmlrenderer.pdf.ITextRenderer;

    import java.io.*;
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;


    /**
    * @program: office-convert
    * @ClassName PdfUtilsTest
    * @description:
    * @author: xiyun.zhao
    * @create: 2021-09-27 14:17
    **/
    public class PdfUtilsTest {
    /**
    * @description: 将HTML转成PD格式的文件html文件的格式比较严格
    * @author xiyun.zhao
    * @param: htmlFile
    * @param: pdfFile
    * @return:
    * @date: 2021/9/27 18:50
    */
    // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
    public static void html2pdf(String htmlFile, String pdfFile) throws Exception {
    // step 1
    String url = new File(htmlFile).toURI().toURL().toString();
    System.out.println(url);
    // step 2
    OutputStream os = new FileOutputStream(pdfFile);
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(url);

    // step 3 解决中文支持
    ITextFontResolver fontResolver = renderer.getFontResolver();
    if("linux".equals(getCurrentOperatingSystem())){
    //Linux下的和Windows的不一样,要自己下载,不要拷贝Windows的到Linux
    fontResolver.addFont("/usr/share/fonts/chiness/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    }else{
    fontResolver.addFont("src/main/resources/dev/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    }

    renderer.layout();
    renderer.createPDF(os);
    os.close();

    System.out.println("create pdf done!!");

    }
    /**
    * html转换成pdf文件
    *
    * @param htmlContent
    * @throws Exception
    */
    protected static void htmlToPdf(String htmlContent,String pdfFile) throws Exception {
    //1 打开文件流
    Document document = new Document();
    FileOutputStream fos = new FileOutputStream(pdfFile);
    InputStream is = new ByteArrayInputStream(htmlContent.getBytes(Charset.forName("UTF-8")));
    // InputStream cssIs = new ByteArrayInputStream(getCssFile());
    PdfWriter writer = null;
    try {
    writer = PdfWriter.getInstance(document, fos);
    //3. 设置字体
    XMLWorkerFontProvider fontProvider1 = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
    fontProvider1.register("D:\hjf\simsunttc\simsun.ttc");
    //3 打开文档
    document.open();
    //4 html转为pdf
    XMLWorkerHelper.getInstance().parseXHtml(writer, document, is, Charset.forName("UTF-8"), fontProvider1);

    } catch (DocumentException | IOException e) {
    throw new RuntimeException("转pdf失败罗~");
    } finally {
    if (null != writer) {
    writer.flush();
    }
    //5 关闭文档
    document.close();
    fos.close();
    is.close();
    writer.close();
    }
    }


    public static String getCurrentOperatingSystem(){
    String os = System.getProperty("os.name").toLowerCase();
    System.out.println("---------当前操作系统是-----------" + os);
    return os;
    }
    /**
    * 获取html
    *
    * @return
    */
    protected static String content2Html() {
    String content = COMPLETE_CONTENT;
    content = content.replace("<br>", "<br/>");
    String repContent = content.replaceAll("<img(.+?)>", "<img$1/>");
    System.out.println(""+repContent);
    return repContent;
    }
    /**
    * 获取样式文件
    *
    * @return
    * @throws Exception
    */
    protected byte[] getCssFile() throws Exception {
    FileInputStream fileInputStream = new FileInputStream("src/main/resources/css/editor.css");
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[1204];
    int len = 0;
    while ((len = fileInputStream.read(buffer)) != -1) {
    outStream.write(buffer, 0, len);
    }
    fileInputStream.close();
    return outStream.toByteArray();
    }
    /**
    * 拼接CONTENT 使成为完整的html,"font-family: SimSun;"
    */
    private static final String COMPLETE_CONTENT = "<html><head></head><body style="font-family: SimSun;"><p class="ql-align-center"><strong>合同内容测试</strong></p><p><strong>甲方(出租方) :</strong></p><p><strong>乙方(承租方) :</strong></p><p>甲乙双方就乙方租赁甲方电梯轿厢设置看板媒体(以下简称“看板”)、刊发广告一</p><p>事进行友好协商,达成以下条款,双方共同执行:</p><p class="ql-align-center"><strong>第一条租赁地点</strong></p><p>甲方同意将市区花园(大厦/小区)共部电梯租赁给乙方设置看板,刊发广告。</p><p class="ql-align-center"><strong>第二条设置方式和范围</strong></p><p>1、看板设置于电梯轿厢壁上(超薄型,厚度不超过2cm、长度:、宽度: ;),用</p><p>粘贴或敷膜方式贴在轿厢壁上,共三面(左、中、右),</p><p>2、采用进口美国3m技术贴敷在电梯厅门上; (学生打架调解协议书)</p><p>3、电梯轿厢(面向电梯i ]及出梯门时目光所能触及的轿厢壁)。</p>" +
    "<p class="ql-align-center"><strong>第三条设置内容</strong></p><p>1、公益广告(包括社区文化建设、公民道德规范、防火、防盗知识、保健小常识、</p><p>生活小窍门等) ;</p>" +
    "<p>2、商业广告(广告内容必须符合国家广告法的规定,不得发布不宜单位、社区和家<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic16.nipic.com%2F20111008%2F5203963_093910733000_2.jpg&refer=http%3A%2F%2Fpic16.nipic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1635329488&t=9d73780cedba58d89b052512d894955c" style="max-100%;"></p><p>庭的广告,更不得发布影响少年儿童身心健康的广告) ;</p><p class="ql-align-right"><br></p></body></html>";

    public static void main(String[] args) {

    String htmlFile = "D:\hjf\u.html";
    String pdfFile = "D:/hjf/z.pdf";
    try {
    //html以文件形式转pdf
    // PdfUtilsTest.html2pdf(htmlFile, pdfFile);
    //以字符串形式转pdf
    PdfUtilsTest.htmlToPdf(content2Html(),pdfFile);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }


    }
    我是个双鱼座的小王子,沉浸在自己的代码世界里,去探索这未知的世界,希望遇到更多的小伙伴一起前行!
  • 相关阅读:
    Jmeter入门--参数化、集合点
    Jmeter入门--断言(检查点)
    Jmeter入门--性能测试实战
    Jmeter入门--元件作用域和执行顺序
    Jmeter入门--Badboy使用教程(转)
    Jmeter入门--脚本录制
    Jmeter入门--可执行元件
    Jmeter入门--工具组成和线程组
    Jmeter入门--安装教程
    mac设置python及pip环境变量及安装mysqlclient
  • 原文地址:https://www.cnblogs.com/zxy-come-on/p/15344703.html
Copyright © 2020-2023  润新知