• Markdown生成word和pdf


    package com.kongjs.emo.web.util;
    
    import com.openhtmltopdf.outputdevice.helper.BaseRendererBuilder;
    import com.vladsch.flexmark.docx.converter.DocxRenderer;
    import com.vladsch.flexmark.ext.definition.DefinitionExtension;
    import com.vladsch.flexmark.ext.emoji.EmojiExtension;
    import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
    import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
    import com.vladsch.flexmark.ext.ins.InsExtension;
    import com.vladsch.flexmark.ext.superscript.SuperscriptExtension;
    import com.vladsch.flexmark.ext.tables.TablesExtension;
    import com.vladsch.flexmark.ext.toc.SimTocExtension;
    import com.vladsch.flexmark.ext.toc.TocExtension;
    import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
    import com.vladsch.flexmark.html.HtmlRenderer;
    import com.vladsch.flexmark.html2md.converter.FlexmarkHtmlConverter;
    import com.vladsch.flexmark.parser.Parser;
    import com.vladsch.flexmark.pdf.converter.PdfConverterExtension;
    import com.vladsch.flexmark.util.ast.Node;
    import com.vladsch.flexmark.util.data.DataHolder;
    import com.vladsch.flexmark.util.data.MutableDataSet;
    import org.docx4j.Docx4J;
    import org.docx4j.openpackaging.exceptions.Docx4JException;
    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.util.Arrays;
    
    public class MarkdownUtils {
        public static String HtmlToMarkdown(String html) {
            return FlexmarkHtmlConverter.builder().build().convert(html);
        }
    
        private static final DataHolder OPTIONS = new MutableDataSet()
                .set(Parser.EXTENSIONS, Arrays.asList(
                        DefinitionExtension.create(),
                        EmojiExtension.create(),
                        FootnoteExtension.create(),
                        StrikethroughSubscriptExtension.create(),
                        InsExtension.create(),
                        SuperscriptExtension.create(),
                        TablesExtension.create(),
                        TocExtension.create(),
                        SimTocExtension.create(),
                        WikiLinkExtension.create()
                ))
                .set(DocxRenderer.SUPPRESS_HTML, true);
        //.set(DocxRenderer.DOC_RELATIVE_URL, "file:///Users/vlad/src/pdf")
        //.set(DocxRenderer.DOC_ROOT_URL, "file:///Users/vlad/src/pdf");
    
        public static void MarkdownToDocx(String markdown, File file) {
            Parser PARSER = Parser.builder(OPTIONS).build();
            DocxRenderer RENDERER = DocxRenderer.builder(OPTIONS).build();
            Node document = PARSER.parse(markdown);
            String xml = RENDERER.render(document);
            WordprocessingMLPackage template = DocxRenderer.getDefaultTemplate();
            RENDERER.render(document, template);
            try {
                template.save(file, Docx4J.FLAG_SAVE_ZIP_FILE);
            } catch (Docx4JException e) {
                e.printStackTrace();
            }
        }
    
        public static void MarkdownToPDF(String markdown, File file) throws FileNotFoundException {
            Parser parser = Parser.builder(OPTIONS).build();
            HtmlRenderer renderer = HtmlRenderer.builder(OPTIONS).build();
            Node document = parser.parse(markdown);
            String html = renderer.render(document);
            PdfConverterExtension.exportToPdf(new FileOutputStream(file), html, "", BaseRendererBuilder.TextDirection.LTR);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    <dependency>
          <groupId>org.jsoupgroupId>
          <artifactId>jsoupartifactId>
          <version>1.17.2version>
        dependency>
        <dependency>
          <groupId>com.vladsch.flexmarkgroupId>
          <artifactId>flexmark-allartifactId>
          <version>0.62.2version>
        dependency>
        <dependency>
          <groupId>com.vladsch.flexmarkgroupId>
          <artifactId>flexmark-docx-converterartifactId>
          <version>0.62.2version>
        dependency>
        <dependency>
          <groupId>org.docx4jgroupId>
          <artifactId>docx4j-ImportXHTMLartifactId>
          <version>8.3.8version>
        dependency>
        <dependency>
          <groupId>org.docx4jgroupId>
          <artifactId>docx4j-JAXB-InternalartifactId>
          <version>8.3.8version>
        dependency>
        <dependency>
          <groupId>org.docx4jgroupId>
          <artifactId>docx4j-JAXB-ReferenceImplartifactId>
          <version>8.3.8version>
        dependency>
        <dependency>
          <groupId>org.docx4jgroupId>
          <artifactId>docx4j-export-foartifactId>
          <version>8.3.8version>
        dependency>
        <dependency>
          <groupId>org.xhtmlrenderergroupId>
          <artifactId>flying-saucer-pdfartifactId>
          <version>9.4.1version>
        dependency>
        <dependency>
          <groupId>org.xhtmlrenderergroupId>
          <artifactId>flying-saucer-pdf-itext5artifactId>
          <version>9.4.1version>
        dependency>
        <dependency>
          <groupId>com.openhtmltopdfgroupId>
          <artifactId>openhtmltopdf-pdfboxartifactId>
          <version>1.0.10version>
        dependency>
        <dependency>
          <groupId>com.openhtmltopdfgroupId>
          <artifactId>openhtmltopdf-java2dartifactId>
          <version>1.0.10version>
        dependency>
        <dependency>
          <groupId>com.openhtmltopdfgroupId>
          <artifactId>openhtmltopdf-rtl-supportartifactId>
          <version>1.0.10version>
        dependency>
        <dependency>
          <groupId>com.openhtmltopdfgroupId>
          <artifactId>openhtmltopdf-svg-supportartifactId>
          <version>1.0.10version>
        dependency>
        <dependency>
          <groupId>com.openhtmltopdfgroupId>
          <artifactId>openhtmltopdf-mathml-supportartifactId>
          <version>1.0.10version>
        dependency>
        <dependency>
          <groupId>com.openhtmltopdfgroupId>
          <artifactId>openhtmltopdf-latex-supportartifactId>
          <version>1.0.10version>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
  • 相关阅读:
    使用Docker辅助图像识别程序开发:在Docker中显示GUI、访问GPU、USB相机以及网络
    深度学习损失函数
    看了这篇文章CAP你还不懂,我打你!
    cudnn-windows-x86_64-8.6.0.163_cuda11-archive 下载
    【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
    SpringCloud Stream详解
    【华为机试真题 JAVA】最大嵌套括号深度-100
    Vue后台管理系统笔记-01
    Linux教程||Linux 系统启动过程
    Android Gradle plugin 版本和Gradle 版本
  • 原文地址:https://blog.csdn.net/by2233/article/details/138142473