スキップしてメイン コンテンツに移動

印刷・PDF変換を自動化!! LibreOfficeをコマンドラインから使用する

LibreOffceタイトル

LibreOffice(リブレオフィス)とは

Windows, Mac OS, Linux などのOSで動作する Offce アプリケーションです。
Microsoft Office などの Offce系アプリと相互互換性があります。

今回やる事

LibreOffice にはコマンドライン機能があり、
コマンドだけで Excel を PDF に変換できたりします。
今回は、このコマンド機能について色々試してみようと思います。

LibreOffice のコマンド構文

[構文]
{install}/program/soffice {parameter}}

[使用可能な parameter]

--help / -h / -?           ヘルプを表示 します。
--version                  バージョンを表示
--writer                   起動時に、空白の Writer ドキュメントを開く
--calc                     起動時に、空白の Calc ドキュメントを開く
--draw                     起動時に、空白の Draw ドキュメントを開く
--impress                  起動時に、空白の Impress ドキュメントを開く
--math                     起動時に、空白の Math ドキュメントを開く
--global                   起動時に、空白の Writer マスタドキュメントを開く
--web                      起動時に、空白の HTML 形式ドキュメントを開く
--show {filename.odp}      Impress ファイルを開いて、プレゼンテーションを開始する
--minimized                起動時に、ウィンドウを最小化
--invisible                非表示モードで起動。
                           画面には何も表示させず、API 経由で処理を行うような場合に使用。
                           また、終了時は kill コマンド等で、プロセスを自分で終了させる必要があります。
--norestore                LibreOffice のシステムに障害が発生した場合の再起動およびファイルの復元機能を使用不可にします。
--nofirststartwizard       開始ウィザードを無効化
--quickstart               クイックスタートを開始します。
--accept={UNO string}      LibreOffice ソフトウェアに対して、「UNO Acceptor Threads」の作成時に「UNO Accept String」を使用するよう通知します。詳細情報については、LibreOffice デベロッパー向けガイド を参照してください。
--unaccept={UNO string}    --accept = {UNO string}で作成されたアクセプタを閉じます。 開いているアクセプタをすべて閉じるには、 - unaccept = allを使用します。
-o {filename}              {filename} で指定するファイルを、テンプレートの場合も含めて、編集可能な状態で開くようにします。
--view {filename}          {filename} で指定するファイルのコピーを一時的に作成し、読み取り専用で開きます。
-n {filename}              {filename} で指定するファイルをテンプレートとして、新規ドキュメントを作成します。
--nologo                   起動時のスプラッシュ画面を非表示
--nodefault                起動時にスプラッシュ画面以外は何も表示しない。
--display {display}        Sets the DISPLAY environment variable on UNIX-like platforms to the value {display}. This parameter is only supported by the start script for the LibreOffice software on UNIX-like platforms

-p {filename1} {filename2} ...                   
       指定されたファイルをデフォルトプリンターで印刷して終了します。
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
--pt {Printername} {filename1} {filename2} ...   
       指定されたファイルを {Printername} で指定するプリンターで印刷して終了させます。
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
--headless                
       ユーザーインターフェイスなしでアプリケーションを使用できる「ヘッドレスモード」で起動します。
       この特殊モードは、アプリケーションがAPIを介して外部クライアントによって制御される場合に使用できます。
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
--infilter={filter}
       orces an input filter type, if possible. Eg. --infilter="Calc Office Open XML".
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
--convert-to output_file_extension[:output_filter_name] [--outdir output_dir] files
       ファイルの変換を行います。(このコマンドについては詳細を後述します)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 
--print-to-file [--printer-name printer_name] [--outdir output_dir] files
       ファイルをファイルにバッチプリントします。

ユースケース別の使用例

(case 1) LibreOffice ドキュメントを PDF に変換する

PDF への変換は --convert-to コマンドで行います。
変換可能はファイルは以下の通りです。

  • .doc, .docx (MS Word形式)
  • .xls, .xlsx (MS Excel形式)
  • .ppt, .pptx (MS Power Point形式)
  • .txt (テキストファイル)
  • .html (HTMLドキュメント)
  • .odt, .ods などの LibreOffice ドキュメント

[変換を行うコマンドのサンプル]

# Writer ドキュメントを PDF 変換し、カレントディレクトリに出力します
soffice  --headless --convert-to pdf filename.doc

# Writer ドキュメントを PDF 変換し、-outdirで指定したディレクトに出力します
soffice  --headless --convert-to pdf -outdir /home/user filename.doc 

# ワイルドカード指定で、複数のファイルを一括で PDF に変換する
soffice  --headless --convert-to pdf -outdir /home/user *.doc 

(case 2) LibreOffice ドキュメントを 自動的に印刷する

[やりたい事]
出力するプリンタ毎にフォルダを作成し、
ドキュメント作成時に、指定プリンタに自動プリントしてみます。
※ PowerShell と LibreOffice のコマンドを組み合わせて実現します。
これは帳票作成は1つのサーバで集中作成するけど、
プリントは別々のプリンタで行いたい場合に便利です。

(1) 印刷を行うプリンタの数だけ、フォルダを作成します。

rootpath/  
 ├ printername1/
 │    ここに印刷ドキュメントを配置
 ├ printername2/
 │    ここに印刷ドキュメントを配置
 ・・・

(2) ドキュメントの作成を監視するスクリプトを作成します。

[powershell でのサンプル]

$dir = $Args[0] #引数に監視を行うディレクトリを渡します
 
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "$dir"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true 
 
$action = { $path = $Event.SourceEventArgs.FullPath
            $printer = ((Get-Item $path).Directory).Name
            soffice --pt $printer $path
          }    
 
