Markdown을 PDF로 변환하기 위한 .NET 라이브러리입니다. Markdig를 사용하여 마크다운을 HTML로 변환한 다음 Puppeteer Sharp를 사용하여 해당 출력을 PDF로 변환합니다.
이 패키지를 사용하는 크로스 플랫폼 CLI 애플리케이션의 경우 Markdown2Pdf.Console을 확인하세요.
전체 데모 PDF는 여기에서 찾을 수 있습니다!
기음#:
var converter = new Markdown2PdfConverter ( ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
VB.NET:
Dim converter As New Markdown2PdfConverter()
Dim resultPath As String = Await converter.Convert( "README.md" )
마크다운 파일 목록을 변환기에 전달하여 하나의 PDF로 결합할 수도 있습니다.
더 많은 문서를 보려면 Wiki를 확인하세요.
변환 프로세스를 추가로 지정하려면 Markdown2PdfOptions를 변환기에 전달하세요.
var options = new Markdown2PdfOptions {
HeaderHtml = "<div class= " document-title " style= " background-color: #5eafed; width: 100%; padding: 5px " ></div>" ,
FooterHtml = "<div style= " background-color: #5eafed; width: 100%; padding: 5px " >Page <span class= " pageNumber " ></span>/<span class= " totalPages " ></span></div>" ,
DocumentTitle = "Example PDF" ,
} ;
var converter = new Markdown2PdfConverter ( options ) ;
또는 Markdown2PdfOptions를 마크다운 파일 시작 부분의 YAML Front Matter 블록에서 로드할 수 있습니다.
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
이에 대한 사용 예는 여기에서 찾을 수 있습니다.
옵션 | 설명 |
---|---|
ChromePath | chrome 또는 chromium 실행 파일의 경로이거나 null 인 경우 자체 다운로드됩니다. |
코드하이라이트테마 | 코드 블록을 강조 표시하는 데 사용할 테마입니다. |
CustomHeadContent | 문서에 추가 스크립팅/스타일을 적용하기 위해 HTML <head> 내에 유효한 콘텐츠가 포함된 string 입니다. |
문서제목 | 이 문서의 제목입니다. 요소에 document-title 클래스를 추가하여 머리글/바닥글에 삽입할 수 있습니다. |
자동언어감지 활성화 | 지정된 언어가 없는 코드 블록의 언어를 자동 감지합니다. |
바닥글Html | 문서 바닥글로 사용할 HTML 문자열입니다. |
체재 | PDF의 용지 형식입니다. |
헤더Html | 문서 헤더로 사용할 HTML 문자열입니다. |
풍경 | 용지 방향. |
KeepHtml | 생성된 HTML을 삭제하면 안 되는 경우 true . |
마진옵션 | 문서 측면의 CSS 여백. |
모듈옵션 | 추가 모듈을 로드할 위치를 결정하는 옵션입니다. 추가 정보. |
규모 | 콘텐츠의 규모. 0.1에서 2 사이여야 합니다. |
목차 | 마크다운 헤더에서 목차를 생성합니다. 추가 정보. |
주제 | 문서에 적용할 스타일입니다. |
목차를 추가하려면 다음을 삽입하세요.
[TOC]
(Gitlab 구문)[[_TOC_]]
(Gitlab 구문)<!-- toc -->
(주석) 마크다운 문서에 들어가서 Markdown2PdfOptions.TableOfContents
옵션을 사용하세요.
# My Document
[ TOC ]
...
목차 작성 예:
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ;
헤더를 <!-- omit from toc -->
로 끝내면 toc에서 헤더를 생략할 수 있습니다.
## This header won't be displayed in the TOC <!-- omit from toc -->
TOC는 <nav class="table-of-contents">
내에서 생성됩니다. 추가 사용자 정의 스타일을 적용하는 데 사용할 수 있습니다.
옵션 | 설명 |
---|---|
컬러링크 있음 | 설정된 경우 목차의 제목에 기본 링크 마크업이 적용됩니다. |
목록 스타일 | 목차 제목 앞에 사용할 문자를 결정합니다. |
최대 깊이레벨 | TOC에 포함할 최대 방향 깊이 수준입니다. |
최소 깊이 수준 | TOC에 포함할 표제 깊이의 최소 수준입니다. |
페이지번호옵션 | 설정하면 TOC가 페이지 번호와 함께 생성됩니다. |
이 라이브러리는 node_modules 패키지를 사용합니다. 기본적으로 https://cdn.jsdelivr.net과 같이 호스팅되는 CDN을 통해 로드됩니다.
다음 패키지를 설치하고 Markdown2PdfOptions.ModuleOptions를 ModuleOptions.FromLocalPath()로 설정하여 로컬 설치를 사용할 수도 있습니다.
npm i mathjax@3
npm i mermaid@10
npm i font-awesome
npm i @highlightjs/cdn-assets@11
npm i github-markdown-css
npm i latex.css
참고: 이를 위해서는 npm을 설치하고
PATH
에 추가해야 합니다.
기준 치수 | 설명 |
---|---|
MathJax | 라텍스-수학 렌더링 |
인어 | 다이어그램 |
멋진 글꼴 | 아이콘(인어 다이어그램 내에서 지원됨) |
하이라이트.js | 구문 강조 |
github-markdown-css | Github 테마 |
라텍스-CSS | 라텍스 테마 |
HTML 생성을 더 효과적으로 제어하려면(예: 자신만의 JS 스크립트 추가), Converter.ContentTemplate을 수정하세요.
자동화된 테스트의 경우 Markdown2Pdf.Tests 프로젝트가 존재합니다. 이를 시작하기 전에 setup.ps1을 실행하세요.
Puppeteer에 의해 설치되는 번들 Chromium은 필요한 모든 종속성과 함께 제공되지 않습니다(Docker에서 Puppeteer 실행 참조).
이 문제를 해결하려면 .dockerfile
에 설치하세요.
RUN apt-get update
&& apt-get install -y wget gnupg
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
&& apt-get update
&& apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1
--no-install-recommends
&& rm -rf /var/lib/apt/lists/*
마크다운은 처음에는 HTML로 변환할 수 있도록 개발되었습니다. 그 결과 JavaScript 세계에는 많은 도구가 존재합니다. 예를 들어 Mermaid는 JavaScript로만 구현되므로 이를 지원하려면 JS 엔진이 필요합니다. 이로 인해 이 패키지는 속도가 느려지지만 Markdown에서 PDF를 직접 생성하는 다른 솔루션보다 더 많은 기능을 지원할 수 있습니다.