plugin development

InDesignスクリプト/プラグイン開発

InDesignスクリプト/プラグイン開発のご相談がが増えています。

弊社ではC++, JavaScriptを利用した開発実績が多数ございますので
ご協力できることがありましたらご連絡いただければと思います。
例えば、下記のような実績がございます。

  • 差分抽出用のツール開発
  • 改訂管理ツールの開発
  • 部品管理ツールの開発
  • 一括置換処理ツールの開発
  • MIFデータ(FrameMaker)のInDesignデータへのコンバート
  • HTML出力ツール
  • CKEditorから出力されるデータの自動組版
  • DITAデータのInDesignデータへの自動変換
  • 指定文字列マーキング
  • 自動画像変換ツール

OfficeLSTools – Officeアドイン開発 [コード実行]

元々サンプルパッケージに入っていたデータはシート上に「ExecuteFunction works. Button ID=XX」として
テキストフレームが追加されるコードでした。

仕組みとしてはマニュフェストXMLファイルで、対応するボタン設定部に

<Action xsi:type=”ExecuteFunction”>
<FunctionName>writeText</FunctionName>
</Action>

として指定します。xsi:typeはExecuteFunctionかShowTaskpaneを指定するようです。
ExecuteFunctionを指定することによりJavaScriptコードを実行できます。
ここではwriteTextという関数を実行することになっていました。

実行するコード類はFunctionFile要素で指定した場所に配置するようです。
サンプルではFunctionFile.htmlファイルが指定されています。
このFunctionFile.htmlは以下のようになっていました。

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″ />
<meta http-equiv=”X-UA-Compatible” content=”IE=Edge” />
<title></title>
<script src=”https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js” type=”text/javascript”></script>
<script src=”https://appsforoffice.microsoft.com/lib/1/hosted/office.js” type=”text/javascript”></script>
<script src=”FunctionFile.js” type=”text/javascript”></script>

</head>
<body>
<!– 注: 本文は意図的に空白にしてあります。これはボタンから呼び出されたものなので、レンダリングする UI がありません。 –>
</body>
</html>

そして、FunctionFile.jsの中で、writeText関数が定義されていました。

function writeText(event) {

// Implement your custom code here. The following code is a simple example.
Office.context.document.setSelectedDataAsync(“ExecuteFunction works. Button ID=” + event.source.id,
function (asyncResult) {
var error = asyncResult.error;
if (asyncResult.status === “failed”) {
// Show error message.
}
else {
// Show success message.
}
});
// Calling event.completed is required. event.completed lets the platform know that processing has completed.
event.completed();
}

こんな感じですね。これでシート上にテキストフレームを追加してフレーム内にテキストを配置します。

OfficeLSToolsでは、カラーパレットを表示させたり、挿入するシートやオブジェクトを選ぶなどの操作が必要なため
ダイアログを表示させる必要があります。それで、ダイアログを表示する方法について調べてみました。
対応するボタンのアクションに適用な関数名を設定します。
あとはスクリプトファイル内で必要な関数を定義すれば良いだけです。
ダイアログの表示にはOffice.context.ui.displayDialogAsyncを利用します。
ダイアログレイアウトはHTMLファイルを生成し表示させる方法にしました。
このようなHTMLをダイアログとして表示させます。タイトル、段落テキスト、ボタン、画像の表示などをしています。

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″ />
<meta http-equiv=”X-UA-Compatible” content=”IE=Edge” />
<meta name=”robots” content=”noindex,nofollow”>
<title>Dialog API Dialog</title>
<script src=”https://code.jquery.com/jquery-2.2.4.min.js”></script>
<script src=”https://appsforoffice.microsoft.com/lib/1/hosted/office.js”></script>
<script>
Office.initialize = function(reason){}
$(function(){
$(“.btnDialog”).click(function(){
//親となるアドインにメッセージ送信
Office.context.ui.messageParent($(this).val());
});
});
</script>
</head>
<body>
<h4>Sample Dialog</h4>
<p>This is TEST page.</p>
<p>
<button class=”btnDialog” value=”Hello.”>button 1</button>
<button class=”btnDialog” value=”Good Bye.”>button 2</button>
</p>
<p><img src=”./Images/logo.png” /></p>
</body>
</html>

ボタンクリックでこんなダイアログを表示できました。
同じようにしてPowerPointの作業領域にもHTMLでレイアウトしてUIを定義することができるようです。