# ファイル作成のイベントが発火したら、印刷アクションを呼ぶ
Register-ObjectEvent $watcher "Created" -Action $action

# 無限ループ
while ($true) {sleep 1}

実運用で利用するには、ファイルの監視を行う powershell を
Start-Job で別の powershell からバックグラウンドジョブとして呼び出して下さい。

LibreOffice Calcで1シート目しか印刷されない問題

LibreOffice Calc で複数シートを印刷する時に、
1枚目のシートしか印刷できなない問題が発生する場合があります。
その時は、↓の設定を行う事で、複数シートの印刷が行えるようになります。

  • 印刷したい全てのシートを選択したあと,「書式>印刷範囲>追加」をする.
  • 印刷したい全てのシートを選択したあと,「書式>印刷範囲>編集」で「シート全体」に設定する.
スポンサーリンク
スポンサーリンク
スポンサーリンク

コメント

  1. PK Domain providing Hosting in Pakistan. Don’t need to go away if you looking for Web Hosting in Pakistan. You can get PK domains registration. We are providing high quality website hosting to personal and business websites in Pakistan. Pay a visit to our website at www.pkdomain.com.pk. You can also buy cheap reseller hosting in Pakistan from us. We Provide Reliable Web Hosting at affordable prices.

    返信削除

コメントを投稿

このブログの人気の投稿

axiosの使い方まとめ (GET/POST/例外処理)

axiosの使い方まとめ (GET/POST/例外処理)最近何かとよく使うJavaScriptでAJAX通信を行うaxiosについて、簡単に使い方をまとめました。GETリクエストをaxiosで送るまずはGETリクエストをaxiosで送る方法です。const res =await axios.get('/users') console.log(res.data)分割代入の記法を使うと、以下のようにも書けますconst{data}=await axios.get('/users') console.log(data)クエリパラメータ (URLパラメータ)を指定クエリパラメータを指定する方法は2つあります。1つ目は、axios.getに指定するURLに直接記述する方法です。axios.get('/user?id=123')2つめは、axios.getの第2引数に、オプション指定する方法です。axios.get('/user',{ params:{ id:123}})POSTリクエストをaxiosで送る次はPOSTリクエストをaxiosで送る方法です。JSON形式でPOSTするJSON形式でPOSTする場合は、axios.postの第2引数に、送信するデータをJavaScriptオブジェクトで指定します。const res =await axios.post('/user',{ id:123, name:'Yamada Tarou'})application/x-www-form-urlencoded形式でPOSTするapplication/x-www-form-urlencoded形式でPOSTする場合は、URLSearchParamsを使います。var params =newURLSearchParams() params.append('id',123) params.append('name','Yamada Tarou')const res =await axios.post('/user', params)axios でファイルをアップロードする画像などのファイルを、axiosでアッ…

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決する

[VB, C#] Windows 8, Window 10 で ImeModeが制御できない問題を解決するタイトルの通りですが、Windows 8 以降では Windows Form アプリケーションで、コントロールの ImeMode に Katakana や KatakanaHalf を設定しても、カタカナになってくれません。なぜ ImeMode が効かないのか?Windows 8 以降、IME Mode の切り替えは、ユーザー単位で切り替わるようになった為、アプリから IME Mode 制御が出来ないようになりました。
(IME をON にした場合、常に ひらがな モードになます)※ Windows 7までは、IME Modeの切り替えはアプリ単位で行われていた為、問題なくアプリから IME制御が行えました。対処方法Windows 8 以降、IMEの制御は、InputScope クラスの利用が推奨されています。
しかし、InputScope クラスは、WPF、Windows ストアアプリでしか使えない為、Windows Formアプリでは使用できません。
(Windows Form はもう使うな!という事でしょうか (涙) )結論としては、コントールパネルの設定で、IMEの制御をユーザ単位から アプリ単位に変更する事ができます。
これで、Windows Formアプリでも 従来通りIMEの制御を行う事が出来ます。おわりにこの方法だと、アプリをインストールする端末すべてに設定が必要となり、とっても面倒です。。。
しかし、今の所これしか方法がない状態です。
これからは Windows Formではなく、WPFや Windows ストアアプリで作れという事ですかね (^^;)

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]

MailKitの使い方! エンコーディング指定や添付ファイをメールで送信する方法[C#/VB Tips]MailKitを使ってメールを送るサンプルコードです。(C#)UTF8/iso-2022-jpのエンコーディング指定、GMail/YahooのSMTPサーバで送るなど、4つのサンプルコードでMailKitの使い方を紹介します。MailKitって何?2017年に.NET標準のSystem.Net.Mail.SmtpClientが廃止予定となり、Microsoftより今後はオープンソースライブラリである、MailKitに置き換えるとアナウンスがありました。既にSmtpClientは非推奨になっており、今後は廃止されていきます。現在、SmtpClientを使用したソースコードには、Visual StudioからMailKitを使うよう警告が出るようになっています。さっそく、MailKitを使ってメールを送信するサンプルコードを作っていきます。UTF8でメールを送信文字エンコーディングを、UTF8でメールを送信するサンプルコードです。
MailKitは、デフォルトの文字エンコーディングがUTF8なっている為、シンプルなコードでメールを送信する事ができます。var host ="<smtp server name>"; var port =25;// or 587using(var smtp =new MailKit.Net.Smtp.SmtpClient()){//SMTPサーバに接続する smtp.Connect(host, port, MailKit.Security.SecureSocketOptions.Auto);//認証が必要な場合は、以下のコメントを解除//smtp.Authenticate("<id>", "<password>");//送信するメールを作成する var mail =new MimeKit.MimeMessage(); var builder =new MimeKit.BodyBuilder(); mail.From.Add(new MimeKit.MailboxAddress("",&quo…