昨日のmarkdown2pptxのスニペットをもう少しちゃんとしてrepoで管理するようにしました。

昨日のこれをちゃんとコマンドライン化してmishima.sykのrepositoryにあげておいたので適当にいじってください。

まともに動くようになったらpypiにでもあげようかなと思いますがとりあえず動かしたい場合にはgit cloneしてから

python setup.py install

で、md2pptxというコマンドが使えるようになるのでmd2pptx --helpで使い方を確認してください。

もともとのmarkdownの記法ではクラス属性とか渡せないんだけど、Attribute_list を使うとよろしい感じだったのでそうしています。

  • power pointのlayoutを指定する
  • テキストボックスのareaの位置、大きさを指定する
  • 画像の位置、スケールを指定する

あたりの情報はこれを使えばなんとかなるのではないかと。

markdown2pptx

風邪をひいたようです。自覚症状ないから気づかなかった。

こんな感じで如何?handle_dataメソッドでタグの情報持てないから、ちょっと考えた。HTMLパーサーよりはXMLパーサーのほうがやりやすい気もする。

from markdown import Markdown
from html.parser import HTMLParser
from pptx import Presentation

class MyHTMLParser(HTMLParser):
    def __init__(self):
        super(MyHTMLParser, self).__init__()
        self.prs = Presentation()
        self.tags = []
        self.slide = ""

    def handle_starttag(self, tag, attrs):
        if tag == "h1":
            slide = self.prs.slides.add_slide(self.prs.slide_layouts[0])
            self.slide = slide
            self.tags.append(tag)
        elif tag == "h2":
            slide = self.prs.slides.add_slide(self.prs.slide_layouts[1])
            self.slide = slide
            self.tags.append(tag)
        elif tag == "h3":
            self.tags.append(tag)
        else:
            print("Encountered a start tag:", tag)

    def handle_endtag(self, tag):
        pass

    def handle_data(self, data):
        if len(self.tags) > 0:
            tag = self.tags.pop()
            if tag == "h1":
                self.slide.shapes.title.text = data
            elif tag == "h2":
                self.slide.shapes.title.text = data
            elif tag == "h3":
                p = self.slide.shapes.placeholders[1].text_frame.add_paragraph()
                p.text = data
            else:
                print("Encountered some data  :", data)

    def close(self):
        self.prs.save("sample.pptx")

def md2pptx(md_txt):
    md = Markdown()
    parser = MyHTMLParser()
    parser.feed(md.convert(md_txt))
    parser.close()

sample_md = '''
my sample slide
===============

title of a Content slide
------------------------

### this paragraph
### that paragraph
### the other paragraph

another title of a Content slide
------------------------

### this paragraph
### that paragraph
### the other paragraph

'''

if __name__ == '__main__':
    md2pptx(sample_md)

PowerPointファイルにFlashを埋め込む

PowerPointファイルにFlashを埋め込む

一般解説書には見かけないようですが、プレゼンテーション用のPowerPointスライドの1コマ内で、ActiveXコントロールを機能させFlashアニメーションを動かす方法があります。

  • コントロールツールボックスのコントロール選択
  • Shockwave flash object
  • プロパティーのプロパティーページ
  • ムービーURLの設定と”ムービーの埋め込み”チェック

ながれは大体こんな感じ。CueMol埋め込むときと一緒ですな。

一方、OOo ImpressでもFlashを埋め込みできるという情報があったので早速家に帰って試してみた。まぁ、会社ではpowerpoint2k、家ではOOo(2.0b)なんで、どちらでも埋め込みできて、且つ互換性があるとありがたい。特にImpressはpdfで出力できるので配布資料を作るときには手放せなくなってます。

  • 挿入 オブジェクト プラグイン
  • swfとURLの入力

で、こっちのほうが直感的にわかりやすい操作。ついでにAACなんかも埋め込んでみたが、うまく再生されてます。しかし、スライドショーにすると再生されず。うーん、コレだと使えないナァ。互換性以前の問題だったり。それともなんか設定間違えてんのかなぁ?

結局、しょうがないのでImpressで作った資料と、swfばらばらに持っておいて、PowerPointで最後に整える方向で行くかな。

ITmedia エンタープライズ:「Impress」で問うPowerPointを使う理由 (5/5)

自宅では、プレゼンを作成したりと発表を練習するなどして、最後の仕上げは会社のPC上でPowerPointで仕上げる。このような使い方の一例が考えられる。

って、そのまんまだった。最後の仕上げ(調整)が発生するということが、互換性がもうひとつということだからなぁ。