RSS

タグ別アーカイブ: east asian scripts

Vertical Address Scripting Tips 5 of 5          —宛名の縦書き Tipsパート5— 

inkpot 5

This is the last(#5 of 5 series) Tips about the vertically address scripting (wiki : Horizontal and vertical writing in East Asian scripts).
To use this tips, it is necessary that you have a Japanese version of Adobe InDesign because it use one of the build-in feature of that only available in Japanese version of Adobe InDesign.

As basic knowledge and tips of the vertical address scripting, please refer to my old post regarding the vertical address scripting.

[JP]
これは宛名の縦組みに関するTipsシリーズの最終投稿(パート5)です。本Tipsの使用は日本語版のAdobe InDesign使用を前提としています。

また、宛名の縦組みに関する基本方法は過去の投稿「宛名の縦書き」を参照して下さい。

1. Apply different text formatting only on the multiple digit number in the recipient address.
2. Force to display recipient address in one line when it doesn’t have any value which should use 2nd line.
3. Furthermore, to display second line of recipient’s address if it has over certain number of characters.

1. 住所に含まれる連続する2桁以上の数列に対して、その桁数毎に異なる文字調整を行う。
2.住所表示にが二行要する場合に、指定した文字数を超える場合にテキストサイズを変更させる。
3.但し、二行目を必要としない住所の場合は必ず一行で表示させる

This tips if for user who have below request.
このTipsは以下の様な要望をお持ちのユーザー向けです。

  • The way of Tip 3 just switch text frame to which has different text formatting when it hit a condition. So it affect not only number in address, but also normal text of recipient’s address as well. If you would like to have that text formatting only for number in recipient’s address, then please refer this tip.
    (This tip is what was integrated all tips I have posted in this series)
  • Tip 3で紹介した方法では、2桁以上の連続する数値列を認識した場合に異なる組版設定をしたテキストフレームに住所を表示する方法であったので、文字ツメをする必要がないテキストに対しても効果がかかり、見栄えが崩れてしまう。文字ツメの効果を連続する数値列のに反映させたい。また、住所表示に二行要する場合に、二行目が特定の文字数を超える時にテキストサイズを小さくしたい。(つまり、今まで紹介したTipsの統合版です)

What you can achieve with this tip?

このTipsで何が出来るのか?

This tips make you able to display recipient address by following condition.

  • Apply the kerning only for multiple digit number in the recipient’s address.
  • Display recipient’s address in one line by changing text size, especially if record doesn’t have any value which should be displayed in second line.
  • Display recipient’s address in two line if record has value for second line.
  • Change the text size of second line when text string has more than certain number of characters.

本Tipsを使用すると、以下の効果を反映できます。

  • 住所に含まれる複数桁の数列のみに対して、桁数に応じて異なる文字ツメの効果をかける。
  • 住所が二行目の表示を要する値を持たない場合は、テキストサイズを変更して、必ず一行で表示する。
  • 住所が二行目の表示を要する値を持つ場合には、住所を二行で表示させる。
  • 住所が二行目の表示を要する値を持ち、さらに特定の文字数を超える場合にテキストサイズを変更して表示する。

Preview :
プレビュー:

Vertical Scripting Tip5 - Preview

Setup
設定方法

Please refer to former post of this series regarding basic setting.

縦組みのテキストフレームに関する基本的設定方法は過去の投稿を参照してください。

    1. Create variables at outside of page layout. Those variables will be used for script.
      ページのレイアウト範囲外にスクリプトで使用するためのバリアブルを作成します。
      Vertical Scripting Tip 5 - Alternative Variables
    2. Create text frame for vertically scripting.
      宛名用に縦組みのテキストフレームを作成します。
      VerticalScripting5-VariableTextFrame
    3. Register all frames in DSM-Bridge as variable element.
      全てのバリアブル項目をDSM-Bridgeに登録する。
    4. Setup for each variables :
      All variable should have assignment like below.
      バリアブル項目への割り当て:
      以下の様に割り当てを行います。
      VerticalScripting5-Address_part1_Assignment

      VerticalScripting5-Address_part1_Assignment_Preview
      VerticalScripting5-Address_part2_Assignment
    5. Edit VBScript
      Let’s edit vbscript. I made script that named as “TextSizeChangeScript”. Here is the entire  of script code.
      VBスクリプトの編集:
      それではVBスクリプトを編集します。今回は以下のようにしました。
      VerticalScripting5-Script_Preview

      function TextSizeChangeScript()
           MaxSize = 18
           MinLen = 16
           MinLen2 = 10
           s = Var.GetS("Address_part1")
           Count = CountLength(s)
           Factor = MinLen / Count
           NewSize = MaxSize * factor
      
           If NewSize > MaxSize Then NewSize = MaxSize
           FirstLine= Var.SIZE(CDbl(NewSize)) & MojiTsume(s) & Var.tag("cs", "")
      
           t = Var.GetS("Address_part2")
           Count2 = CountLength(t)
           If Count2 > 0 Then
                Factor2 = MinLen2 / Count2
                NewSize2 = MaxSize * Factor2
      
                If NewSize2 > MaxSize Then NewSize2 = MaxSize
                SecondLine = Var.SIZE(CDbl(NewSize2)) & MojiTsume(t) & Var.tag("cs", "")
                TextSizeChangeScript = FirstLine & vbcrlf & SecondLine
            Else
                TextSizeChangeScript = FirstLine
           End If
          Var.puts "nogtips_Final", TextSizeChangeScript
      End function
      '***************************************************************************
      function CountLength(value)
          Dim address
          Dim regExp2, regExp3
          Dim oMatch, oMatches, pMatch, pMatches
          Dim aCnt, bCnt
          Dim newStr(10), new2Str(10), new3Str(10), new4Str(10)
          Dim a(10), b(10) ,c(10), d(10)
          Dim atex(10)
          Dim btex(10)
          Dim result
          address = value
      
                Set regExp3 = New RegExp
                regExp3.Pattern = "(\d{3})"
                regExp3.Global = True
                Set oMatches = regExp3.Execute(address)
                aCnt = oMatches.Count
                     If aCnt > 0 Then
                          For i = 0 To (aCnt - 1)
                               Set oMatch = oMatches(i)
                               atex(i) = oMatch.Value
                               a(i) = i
                                    If i = 0 Then
                                         newStr(0) = Replace(address, oMatch.SubMatches(0), a(i))
                                    Else
                                         newStr(i) = Replace(newStr(i - 1), oMatch.SubMatches(i), a(i))
                                    End If
                          Next
                               Set regExp2 = New RegExp
                               regExp2.Pattern = "(\d{2})"
                               regExp2.Global = True
                               Set pMatches = regExp2.Execute(newStr(aCnt - 1))
                               bCnt = pMatches.Count
      
                               If bCnt > 0 Then
                                    For i = 0 To (bCnt - 1)
                                         Set pMatch = pMatches(i)
                                         btex(i) = pMatch.Value
                                         b(i) = i
                                              If i = 0 Then
                                                   new2Str(0) = Replace(newStr(aCnt - 1), pMatch.SubMatches(0), b(i))
                                              Else
                                                   new2Str(i) = Replace(new2Str(i - 1), pMatch.SubMatches(0), b(i))
                                              End If
                                    Next
                                    CountLength = Len(new2Str(bCnt - 1))
                               Else
                                    CountLength = Len(newStr(aCnt - 1))
                               End If
                     Else
                          Set regExp2 = New RegExp
                          regExp2.Pattern = "(\d{2})"
                          regExp2.Global = True
                          Set pMatches = regExp2.Execute(address)
                          bCnt = pMatches.Count
      
                          If bCnt > 0 Then
                               For i = 0 To (bCnt - 1)
                                    Set pMatch = pMatches(i)
                                    btex(i) = pMatch.Value
                                    b(i) = i
                                         If i = 0 Then
                                              new2Str(0) = Replace(address, pMatch.SubMatches(0), b(i))
                                         Else
                                              new2Str(i) = Replace(new2Str(i - 1), pMatch.SubMatches(0), b(i))
                                         End If
                               Next
                               CountLength = Len(new2Str(bCnt - 1))
                          Else
                               CountLength = Len(address)
                          End If
                     End If
      End function
      '***************************************************************************
      function MojiTsume(value)
            Dim address
            Dim regExp2, regExp3
            Dim oMatch, oMatches, pMatch, pMatches
            Dim aCnt, bCnt
            Dim newStr(10), new2Str(10), new3Str(10), new4Str(10)
            Dim a(10), b(10) ,c(10), d(10)
            Dim atex(10)
            Dim btex(10)
            Dim result
                address = value
      
                Set regExp3 = New RegExp
                regExp3.Pattern = "(\d{3})"
                regExp3.Global = True
                Set oMatches = regExp3.Execute(address)
                aCnt = oMatches.Count
      
                     If aCnt > 0 Then
                          For i = 0 To (aCnt - 1)
                               Set oMatch = oMatches(i)
                               atex(i) = oMatch.Value
                               a(i) = "tex" & i & "t"
                                    If i = 0 Then
                                         newStr(0) = Replace(address, oMatch.SubMatches(0), a(i))
                                    Else
                                         newStr(i) = Replace(newStr(i - 1), oMatch.SubMatches(i), a(i))
                                    End If
                          Next
                               Set regExp2 = New RegExp
                               regExp2.Pattern = "(\d{2})"
                               regExp2.Global = True
                               Set pMatches = regExp2.Execute(newStr(aCnt - 1))
                               bCnt = pMatches.Count
      
                               If bCnt > 0 Then
                                    For i = 0 To (bCnt - 1)
                                         Set pMatch = pMatches(i)
                                         btex(i) = pMatch.Value
                                         b(i) = "texx" & i & "xt"
                                              If i = 0 Then
                                                   new2Str(0) = Replace(newStr(aCnt - 1), pMatch.SubMatches(0), b(i))
                                              Else
                                                   new2Str(i) = Replace(new2Str(i - 1), pMatch.SubMatches(0), b(i))
                                              End If
                                    Next
      
                                    For i = 0 To (aCnt - 1)
                                         Set oMatch = oMatches(i)
                                         atex(i) = oMatch.Value
                                         a(i) = "tex" & i & "t"
                                         c(i) = Var.tag("cTsume", "1.0") & atex(i) & Var.tag("cTsume", "")
                                              If i = 0 Then
                                                   new3Str(0) = Replace(new2Str(bCnt - 1), a(i), c(i))
                                              Else
                                                   new3Str(i) = Replace(new3Str(i - 1), a(i), c(i))
                                              End If
                                    Next
                                    For i = 0 To (bCnt - 1)
                                         Set pMatch = pMatches(i)
                                         btex(i) = pMatch.Value
                                         b(i) = "texx" & i & "xt"
                                         d(i) = Var.tag("cTsume", "0.5") & btex(i) & Var.tag("cTsume", "")
                                              If i = 0 Then
                                                   new4Str(0) = Replace(new3Str(aCnt - 1), b(i), d(i))
                                              Else
                                                   new4Str(i) = Replace(new4Str(i - 1), b(i), d(i))
                                              End If
                                    Next
                                    MojiTsume = new4Str(bCnt - 1)
                               Else
                                    For i = 0 To (aCnt - 1)
                                         Set oMatch = oMatches(i)
                                         atex(i) = oMatch.Value
                                         a(i) = "tex" & i & "t"
                                         c(i) = Var.tag("cTsume", "1.0") & atex(i) & Var.tag("cTsume", "")
                                              If i = 0 Then
                                                   new3Str(0) = Replace(newStr(aCnt - 1), a(i), c(i))
                                              Else
                                                   new3Str(i) = Replace(new3Str(i - 1), a(i), c(i))
                                              End If
                                    Next
                                    MojiTsume = new3Str(aCnt - 1)
                               End If
                     Else
                          Set regExp2 = New RegExp
                          regExp2.Pattern = "(\d{2})"
                          regExp2.Global = True
                          Set pMatches = regExp2.Execute(address)
                          bCnt = pMatches.Count
      
                          If bCnt > 0 Then
                               For i = 0 To (bCnt - 1)
                                    Set pMatch = pMatches(i)
                                    btex(i) = pMatch.Value
                                    b(i) = "texx" & i & "xt"
                                         If i = 0 Then
                                              new2Str(0) = Replace(address, pMatch.SubMatches(0), b(i))
                                         Else
                                              new2Str(i) = Replace(new2Str(i - 1), pMatch.SubMatches(0), b(i))
                                         End If
                               Next
                               For i = 0 To (bCnt - 1)
                                    Set pMatch = pMatches(i)
                                    btex(i) = pMatch.Value
                                    b(i) = "texx" & i & "xt"
                                    d(i) = Var.tag("cTsume", "0.5") & btex(i) & Var.tag("cTsume", "")
                                         If i = 0 Then
                                              new4Str(0) = Replace(new2Str(bCnt - 1), b(i), d(i))
                                         Else
                                              new4Str(i) = Replace(new4Str(i - 1), b(i), d(i))
                                         End If
                               Next
                               MojiTsume = new4Str(bCnt - 1)
                          Else
                               MojiTsume = address
                          End If
                     End If
      End function
      '***************************************************************************
      
    6. Edit variable property :
      The last thing and most important is to specify the order of variable process. If you don’t set it, or set wrong order, you will get unexpected result or simply it won’t work. Please set correct order depends on your variable assignment and script that you set.

      バリアブルのプロパティ設定を行う:
      最後にして、一番重要なTipsはバリアブルに対する「値を受け取る順序設定」です。この設定が正しくない、正しい順序で設定されていない場合は、予期せぬ表示結果を得る可能性があります。ですので、確実に順序立てて値を受け取れるように各バリアブルに対してプロパティを設定していきます。
      VerticalScripting5-Script_Order
      VerticalScripting5-VerticalScriptingTextFrame_Order

      Here is the exactly order in this sample.
      各バリアブルの値を受け取る順序設定は以下の通りです。

      ”Address_part1” = 1
      ”Address_part2” = 1
      ”TextSizeChangeScript” = 2
      ”nogtips_Final” = 3

Output Preview
出力プレビュー

VerticalScripting5-Output
以上で、全5回に渡る縦組みに関するTips紹介を終わります。日本、アジアのユーザーのお役に立てば幸いです。

広告
 

タグ: , , , , , , , , , , , , , , ,

Vertical Address Scripting Tips 4 of 5          —宛名の縦書き Tipsパート4— 

nogtips --- Vertical Scripting Tips 4 ---
This is #4 of 5 series Tips about the vertically address scripting
(wiki : Horizontal and vertical writing in East Asian scripts).
To use this tips, it is necessary that you have a Japanese version of Adobe InDesign because it use one of the build-in feature of that only available in Japanese version of Adobe InDesign.

As basic knowledge and tips of the vertical address scripting, please refer to my old post regarding the vertical address scripting.

[JP]
これは宛名の縦組みに関するTipsシリーズのパート4です。本Tipsの使用は日本語版のAdobe InDesign使用を前提としています。

また、宛名の縦組みに関する基本方法は過去の投稿「宛名の縦書き」を参照して下さい。

How to lay out the recipient name looking nicely when it should be joint signature.

宛名の連名表記を見栄え良く表示する方法

This tips if for user who have below request.
このTipsは以下の様な要望をお持ちのユーザー向けです。

  • Lay out multiple recipient name looks nicely, especially when the database contain not only full name, but also only first name as second name that should be displayed.
  • 氏名・名のみなどのレコードが混在するデータベース使用時に、宛名の連名表記を見栄え良く表示したい

Preview of the problematic text display :
問題点の画像プレビュー:

Vertical Scripting Tips 4 Preview 1

Preview 1 : Full Name for main recipient and Full Name for second recipient.
As you can see, it’s no problem at all. Both text fit into text frame, and was adjusted accordingly by Adobe InDesign text frame setting.

プレビュー1:メインの宛名が氏名、連名も氏名の場合
ご覧のとおり、何の問題もありません。どちらの宛名もAdobe InDesignのテキストフレームの設定に従って表示されています。

Vertical Scripting Tips 4 Preview 2

Preview 2 : Full Name for main recipient and only First Name for second recipient.
As you can see, it looks not nice, especially for second recipient’s name. It because this text frame have been set with “Full Justification” in vertically.

プレビュー2:メインの宛名が氏名で、連名が名前のみの場合
御覧いただける通り、連名用の名前が両端揃えにて表示されているので、見栄えが良くありません。

Vertical Scripting Tips 4 Preview 3

Preview 3 : Full Name for main recipient and only First Name for second recipient. (nogtips version)
This looks much better than above one. So we added additional space key in front of second recipient’s first name. So it start to describe her name almost same position of mail recipient’s first name.

プレビュー3:メインの宛名が氏名、連名も氏名の場合(nogtips使用バージョン)
御覧いただける通り、連名の名前がメインの宛名の苗字部分より下がって表示されているので、より見栄えが良くなっています。

What you can achieve with this tip?

このTipsで何が出来るのか?

This tips make you able to display a join signature with nice-looking. Especially, when your database contain second name that should be a part of the joint signature as recipient name even those name is full-name, or just only first name.(It because if you assign the second name to text frame, the looking of those text frame is not good when it only have first name, because it will start to describing from the top, although other name start from Last name + First name)

本Tipsを使用すると、宛名の連名表記をするにあたり、データベースに二番目の方の名前が「氏名(フルネーム)」または「名前のみ」といった値が混在する場合に、単一のテキストフレームへのテキストの流しこみをす事による見栄えの崩れを防げ、連名であっても見栄え良く表記する事が可能になります。

Preview :
プレビュー:

Vertical Scripting Tips 4 Preview 4
With this tips, even your database contain both type of name as second recipient name(Full name or only First name), it can display the recipient name with nice-looking.

このTipsを使用すると、例えデータベースのレコードが連名用の項目に「氏名」または「名前のみ」といった値が混在している場合でも、一括処理が可能になり、また見栄えを良くすることが可能になります。

Setup
設定方法

Please refer to former post of this series regarding basic setting.

縦組みのテキストフレームに関する基本的設定方法は過去の投稿を参照してください。

  1. Create variables at outside of page layout. Those variables will be used for script.
    ページのレイアウト範囲外にスクリプトで使用するためのバリアブルを作成します。
    Actual database looks like below.
    実際に使用しているデータベースは以下の通りです。
    Vertical Scripting Tips 4 Database
  2. Create text frame for vertically scripting.
    宛名用に縦組みのテキストフレームを作成します。Vertical Scripting Tips 4 Text Frame 1

    You should check maximum characters that can be displayed vertically by this text frame. I checked it by using “circle” instead of typing character. And this text frame can display 10 characters as vertical maximum number.(It’s just for checking, so you can remove those circles after you check it)With this text frame, you need to set “Full Justification” as type setting.

    宛名用のテキストフレームを作成する際は、最大何文字まで縦組みにて表記出来るのかをチェックします。今回は「○」を使用して文字数のチェックをしています。このテキストフレームには縦組みにて最大10文字表記することが可能です。

    Vertical Scripting Tips 4 Text Frame 2

  3. Register all frames in DSM-Bridge as variable element.
    全てのバリアブル項目をDSM-Bridgeに登録する。
  4. Setup for each variables :
    All variable should have assignment like below.

    バリアブル項目への割り当て:
    以下の様に割り当てを行います。

    [[Full_Name]]
    Vertical Scripting Tips 4 Variable Assignment - FullName

    [[Name1]]
    Vertical Scripting Tips 4 Variable Assignment - Name1
    Because both of them will be used as recipient name, so I addes “様” as title oh honor in the end of their name.

    これらのバリアブル項目は実際に宛名用のテキストフレームにて使用する値となるので、宛名用に最後に「様」を追加します。

  5. Edit VBScript
    Let’s edit vbscript. I made script that named as “Vertical Script3”. Here is the entire of script code.

    VBスクリプトの編集:
    それではVBスクリプトを編集します。今回は以下のようにしました。
    Vertical Scripting Tips 4 Variable Assignment -VBScript

    function JointSignatureScript()
    	Dim firstName, secondName, secondWithSal, spacekey, Cnt, work, work2, aspace, secondFullText
    	firstName = RS("氏名")
    	secondWithSal = RS("連名用")
    	spacekey=" "
    	Cnt=Len(firstName)
    	work=InStr(firstName, spacekey)
    	work2 = InStr(secondName, spacekey)
    	If work2 <> 0 Then
    		Var.PutS "JSign01", secondWithSal
    		JointSignatureScript = secontWithSal
    	Else
    		aspace = String(work, spacekey)
    		secondFullText = aspace & secondWithSal
    		Var.PutS "JSign01", secondFullText
    		JointSignatureScript = secondFullText
    	End If
    End function
    
  6. Edit variable property :
    The last thing and most important is to specify the order of variable process. If you don’t set it, or set wrong order, you will get unexpected result or simply it won’t work. Please set correct order depends on your variable assignment and script that you set.
    バリアブルのプロパティ設定を行う:
    最後にして、一番重要なTipsはバリアブルに対する「値を受け取る順序設定」です。この設定が正しくない、正しい順序で設定されていない場合は、予期せぬ表示結果を得る可能性があります。ですので、確実に順序立てて値を受け取れるように各バリアブルに対してプロパティを設定していきます。Vertical Scripting Tips 4 Process Order -VBScript
    Vertical Scripting Tips 4 Process Order -Recipient Name -TextFrame

    Here is the exactly order in this sample.
    各バリアブルの値を受け取る順序設定は以下の通りです。

    “Full_Name” = 1
    “Name1” = 1
    “Script” = 2
    “JSgin01” = 3

Output Preview
出力プレビュー

Vertical Scripting Tips 4 Output PDF Preview

 

タグ: , , , , , , , , , , , ,