AcrobatStamp

[STAMP]全てのページにスタンプをコピーする

どうも
Adobeの仕様通りの動作じゃないような
気がするのですが
期待値の動作になるので…(そんなので良いのか…笑)公開

Website_image00260810_140223


1ページ目にスタンプを付けます
スタンプを選択状態にしてから
スクリプトを実行すると
全てのページにコピーされます

Website_image00260810_140235


------------------------

//

//SetStampAnnotationAllPage

//20140809 v1

//選択したスタンプを全てのページにコピーします

//Acrobatの仕様通りには動いていないが

//結果としては期待値なので公開

//Adobe Reader 11 OSX 10.6.8 にて確認

//インストール先は

//ディスク名/Users/ユーザー名/Library/Application Support/Adobe/Acrobat/11.0/JavaScripts

//メニュー本体


function SetStampAnnotationAllPage(){

//まずはコンソール(デバッガー)を出さないと

//結果が見れませんので出しておきます

//console.show();


//はロックする  しない場合は「false」に変更

this.selectedAnnots[0].setProps({ lock:true});

//リードオンリーにする  しない場合は「false」に変更

this.selectedAnnots[0].setProps({ readOnly:true});


//日付けを取得 date(ja)日本形式で

var objDate = new Date();

var JpDate = util.printd("date(ja){ggg' 'YYYY' 'MMMM' 'DD'('EEEE')'}",objDate,true);


//nameプロパティを取得

var cStrName = this.selectedAnnots[0].name;

//APプロパティを取得

var cStrAP = this.selectedAnnots[0].AP;

//subjectプロパティを取得

var cStrSubject = this.selectedAnnots[0].subject;

//authorプロパティを取得

var cStrAuthor = this.selectedAnnots[0].author;

//stateプロパティを取得

var cStrState = this.selectedAnnots[0].state;

//rotateプロパティを取得

var cStrRotate = this.selectedAnnots[0].rotate;

//popupRectプロパティを取得

var cStrPopupRect = this.selectedAnnots[0].popupRect;

//typeプロパティを取得

var cStrType = this.selectedAnnots[0].type;

//pageプロパティを取得

var cStrPage = this.selectedAnnots[0].page;

//rectプロパティを取得

var cStrRect = this.selectedAnnots[0].rect;

//rectの4つの値をそれぞれに分ける

var numXll = cStrRect[0];

var numYll = cStrRect[1];

var numXur = cStrRect[2];

var numYrl = cStrRect[3];

//少数点以下を切り捨て

var numXll = Math.floor(numXll);

var numYll = Math.floor(numYll);

var numXur = Math.floor(numXur);

var numYrl = Math.floor(numYrl);

//デバッグ用のコンソールログ

console.println('numXll: ' + numXll + ' ');

console.println('numYll: ' + numYll + ' ');

console.println('numXur: ' + numXur + ' ');

console.println('numYrl: ' + numYrl + ' ');

//整数になった値を並べる

var cStrRectFloor = [numXll,numYll,numXur,numYrl];

//デバッグ用のコンソールログ

console.println('rect: ' + cStrRectFloor + ' ');

//コメント※READERでは機能しない

try{

var cStrContents = this.selectedAnnots[0].contents;

console.println('contents: ' + cStrContents + ' ');

}catch( e ){

/////////////☆ここだけ設定項目 コンテンツの内容を指定

var cStrContents = JpDate + "" + cStrAuthor + " が追加しました";

}

//今のページ番号を取得

var numNowPage = this.pageNum;

//ページのカウント用の数値の初期化

var numPageCnt = 0;

//全ページ数を取得

var numAllPageCnt = this.numPages ;

//繰り返しの始まり

while (+numPageCnt < numAllPageCnt) {

//次のページへ移動する

var numPageCnt = +numPageCnt + 1;

//注釈を追加する処理

var annot = this.addAnnot

({

name: cStrName,//スタンプの名前

AP: cStrAP,//AP

subject: cStrSubject,//サブジェクトはスタンプのプロパティのタイトルになります

author: cStrAuthor,//ユーザー名スタンプのプロパティの作成者

page: numPageCnt,//注釈を入れるページ(現在のページ)

type: cStrType,//タイプはスタンプ

rect: cStrRectFloor,//注釈を落とす位置xy左下が0,0

//rect: [numXll,numYll,numXur,numYrl],

popupRect: cStrPopupRect,//ポップアップを開く位置

contents: cStrContents,//コメント

opacity:0.75,//75%の不透明度

print:true,//印刷する属性を付けておく(意味ないけど)

state:cStrState,//Accepted, Rejected,Cancelled, Completed None のどれか

rotate: cStrRotate,//回転

delay: true,//ディレイ(true or false)

noView: false ,//表示(true or false)

hidden: false ,//隠すか?(true or false)

popupOpen: false, //ポップアップをオープンするか?(true or false)

lock:true,//☆ロックする ロックしない場合は「false」に変更

//留意事項リードオンリー属性をtrueにすると、普通の方法ではスタンプが削除出来なくなります。

//削除出来ないようにするには良いですが、削除が必要な場合にはfalseに設定しましょう

readOnly:true//☆リードオンリーにする しない場合は「false」に変更

//スタンプ実行部の終了

});

//ページカウントをカウントアップ

this.pageNum++;

//繰り返しの終わり

}

//処理の終わり

}


