2010年7月27日火曜日

FDK使ってマスターページの適用

文書にFDKを使用してマスターページの適用を行いたいがここにアクセスするためのAPIがbookファイルからしか用意されていない。
fcodeからのアクセス方法を調べてもないです。

しかし、ESC、M、Pと順番に入力するとマスターページの適用が実行されることが判ったので(ヘルプにすら書いていない)、キーコードを送信すれば・・・

static IntT fcodes[] = {FC_ESC, 'M', 'P'};
F_ApiFcodes(sizeof(fcodes)/sizeof(IntT), fcodes);

実行されますが、ダイアログが出てしまいます。

このダイアログは消せないので、Win32APIのSendMessage使って、OKボタンを押してやってください。

2010年7月4日日曜日

OpenTypeフォントの文字欠け

Windows NT系でOpenTypeフォントを使用していると、時々文字欠けをしてしまいます。(欠ける文字もランダムだから困っちゃう)

原因はOSのバグでHotFixが公開されています。XPはSP4、VistaはSP2で同梱されているらしいです。

http://support.microsoft.com/?id=952909 (HotFix詳細)
http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=952909&kbln=en-us (直リンク)
Hotfix for FrameMaker

FDKプロジェクトの新規作成

FDKを新規作成方法です。VC2008Expressで説明だけど、ほかのバージョンでも大丈夫のはず。

  1. 新しいプロジェクトから「Win32 コンソール アプリケーション」を選択。
  2. アプリケーションの設定の項目を下記のように変更。
    アプリケーションの種類を「DLL」を選択。
  3. プロジェクトのプロパティを開き、下記のように設定。
    • C/C++→全般→追加のインクルード ディレクトリ にFDKのインクルードフォルダにパスを通す
      [例] C:\Program Files\Adobe\FDK7.2\include
    • C/C++→コード生成→構造体メンバのアライメントを「8 バイト」に変更
    • C/C++→プリプロセッサ→プリプロセッサの定義から「PROJECTNAME_EXPORTS」を削除
    • リンカ→全般→追加のライブラリ ディレクトリ にFDKのライブラリフォルダにパスを通す
      [例] C:\Program Files\Adobe\FDK7.2\lib
    • リンカ→入力→追加の依存ファイルに「fdk.lib api.lib fmdbms32.lib」を追加
    • (VC2005以降のみ)リンカ→入力→特定のライブラリの無視に「LIBC.lib」を追加
  4. ProjectName.cppを開いて#include "stdafx.h"の次の行に「#define PROJECTNAME_EXPORTS」を追加
  5. stdafx.hを開いて下記のコードを追加する。
    // for FDK
    #define DONT_REDEFINE // Console app needs native types
    #define WBUFLEN 512
     
    #include "fapi.h"
    #include "fdetypes.h"
    #include "futils.h"
    #include "fstrings.h"