OfficeLSTools – Officeアドイン開発 [グループの追加]

メニューにグループを追加してみましょう。

Officeアドインでは、CustomTab要素の子要素としてgroup要素を10個まで定義することができるようです。
ちなみに、各group要素の子要素としてcontrol要素は6個までと定義されているとのこと。
※ 1つのアドインにCustomTabは1つしか定義できません。

groupタグを複数記述することで、グループを追加することができグループラベルを設定しメニュー構成を区切ることができます。

<CustomTab id=”TabHome”>
<Group id=”Contoso.Group1″>

</Group>
<Group id=”Contoso.Group2″>

</Group>
<Label resid=”Contoso.Group.Label” />
</CustomTab>

こんな感じで定義することになります。

同じようにして他のメニューも追加していけばタブメニューは仕上げることができますね。
次回は、ボタンをクリックされた場合に実行されるスクリプトについて考えてみます。

OfficeLSTools – Officeアドイン開発 [専用ボタンの定義]

前回は専用タブの定義を行いましたので、今回は専用ボタンの定義を行いたいと思います。

ボタンの追加ですね。
OfficeLSToolsにあるスライド挿入の表紙スライド、章スライド、ページスライドのボタンを配置してみたいと思います。
ページスライドのボタンはプルダウンなので、プルダウン表示については追って確認してみたいと思います。

タブが設定できましたので、まずタブ内にグループを設定します。
今回はOfficeLSToolsでいうところの「スライドを挿入」のグループを設定します。

CustomTab要素の下にGroup要素を指定しLabel要素を定義すれば良いようです。

<CustomTab id=”OfficeLSTools”>
 <Group id=”Contoso.Group1″>
  <Label resid=”Contoso.Group1Label” />

設定する文字列はResources要素側で対応するresidとして用意しておけばOKです。

<bt:String id=”Contoso.Group1Label” DefaultValue=”スライドを挿入” />

これでグループが設定できました。次にグループ内にボタンを配置します。
ボタンのアイコンにはPNG画像を利用できるようです。
16、32、80のサイズを用意しておくことが必須となっているようです。
ボタン表示には
上記で作成したGroup要素の子要素としてLabel要素の次にControl要素を定義します。

<Control xsi:type=”Button” id=”Contoso.TaskpaneButton1″>
 <Label resid=”Contoso.TaskpaneButton1.Label” />
 <Supertip>
  <Title resid=”Contoso.TaskpaneButton1.Label” />
  <Description resid=”Contoso.TaskpaneButton.Tooltip” />
 </Supertip>
 <Icon>
<bt:Image size=”16″ resid=”Contoso.cover16″ />
<bt:Image size=”32″ resid=”Contoso.cover32″ />
<bt:Image size=”80″ resid=”Contoso.cover80″ />
 </Icon>
 <Action xsi:type=”ExecuteFunction”>
  <FunctionName>ButtonId1</FunctionName>
 </Action>
</Control>

こんな感じですね。他にもボタンを同じようにControl要素を追記して定義します。
また画像を所定の場所に配置しておく必要もありますね。

Control要素のxsi:type属性にはButtonとMenuが設定できるようです。
Supertip要素はヒント情報
Action要素はクリックされたときに実行される内容になるようです。

こんな感じでボタンが配置できました。

OfficeLSTools – Officeアドイン開発 [専用タブの定義]