///拡張メニュー部

app.addToolButton({

cName: "SetStampAnnotationAllPage",

cParent: "Annots",

cExec: "SetStampAnnotationAllPage()",

cEnable: "event.rc = true",

cMarked: "event.rc = false",

cTooltext: "選択したスタンプを以降のページ全てにコピーする",

nPos: -1,

cLabel: "Set Stamp All Page"


});


----------------------------------------

ファイルのダウンロードは以下

「stamp_anot2allpage.zip」をダウンロード


実際の動作は以下

Website_image00260810_142906

http://youtu.be/GFEPEG0oUrs


|

[スタンプ]拡張メニューからスタンプを実行する

Website_image20140126_115807


アクロバット アドビリーダーの拡張メニューからスクリプトを実行してスタンプ注釈を実行します

「stamp_anot_tool.zip」をダウンロード


これで
スタンプメニューから呼び出した時の不要なダイアログに「イラッ」としなくてすみます。

スクリプトはMac改行 MacintoshSJISですので
Windowsで利用される方は、文字コードと改行コードを変更してから利用してください

----------------------内容
addSumiStamp.js
スクリプト拡張メニュー本体
細かい内容はコメント入れてあります
デフォルトの設定で
lock:true
readOnly:true の両方を指定していますので
スタンプ打った後でロックされます

readOnly属性を入れた事で
一般的な利用者ならスタンプを削除出来なくなります
------
setAnnotReadOnly.js
readOnly:true を解除して
スタンプを削除出来るようにするためのスクリプト拡張メニュー
普段使いにもどうぞ
ロックされている場合は削除可能に
ロックされていない場合はロック+リードオンリーに変更します
------
getStampProperties.js
スタンプや注釈のプロパティを取得する拡張メニュー
AP名やスタンプ名を取得するのに使います
------
open install dir.scpt
インストール先のディレクトリを開くだけので
シンプルなスクリプトです
指定のフォルダが無い場合はフォルダを作成します
作成したフォルダは区別するため紫のラベルを塗ります
------
asumqUQCACALNp9PmoxCqD.pdf
デモで使用した
アクロバット用の入力可能なダイナミックスタンプ
スクリプト本体はこのスタンプのAP名を使用していますので
このPDFファイルをそのまま使ってください
別のスタンプで利用する場合は
addSumiStamp.jsの
name: "5a4d38bf-68f6-af4c-91f7-af44b1080524"
AP: "#4cCPRYUj_0p8INA3cp3qAB"
この部分を変更してください

