AYU MAX

プログラミングとか作ったもの

MarkdownをPowerPointファイルに変換するツールを作成した

MDToPPTX

先日から作成していたMarkdownファイルをPowerPointファイル(*.pptx)に変換するツールMDToPPTXのベータ版ができました。

使用言語はC#で、ライブラリ部分は.net standard2.0で作ってます。
なので試してないけど、.net coreやXamarinでも動くはず。

github.com

これを使用するとMarkdownパワポのファイルを作成できます。

markdig

Markdownの解析にはmarkdigを利用しました。 これのおかげでとっても楽に書けてます。

openxml

パワポファイルの作成はopenxmlを利用してます。
これを使う事でパワポがインストールされてないマシンでもpptxファイルの作成が可能です。
ただsdkを使っても利用難易度は高かったです。

実行exe

github内のプロジェクト内のMarkPP.exeは以下のようなコマンドで使用可能です。

MarkPP.exe "markdownfle path" "title" "subtitle"

マークダウンファイルパスの(.md)を(.pptx)に変換してファイルが出力されます。

以下はgithubのREADMEにも記述してありますが、

対応構文

以下の構文に対応してます。
Markdown内でのHTML表記には対応してません。

  • HEADERS(Level1 or Level2に対応、パワポにLevel3以降はいらんだろ)
  • BLOCKQUOTES
  • LISTS
  • CODE BLOCKS(インラインコードもOK)
  • LINKS
  • EMPHASIS(Bold, Italic, Strike)
  • Images(1pixel -> 1mmで配置)
  • Table

シートの境目は---を記述します。

記述例

input Markdown

* コードブロックの中にバッククオート3つが書けないので、‘‘‘で置き換えてます

# テストシート1

テストシートです。  
**太字**です  
*イタリック*も対応  
~~打消しも可能~~

[ハイパーリンク例](http://ayumax.hatenablog.com/)

↓コードブロック

‘‘‘  
class ClassA  
{  
    public ClassA()  
    { 

    }

    public void Func()
    {

    }
}  
‘‘‘    

---

# テストシート2

テストシート2枚目です

箇条書きにも対応

+ 箇条書きです
+ インラインコードも`対応`してます

イメージの挿入もできます
![image1](ayumax.jpg)

引用文はこちら
> 引用サンプル
> です

---
# テストシート3
## サブタイトル

テストシート3枚目です

1. 数値の箇条書き
1. 数値の箇条書き2行目
1. 数値の箇条書き3行目

表も書けます

| Left align | Right align | Center align |
|:-----------|------------:|:------------:|
| 1行目左    | 1行目        | 1行目右      |
| 2行目左    | 2行目        | 2行目右      |
| 3行目左    | 3行目        | 3行目右      |    

output PPTX

こんな感じで出力されます。

f:id:ayuma0913:20180606002603j:plainf:id:ayuma0913:20180606002607j:plainf:id:ayuma0913:20180606002609j:plain

これから

元がmarkdownなので、レイアウトが縦方向に一直線にしかならないのが、ウーンって感じです。
パワポのスライドレイアウトを利用するか、markdown記法を拡張して位置情報を入れれるようにするかで悩んでますが、変なオリジナル記述法を追加するのも嫌なので悩み中。

あと各markdownのブロック種別単位で、フォントサイズやエリアのマージンはコード上からは設定可能なので今後はその設定も外だしさせていかなあ。

あとあと、このライブラリは.net standard 2.0で書いているので、直接markdownを入力してpptxを吐くアプリをXamarinで書いてみようかなとも思ってます。 モチベーションが続けばiOS, Android両方とも公開したい!