弊社で開発したOfficeLSToolsはVSTOを利用したアドインのため、MacやWEB版でも利用可能なOfficeアドインを開発していきたいと考えています。
Officeアドインプラットフォーム(https://docs.microsoft.com/ja-jp/office/dev/add-ins/overview/office-add-ins)を利用して少しずつブログにて情報を展開してみたいと思います。

まずは環境構築です。
https://docs.microsoft.com/ja-jp/office/dev/add-ins/tutorials/powerpoint-tutorial
こちらのページにあるようにVisualStdioを利用してプロジェクトを追加→ビルドまで進めます。

サンプルデータではアドインの表示がホームタブに表示されるようになっているので
HelloWorldプロジェクトのHelloWorld.xmlのOfficeTabをCustomTabに変更しIDを採番し
CustomTabの子要素であるGroup要素の後ろにLabel要素を設定すれば任意のタブ名を
設定できるようです。

<label resid=”Contoso.TabLabel”></label>

こんな感じでLabel要素を定義し
Resources要素内で

<bt:string id=”Contoso.TabLabel” DefaultValue=”OfficeLSTools”></bt:string>

などと定義しておけば任意のタブ名に変更できるようです。
ここではOfficeLSToolsをタブ名にしています。

Officeアドインタブ

これから少しずつ対応していきたいと思います。
どこまで移植できるか…。

OfficeLSTools(PowerPoint/Excelアドイン開発 VSTO)

PowerPoint/Excelのアドイン開発、サービス展開を検討中です。

用意されたテンプレートや設定ファイルがあれば、誰でも一定品質のドキュメントを仕上げることができます。
詳しくはOfficeLSTools紹介ページをご覧ください。紹介ドキュメントや動画などで動作イメージができます。

PowerPointアドインではあらかじめ定義されたページを読み込ませて、部分的なテキストを差し替えるだけで目的の資料を作成できます。また読み込ませたオブジェクトをあらかじめ定義しておきボタン1つで読み込ませることができます。その他企業カラーに合わせた編集がしやすいように支援機能が用意されています。

Excelアドインでも企業カラーに合わせた表レイアウト、グラフレイアウトを実現できます。
他にも便利な機能がありますので一度お試しいただければと思います。

officeLSTools_logo

よろしくお願いいたします。

MA-CREATE 佐藤

自然言語処理 janome, word2vec

コンテンツ管理システムにおいて、各種データにメタ情報を設定するのは非常に手のかかることです。
大量のデータを非構造から、構造化データに変換したことによって、大きなメリットがありますが
構造化された各トピックデータに対して適切なメタ情報を設定することはなかなか大変なものです。

janome, mecabといった形態素解析モジュールを利用して文章を解析し、各データにどのような
メタデータを設定するかの候補を自動的に設定する(候補としてあげる)ことができます。

また形態素解析の結果データを管理しておけば、word2vecといったモジュールを利用して
このいわば辞書データを利用し文章や単語の類似語や文章を要約するよな情報を抽出することができます。
単語や文章の類似度なども評価することができます。

蓄積されている大量のデータを利用し、的確な情報管理のために有用なツールとなります。

ご興味のある方はお気軽にご連絡下さい。

WORD VSTO

WORDプラグインをVSTOで対応しています。
ExcelやPowerPointと同じような感覚で触れます。

ほぼ、毎日使うWORD、Excel、PowerPointを使いやすいようにカスタマイズするのは有用です。
社内でのドキュメント運用において、統一感、同レベルの品質を実現できます。

DITAデータを Congility – IdXMLを利用したInDesign自動組版

  • 5th 7月 2018
  • DITA

Congility社のIdXMLを利用したInDesign自動組版を手がけました。
DITAはOxygenを利用して生成されます。

このDITAデータを入力データとしてIdXMLで変換を掛けます。
IdXML(http://congility.com/idxml/)ではかなり幅広い設定があり、
InDesignへの入力データとして適切な形へと変換してくれます。

今回はIdXMLを一部カスタマイズしましたが、なるだけカスタマイズしないで
IdXMLの仕様に細々合わせていくことで、余計な工数を削減し
シンプルなXMLファイルへと変換できると感じます。

今回は、IdXMLの処理直前にXSLT変換、処理後にもXSLT変換させて
InDesignのプラグインへと連携させました。

ditamap内データのエレメントデータについて

  • 3rd 3月 2016
  • DITA

FrameMakerを利用したDITA案件が増えてきている。
1点今後のためにメモ。

ditamap内に定義される各種データに、2バイト文字が利用されることがある。
メタ情報の設定場所なので多々でてくる。

ditamapのデータは他のFMデータと同じようにしてテキストデータを取得できるのだが
ditamapデータはFMに投げ込まれた時にテンプレートとEDDが紐付いていることを
忘れてはならない。

ある要素の内容についてF_ApiGetTextなどを利用して取得するのだが
ditamap用のテンプレートで各要素に設定されているフォントが
2バイト文字に対応していない場合、プログラム側でどうやって
処理しようとしても必ず文字化けとなってしまい正しい値を取得できない・・・。
また、取得できたとしてもEDD側で要素に対してPrefixが設定されている場合
予定なテキストデータまでくっついて取得できてしまう。

ditamapに定義されているデータを表紙などに利用しようとする場合に
ditamapにはテンプレートとEDDが強く関連していることを念頭に
おいておかなければならない。
単なる各種ditaデータへのパスが定義されているMAPデータではないということ