2011年1月12日水曜日

FrameMaker 10体験版

FrameMaker 10の発表、そして出荷が始まったらしい。
昨年末に動画で登場していたときにはすでにマスターアップが完了していたということなのだろう。

アップグレード内容はS1000、DITA1.2対応、それに関連する機能の強化が主なんだろう。市販のCMS(SharePoint、Documentum)に対応といったところだ。

早速、体験版を入れてあれこれ触ってみて目についた新しい機能は

  • 文字列の背景色の追加(Wordの蛍光ペンみたいなの)
    ただし、段落にはかけられなかったり日本語OpenTypeだといまいちだったりと使いどころに悩むところ。
  • Adobe ExtendScriptに対応
    長年待ち望まれた機能が遂に!これでほとんどのFDKの煩わしい処理から開放される。
    ただし、ドキュメントが整理されていなかったり中のアプリケーション構造がFDKと大して変わらなかったりと慣れてないとかなり難しいかもしれません(特にテキスト周り)
  • 構造の比較
    気になるのでメモ
  • 前バージョンのバグのチェック
    日本語フォントでCMYK出力できるようになったか・・・

下は10分位で適当に作ったスクリプトです。選択した画像のアンカー枠の大きさを選択した画像の大きさに合わせるスクリプトです。

var docObj = app.ActiveDoc;
var selGfx = docObj.FirstSelectedGraphicInDoc;
var afrmObj = selGfx.FrameParent;

afrmObj.Width = selGfx.Width;
afrmObj.Height = selGfx.Height;
selGfx.LocX = 0;
selGfx.LocY = 0;

問題はバージョンアップできるのが8からということか。(TCS3だと7.xからできるが本体より高い)
まだ世の中で動いているシステムの大半が7.x以下ではないだろうか。

2011年1月8日土曜日

Wordで2バイト文字のチェック

Wordデータを英語環境に持って行くと2バイトフォントが使われている箇所を探せないかという話があったのでいい方法はないかな?

下のサンプルは少々強引だが・・・選択範囲に使用している文字のフォント名を取得してWin32APIを使用してフォントが2バイト(日中韓)フォントかの確認をしています。
当然OSに無いフォントがある場合は正常に動作しません。たぶん・・・。

簡単に説明するとCharacter.Font.Nameが実際に表示されているフォントでCharacter.Font.ASCIIが欧文フォント、Character.Font.NameFarEastが日中韓フォントのどれかになります。
他にもアラビア語用とかも選択できるみたいだがめんどくさいので割愛ということで。

Option Explicit
Private Const LF_FACESIZE       As Long = 32&
Private Const LF_FULLFACESIZE   As Long = 64&

Private Const DEVICE_FONTTYPE   As Long = &H2&
Private Const RASTER_FONTTYPE   As Long = &H1&
Private Const TRUETYPE_FONTTYPE As Long = &H4&

Private Type LOGFONT
    lfHeight As Long
    lfWidth As Long
    lfEscapement As Long
    lfOrientation As Long
    lfWeight As Long
    lfItalic As Byte
    lfUnderline As Byte
    lfStrikeOut As Byte
    lfCharSet As Byte
    lfOutPrecision As Byte
    lfClipPrecision As Byte
    lfQuality As Byte
    lfPitchAndFamily As Byte
    lfFaceName(LF_FACESIZE - 1&) As Byte
End Type

Type NEWTEXTMETRIC
    tmHeight As Long
    tmAscent As Long
    tmDescent As Long
    tmInternalLeading As Long
    tmExternalLeading As Long
    tmAveCharWidth As Long
    tmMaxCharWidth As Long
    tmWeight As Long
    tmOverhang As Long
    tmDigitizedAspectX As Long
    tmDigitizedAspectY As Long
    tmFirstChar As Byte
    tmLastChar As Byte
    tmDefaultChar As Byte
    tmBreakChar As Byte
    tmItalic As Byte
    tmUnderlined As Byte
    tmStruckOut As Byte
    tmPitchAndFamily As Byte
    tmCharSet As Byte
    ntmFlags As Long
    ntmSizeEM As Long
    ntmCellHeight As Long
    ntmAveWidth As Long
End Type

Private Const ANSI_CHARSET        As Byte = 0&
Private Const BALTIC_CHARSET      As Byte = 186&
Private Const CHINESEBIG5_CHARSET As Byte = 136&
Private Const DEFAULT_CHARSET     As Byte = 1&
Private Const EASTEUROPE_CHARSET  As Byte = 238&
Private Const GB2312_CHARSET      As Byte = 134&
Private Const GREEK_CHARSET       As Byte = 161&
Private Const HANGUL_CHARSET      As Byte = 129&
Private Const MAC_CHARSET         As Byte = 77&
Private Const OEM_CHARSET         As Byte = 255&
Private Const RUSSIAN_CHARSET     As Byte = 204&
Private Const SHIFTJIS_CHARSET    As Byte = 128&
Private Const SYMBOL_CHARSET      As Byte = 2&
Private Const TURKISH_CHARSET     As Byte = 162&
Private Const VIETNAMESE_CHARSET  As Byte = 163&