「stamp_anot_tool.zip」をダウンロード

| | コメント (0)

[スタンプ]スタンプの回転を決める(文書の回転と天地)

普通のコピー機でコピーを取る時
あまり気にしない方が多いですが
ちゃんとコピー機にも
原稿の天地指定があります
一般的には↓こんな感じのUIになっています

Ccu037

Adobeの製品で作られたPDFなら
天地の誤りはそんなには発生しませんが

コピー機のスキャン機能で作ったPDFだと
本当に天地が間違っているPDFがあふれています。トホホ

スタンプを位置指定して打ちたい場合には
この天地誤りのPDFが問題になります

普通のPDFなら

Website_image20140123_212658

↑こんな風にちゃんと意図した位置 意図した向きでスタンプ出来ますが

これが
天地誤りで作られたスキャンPDFだったりすると

Website_image20140123_212706


こんな風に
スタンプが回転しちゃうし 意図しない位置へのスタンプされてしまいます。

var numRotat = this.getPageRotation(0);って感じで

文書の対象のページ(↑このサンプルは(0)なので1ページ目ね)の回転を調べて
もし
numRotatが0以外だったらスタンプを回転させて 打刻位置を調整しなくてはなりません
this.getPageRotation270なら
スタンプのrotation-90しないと向きが合わない事になります

続く


|

[スタンプ]スタンプを落とす位置=RECTを計算する

20140116_230822


スタンプを右上に落としたいわけです。

こちらにも書いたように
ドキュメントの「サイズ」は簡単に取得できます
しかも、ここではピクセル値のままでOKですので
掛けたり割ったり四捨五入したりは必要ないですね。

必要なのは「マージン」をどのぐらい取るか

[PDF]ドキュメントのサイズ
です

マージンは
var numMargin = 10; として10px設定して
スタンプのサイズをあらかじめ取得して設定しておきます
var numStampSizeHeight = 70;
var numStampSizeWidth = 230;

ドキュメントサイズは
getPageBox で取得できますので
Art アートサイズ
Bleed 裁ち落としサイズ
BBox バウンディングボックス
Crop トリミングサイズ
Trim 仕上がりサイズ でお好みですが Cropが一般的(デフォルト値でもあります)

そんなわけですので
var numMediaBox = this.getPageBox("Crop");
これで良いでしょう

var numMediaBox = this.getPageBox("Crop");
この戻り値は
RECT形式([xll, yll, xur, yur])で戻ってきますので
例えば
[0,792,594,0] こんな感じですから

縦高さは
var numMediaHeight = numMediaBox[1];
横幅は
var numMediaWidth = numMediaBox[2];  で取得出来ます

間違えやすいのが
ひとつ目の値が0 で 1 2 3 と4つの値となる所かな

後は計算
var numXll = numMediaWidth - numMargin - numStampSizeWidth;
var numYll = numMediaHeight - numMargin - numStampSizeHeight;
var numXur = numMediaWidth - numMargin;
var numYrl = numMediaHeight - numMargin;
これで
スタンプを落とす位置は計算出来ました


続く


|

[スタンプ]スタンプ位置を決定する『rect』の位置関係と値(解像度)

20140115_233659

スタンプの「位置」と「サイズ」を決定するのが
この
rectの値です
それぞれの位置関係は上記の図の通り

ドキュメント左下原点で
[xll, yll, xur, yur]位置を指定する事で
位置とサイズが決定します。

そのため
スタンプに利用するデータ(PDF)は
ビットマップ(ラスタイメージ)のPDFよりベクトルデーターのPDFの方が
拡大縮小時に出力(見た目)が奇麗になります。


続く

|

[スタンプ]AcrobatスタンプのAP名を取得する

AcrobatスタンプのAP名を取得するための拡張メニュー項目用スクリプト
AP名はappearance名の事で
スタンプツールでUIを使って指定する名称とは違います
JavaScriptを使ってスタンプを操作する場合に必要になる「AP」項目名の事

