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);
    }
}

<dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.17.2</version>
    </dependency>
    <dependency>
      <groupId>com.vladsch.flexmark</groupId>
      <artifactId>flexmark-all</artifactId>
      <version>0.62.2</version>
    </dependency>
    <dependency>
      <groupId>com.vladsch.flexmark</groupId>
      <artifactId>flexmark-docx-converter</artifactId>
      <version>0.62.2</version>
    </dependency>
    <dependency>
      <groupId>org.docx4j</groupId>
      <artifactId>docx4j-ImportXHTML</artifactId>
      <version>8.3.8</version>
    </dependency>
    <dependency>
      <groupId>org.docx4j</groupId>
      <artifactId>docx4j-JAXB-Internal</artifactId>
      <version>8.3.8</version>
    </dependency>
    <dependency>
      <groupId>org.docx4j</groupId>
      <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
      <version>8.3.8</version>
    </dependency>
    <dependency>
      <groupId>org.docx4j</groupId>
      <artifactId>docx4j-export-fo</artifactId>
      <version>8.3.8</version>
    </dependency>
    <dependency>
      <groupId>org.xhtmlrenderer</groupId>
      <artifactId>flying-saucer-pdf</artifactId>
      <version>9.4.1</version>
    </dependency>
    <dependency>
      <groupId>org.xhtmlrenderer</groupId>
      <artifactId>flying-saucer-pdf-itext5</artifactId>
      <version>9.4.1</version>
    </dependency>
    <dependency>
      <groupId>com.openhtmltopdf</groupId>
      <artifactId>openhtmltopdf-pdfbox</artifactId>
      <version>1.0.10</version>
    </dependency>
    <dependency>
      <groupId>com.openhtmltopdf</groupId>
      <artifactId>openhtmltopdf-java2d</artifactId>
      <version>1.0.10</version>
    </dependency>
    <dependency>
      <groupId>com.openhtmltopdf</groupId>
      <artifactId>openhtmltopdf-rtl-support</artifactId>
      <version>1.0.10</version>
    </dependency>
    <dependency>
      <groupId>com.openhtmltopdf</groupId>
      <artifactId>openhtmltopdf-svg-support</artifactId>
      <version>1.0.10</version>
    </dependency>
    <dependency>
      <groupId>com.openhtmltopdf</groupId>
      <artifactId>openhtmltopdf-mathml-support</artifactId>
      <version>1.0.10</version>
    </dependency>
    <dependency>
      <groupId>com.openhtmltopdf</groupId>
      <artifactId>openhtmltopdf-latex-support</artifactId>
      <version>1.0.10</version>
    </dependency>

相关推荐

  1. Markdown生成wordpdf

    2024-04-27 09:56:02       31 阅读
  2. 探索 PDFMarkdown 的项目:MinerU pdfParser

    2024-04-27 09:56:02       25 阅读
  3. markdown文件转pdf

    2024-04-27 09:56:02       25 阅读
  4. PySide6实现pdf转化为word长图片

    2024-04-27 09:56:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 09:56:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 09:56:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 09:56:02       82 阅读
  4. Python语言-面向对象

    2024-04-27 09:56:02       91 阅读

热门阅读

  1. k8s笔记 | StatefulSet 有状态

    2024-04-27 09:56:02       34 阅读
  2. AI编码prompt编写及内在逻辑

    2024-04-27 09:56:02       30 阅读
  3. 前端CSS基础12(布局)

    2024-04-27 09:56:02       32 阅读
  4. Spring Boot项目中按天分割日志的实践

    2024-04-27 09:56:02       42 阅读
  5. SpringBoot这29个注解你都用到过么

    2024-04-27 09:56:02       39 阅读
  6. 慢生活,慢光阴

    2024-04-27 09:56:02       34 阅读
  7. PyTorch的基本概念及使用场景

    2024-04-27 09:56:02       38 阅读