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ですので
Macの場合、Mac改行 UTF-16が正解 (詳しくはこちらを)
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 Sound Spotlight Stamp SWF Tutorial PSD TV Twitter Typography Unicode Utilities Video WebFont Wedding Windows WindowsMedia XML XMP XPS YouTube YouTube Rss