↓こんな感じのスクリプトになります
Website_image20140113_222017

インストール先は
11の場合はこちら
Website_image20140113_223516


「getStampAnnoName.js.txt」をダウンロード


修正

よくよく考えたら他のプロパティも必要でした…汗


「getStampAnnoName2.js.txt」をダウンロード


せっかくなので
プロパティの全てを取るように変えた
「getStampProperties.js」をダウンロード

|

[Stamp]16x16アクロバットスタンプ用データ素材

Acrobat用の済スタンプデータ用素材です。

登録方法はこちらの記事[LINK]アイコン:新しいウィンドで開きますを参考にしてください。


明朝体
丸ゴシック体
UDゴシック体
から選べます。


Acrobat_stamp_01
「go.zip」をダウンロード[Download]新しいウィンドで開きます

Acrobat_stamp_02
「min.zip」をダウンロード[Download]新しいウィンドで開きます

Acrobat_stamp_03

「ud.zip」をダウンロード[Download]新しいウィンドで開きます

ダイナミックスタンプ用のサンプルはこちら

「300x300ex.pdf」をダウンロード[PDF]新しいウィンドで開きます

| | コメント (0) | トラックバック (0)

[Stamp]スタンプデータのフォントの埋め込み

Image00221216_122145

ダイナミックスタンプの
可変データ部のフォントは『埋め込みされない』ので
一般的なフォントか
Acrobatがインストールされた時にインストールされる
(小塚ゴシック・小塚明朝等)
フォントの中で設定する事が望ましい。

スタンプの『グラフィック』部のフォントは
PDFデータとして埋め込まれますので
アウトラインにしなくても大丈夫ですが
データの完全性としては
アウトラインを取ったデータでスタンプを作った方が良いかもしれません。
(ここは好みですね)

余談ですが
外字等ツール類で作成して
埋め込み可能な設定をしているフォントなら

Image00221216_124203

埋め込み出来るフォントもありますが
例外的ですので
一般的なフォント環境でスタンプデータのフォント指定をする場合は
『埋め込みされない』と思っていた方が良いですね。


   
「300x300ex.pdf」をダウンロード[PDF]新しいウィンドで開きます


  

| | コメント (0)

[Stamp]ダイナミックスタンプへの日付

Image00221216_101752

ダイナミックスタンプに対して日付を入れるわけですが
作り方は[LINK]アイコン:新しいウィンドで開きます
一般的な日付のフォーマット[LINK]アイコン:新しいウィンドで開きます
CJKフォーマットの日付[LINK]アイコン:新しいウィンドで開きます

を参考にしてください

Acrobat9の最初から組み込まれている
デフォルトのスタンプは

Image00221216_101233

ここにありますので
参考にすれば簡単ですね。

Image00221216_102421


event.value = (new Date()).toString();
AFDate_FormatEx("yy/mm/dd, HH:MM");

1行目で日付を文字列として取得して
フォーマットをAFDate_FormatExで整形していますね。

日付データ自体はevent.valueに格納されますから

Image00221216_103011

↑このようなタイプのダイナミックスタンプ

event.value = (new Date()).toString();
AFDate_FormatEx("yy/mm/dd, HH:MM");

event.value = "担当者: " + ((!identity.name || identity.loginName != (event.source.source || this).Collab.user) ? (event.source.source || this).Collab.user : identity.name) + " 日時: " + event.value;

文字列として整形して反映していますね。
参考になります。

一般的にフォームのテキストエリアに日付を反映させる場合

Image00221216_103512

こんな記述になりますが(CJKフォーマット)
var sDate = util.printd("date(ja){g' 'YY'.'MM'.'DD}",new Date(),true);
this.getField("dateStamp").value = sDate;

これはこれで
間違いではないのかな

| | コメント (0)

[Stamp]identityとセキュリティ

