虎(牛)龍未酉2.1

記録帳|+n年後のジブンが思い出せますように……

【記録】PowerPointをPDFファイルに変換

PowerPointをPDFに変換するスクリプトを2種用意した

 

 

困っていたこと

  • わりと頻繁に、PowerPointExcelも)をPDFに変換する
  • アプリを開いて、ボタンひとつでPDFにはしてたんだけど、それでも面倒くさくなってきた 

 

対策その1

Windows PowerShellコマンド&スクリプティングガイド

を読んで、Excel→PDFのサンプルスクリプトPowerPoint版に改訂した

 

いくつか困ったことを記しておく(忘れかけてる……)

  • ps1を実行して使う場合、functionをメインコードの上に書いておかなければならないのでは?(functionをプロファイルに書いたりモジュールにするなら別っぽいが)
  • PowerPointのVisibleをfalseにする方法が結局わからなかった
  • PowerPointは$xx.quitではなく、$xx.quit()?
  • サンプルコードもちょくちょく間違えている([ty]ではなく[type]とか)
  • ps1を実行するのが意外と面倒。右クリック→PowerShellで実行、ショートカット作ってpowershell -explicit 〜.ps1と書くか

 

結論としては、対策2でじゅうぶん

なのだが、PowerShellのことが一通り勉強できてよかった(たのしかった)

 

対策その2

VBSでExcel、Word、PowerPointを一括でPDFに変換してみる

というサイトにVBScriptがのっていたので使わせていただく

  • vbsの文字コードをSHIFT-JISにしなければならなくて、そこだけ困った

あとはもう、これでええやん

 

参考リンク

www.doraxdora.com

 

 

はてなブログの見たままモードでシンタックスハイライトを使う方法

http://www.dreamark.tokyo/entry/syntax

 

はてなブログソースコードを貼り付ける方法!(言語名&行番号表示)

https://kurokinomizuiwa.hatenablog.com/entry/2018/11/10/hatena-blog-source-code-paste

 

コード

ああ、PowerShellのほうはコード貼っておこ

#動くサンプルで学べるWindows PowerShellコマンド&スクリプティングガイド
#のExcel to PDFをベースにPPT2PDF作成
#
#マイクロソフトの「#PowerPoint ファイルから PDF や XPSを作成する」
#を参照
#2020/02/15(土)

#指定されたPowerPointファイルからPDFファイルを作成
function PptToPdf($ptFile, $pdfFile)
{
    #PowerPointオブジェクトを生成
    $pt = New-Object -ComObject PowerPoint.Application

    #PowerPontオブジェクトを非表示にします ※できない※
    $pt.Visible = [Microsoft.Office.Core.MsoTriState]::msoTrue
    
    #PPTプレゼンテーションを開く
    $pp = $pt.presentations.Open($ptFile)

    #PowerPointファイルの出力形式を定義
    $ptExportFormat = "Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType" -as [type]

    #PPファイルをPDF形式で出力
    $pp.SaveAs($pdfFile, $ptExportFormat::PpSaveAsPDF) 

    #PPTプレゼンテーションファイルを閉じる
    $pp.Close()

    #PowerPointアプリケーションを終了
    $pt.Quit()
}


##指定したフォルダに存在するすべてのPPTファイルを取得(pptx & ppt)
#$ptList = Resolve-Path "C:\TEMP\*.pptx"
#$ptList = $ptList + (Resolve-Path "C:\TEMP\*.ppt")
#カレントフォルダに存在するpptx/pptファイルを全て取得
$ptList = Resolve-Path ((convert-path .) + "\*.pptx")
$ptList = $ptList + (Resolve-Path ((convert-path .) + "\*.ppt"))

#取得したPPTファイルのリストから1件ずつPDFファイルを作成
foreach ($ptfile in $ptList)
{
    #作成するPDFファイルの名前を確定
    $pdffile =  [System.IO.Path]::ChangeExtension($ptfile,".pdf")

    #PDFファイルを作成
    try
    {
        PptToPdf $ptfile $pdffile
    }
    catch
    {
        #PDF変換に失敗したファイル名を表示
        Write-Host "失敗: $ptfile"
        continue
    }

    #PDF変換に成功したファイル名を表示
    Write-Host "成功: $ptfile"
}