Private IsCJK As Boolean                    ' CJKフォントかの確認

Private Declare Function EnumFontFamiliesEx Lib "gdi32" Alias "EnumFontFamiliesExA" ( _
    ByVal hdc As Long, _
    lpLogFont As LOGFONT, _
    ByVal lpEnumFontProc As Long, _
    ByVal LParam As Long, _
    ByVal dw As Long _
) As Long

Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    Destination As Any, _
    Source As Any, _
    ByVal Length As Long _
)

Private Declare Function GetDC Lib "user32" ( _
    ByVal hwnd As Long _
) As Long

Public Sub CheckFarEastFont()
' フォントが日中韓フォントかの確認
    Dim wd_Selection As Word.Selection
    Dim i As Long
    
    Set wd_Selection = Application.Selection
    
    For i = 1 To wd_Selection.Characters.Count
        With wd_Selection.Characters(i)
            If .Font.Name = .Font.NameFarEast And .Font.Name <> "" Then
                Call FontCheck(.Font)
            End If
        End With
    Next
End Sub

Private Sub FontCheck(wd_Font As Word.Font)
' フォントが日中韓のエンコードを所持しているかの確認
    Dim bytBuf()    As Byte
    Dim udtLogFont  As LOGFONT
    
    bytBuf = StrConv(wd_Font.Name, vbFromUnicode)
    With udtLogFont
        .lfCharSet = DEFAULT_CHARSET
        Call MoveMemory(.lfFaceName(0), bytBuf(0), UBound(bytBuf) + 1&)
        .lfPitchAndFamily = 0&
    End With
    
    IsCJK = False
    Call EnumFontFamiliesEx(GetDC(0), udtLogFont, AddressOf EnumFontFamProc, ByVal 0&, 0)
    If IsCJK Then
        wd_Font.Animation = wdAnimationMarchingRedAnts    ' CJKフォントの場合赤い線のアニメーション
    Else
        wd_Font.Animation = wdAnimationNone
    End If
End Sub

Private Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Long) As Long
    Dim FaceName As String
    
    FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)
    Debug.Print Left$(FaceName, InStr(FaceName, vbNullChar) - 1)    ' フォント名
    EnumFontFamProc = 1
    Select Case lpNLF.lfCharSet
    Case SHIFTJIS_CHARSET, GB2312_CHARSET, CHINESEBIG5_CHARSET, HANGUL_CHARSET:
        IsCJK = True
    End Select
End Function

しかし、Unicodeの時代なのに未だに2バイト文字というのもなんだかなぁ。

2011年1月5日水曜日

今年もいいことがありますように

忙しくて、ずうっと放置プレイだった。
まぁ、今年起きそうなことを予想という名の落書きを。

電子書籍バブルの崩壊

半年以内で起きるだろう・・・たぶん。
正直言って今の作り方ではいたずらに体力を消耗しているだけで何も生み出さないだろう。

この状況に誰もが電子書籍は本当に必要なのだろうかと思うだろう。

だが、ホリエモンが月840円のメルマガを1万人に売っているわけで・・・内容は別としてテキストのみの商品が何人もの人間が苦労して創り上げた電子書籍より売上も制作費の安さが勝っているわけです。
ほかにも同人誌でも1ヶ月で3万ダウンロードの売上を出したサークルもあるわけだから、電子書籍がダメという理由ではないと思う。

まぁ何が言いたいかというとあれこれ複雑な規格つくるよりhtmlやPDFでいいんじゃないという話。重要なのは中身だよ。

Andoroidの増殖

既定路線だろう。
今後もケータイからちょっとしたガジェット、カーナビなんかも。
いや・・・専用カーナビ不要論とかでてくるかも。
ただ、法人向けはWindows Phone 7かなとは思っているが日本でいつ出るのやら。

AppleStoreのブレーキ

アプリの量が膨大になって目的のアプリが見つかりづらいなどの不満が両者から公然と出てくるかも。
特に電子書籍型アプリとか、あと著作者に許諾を得ずに作成されて登録される海賊版アプリ。
何かしらの方策は打つとは思うけど。

Windows7の普及、XPの衰退

XPの販売終了、セキュリティの問題からWindows7に普及が加速するだろう。
問題は金のない中小企業がついていけるかというところ。

html5一色の1年

iPhone、Andoroid、PCとの共通の言語はとなるとJAVAではなく手軽さ、作成のしやすさからhtml5だろう。
そして、なんだかんだいってもInternetExplore 9のリリース。

 

あれこれ、書いてみたが今までのコンテンツのリファイン(焼き直し)という感じが強いかも。
要は声が大きい人が素晴らしいといえばみんな群がるという構造は今年も続くだろうという話。