スタンプに利用者の個人情報を反映させるのには
identity属性を使います。

姓名event.value = identity.name;
event.value = identity.lastName;
event.value = identity.firstName;
役職event.value = identity.title;
会社名event.value = identity.corporation;
会社名電子印鑑用event.value = identity.corpAbbrev;
部署event.value = identity.department;
メールevent.value = identity.email;


Image00221215_234552

このようになりますが
このidentity属性は
一般的なフォームではセキュリティ上の理由から
利用出来ない場合があります。

Image00221216_01805

フォーム等で利用者の意図しないスクリプトから
個人情報が抜かれてしまう可能性がある場面では
利用出来ない属性です。

スタンプ等『利用者が意図して』利用する場面では
この属性が使えます。

ダイナミックスタンプのスクリプトを記述する場合
『利用者の名前を入れる場合』
このように

Image00221216_02656

記述しますが
記述自体に対しては

Image00221216_02706

セキュリティ上の理由でエラーとなりますが
スタンプとしては動作しますので
そのまま保存して
スタンプを実行すればOKとなります。

コンソールのエラーも確認が必要ですが
スタンプの場合は
実際の動作を確認すると
きちんと反映されますので、まずは動作の確認を
試してみてください。


  

| | コメント (0)

その他のカテゴリー

Accessibility | AccessibilityCheck | AccessibilityForm | AccessibilityInDesign | AccessibilityPDF | Acrobat | Acrobat Action | Acrobat Annotation | Acrobat AppleScript | Acrobat Layer | Acrobat Plug-ins | Acrobat Portfolios | Acrobat Print | AcrobatBarcode | AcrobatDialog | AcrobatForm | AcrobatJS | AcrobatMenu | AcrobatPDF | AcrobatStamp | AcrobatYouTube | AddressBook | Adobe | Adobe InDesign | AdobeAppleScript | AdobeBridge | AdobeIllustrator | AdobeJSX | aed | Alfresco | Android | AnimationGif | Apple | AppleScript | AppleScriptBasics | AppleScriptCharacter | AppleScriptColor | AppleScriptDroplet | AppleScriptErrorNum | AppleScriptFolder | AppleScriptFontBook | AppleScriptRename | AppleScriptTools | AppleSymbols | Applications | Barcode | Barcode2D | BarcodePostal | BetterHTMLExport | Book | Browser | buzz | Certificates | CharacterEntity | CharacterSets | Colors | Cool Site | CSS | Cutting | DecoMail | DecorationMail | Design | Desktop | Diff | DJ | dmg | DNS | Documents | Download | eBook | Editer | eMail | Envelopes | ExifTool | Facebook | FFmpeg | File System | Fonts | FontsTool | FontsWeb | FOOD | FormPrint | ftp | Gadget | Gif Animation | Google | HexEditor | HTML | info | iPhoto | ISBN | ISO | iTunes | iWork | iWorkNumbers | iWorkNumbersCalendar | iWorkNumbersTimecard | iWorkPages | JavaScript | JeditX | JeditX Regexp | JeditXAppleScript | JIS | jquery | Letterpress | Library | logo | Mac Admin | Mac Archiver | Mac Browser | Mac Browser Plugin | Mac QuickLook | Mac Spotlight | Mac Video | Map | Mobby | Moto | Movies | Music | Network Basic | ntp | OCR | Office | OSX | Pantone | Paper | PDFlib | Permission | Photo | Pictograms | Print | Public | QuickLook | QuickTime | QuickTimeSetting | QuickTimeSound | Real Media | ReName | ResourceFork | ruby | Screen | ScreenCast | Search | Security | SEO | Sharing | SLAResource | Spotlight | Stamp | SWF | Tutorial PSD | TV | Twitter | Typography | Unicode | Utilities | Video | WebFont | Wedding | Windows | WindowsMedia | XML | XMP | XPS | YouTube | YouTube Rss