- ベストアンサー
スタンプの位置
やりたいことは、たくさんのファイルで1ページ目のみにスタンプを押したい。が、pdfの回転(見た目にはわからない)により、スタンプが270度回転するのに解決するカードが下記で、成功したのですが、スタンプの位置が、左上はみ出ます。数字わ、いじっても、スタンプは大きいまま、位置も変わりません。 回転問題は解決したのにあと少しなんです。何かヒントくださいませんか。 お願いします!!! AdobeAcrobatpro上で使うJavascript、Windows10です。 // 変数の定義 var n10mm = 10; // スタンプをページの端から10mm離れた位置に配置 var nStampWidth = 50; // スタンプの幅 var nStampHeight = 50; // スタンプの高さ // 現在のページの「Crop」ボックスの座標を取得 var rctCropRot = this.getPageBox("Crop", this.pageNum); // スタンプの中心X座標を計算 var nStampXCenter = n10mm + nStampWidth / 2; // スタンプの中心Y座標を計算 var nStampYCenter = rctCropRot[1] - n10mm - nStampHeight / 2; // スタンプの位置を示す矩形(左下と右上の同じ点)の座標を設定 var rctAnnotRot = [nStampXCenter, nStampYCenter, nStampXCenter, nStampYCenter]; // ページの回転に応じて座標を変換するマトリックスを作成 var mxFromRot = (new Matrix2D).fromRotated(this, this.pageNum); // 変換されたスタンプの位置を計算 var rctAnnotDflt = mxFromRot.transform(rctAnnotRot); // スタンプを現在のページに追加 this.addAnnot({ type: "Stamp", // 注釈のタイプをスタンプに設定 page: this.pageNum, // スタンプを追加するページ番号 AP: "#urzkGPjyQ1Ma2qYXWQ6bMA", // スタンプの外観 rect: rctAnnotDflt, // スタンプの位置 rotate: this.getPageRotation(this.pageNum) // ページの回転に基づいてスタンプを回転 });
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
さて、現在のコードがほぼ目的を達成しているものの、スタンプの位置やサイズがうまく調整できないことでお困りのようですね。少し手を加えて適切な位置にスタンプを配置できるようにする方法についてアドバイスします。 まず、スタンプの位置とサイズを調整するために、それぞれの座標や変数の設定方法を確認しましょう。以下の手順で修正してみてください: ```javascript // 単位変換:ミリメートルをポイントに変換 var mmToPt = function(mm) { return mm * 2.83465; // 1ミリメートル = 2.83465ポイント }; var n10mm = mmToPt(10); // スタンプをページの端から10mm離れた位置に配置 var nStampWidth = mmToPt(50); // スタンプの幅を設定 var nStampHeight = mmToPt(50); // スタンプの高さを設定 // 現在のページの「Crop」ボックスの座標を取得 var rctCropRot = this.getPageBox("Crop", this.pageNum); // スタンプの位置を決定するためのXおよびY座標を定義 // ページの左下を基準として位置を計算 var nStampX = rctCropRot[0] + n10mm; var nStampY = rctCropRot[1] + (rctCropRot[3] - rctCropRot[1]) - n10mm - nStampHeight; // スタンプの位置を示す矩形の座標を設定 var rctAnnotRect = [nStampX, nStampY, nStampX + nStampWidth, nStampY + nStampHeight]; // ページの回転に応じて座標を変換するマトリックスを作成 var mxFromRot = (new Matrix2D).fromRotated(this.getPageRotation(this.pageNum)); // 変換されたスタンプの位置を計算 var rctAnnotDflt = mxFromRot.transform(rctAnnotRect); // スタンプを現在のページに追加 this.addAnnot({ type: "Stamp", // 注釈のタイプをスタンプに設定 page: this.pageNum, // スタンプを追加するページ番号 AP: "#urzkGPjyQ1Ma2qYXWQ6bMA", // スタンプの外観 rect: rctAnnotDflt, // スタンプの位置 rotate: this.getPageRotation(this.pageNum) // ページの回転に基づいてスタンプを回転 }); ``` ### 変更点の説明: 1. **ミリメートルをポイントへ変換**: スタンプの位置やサイズをミリメートルで設定しているため、ポイントに変換する関数を導入しました。 2. **スタンプの位置を再計算**: ページの左下を基準としてスタンプの位置を計算しなおしました。これにより、スタンプが正しく配置されるはずです。 3. **マトリックスの回転修正**: ページの実際の回転に基づいてスタンプの位置を変換するためのマトリックスを使用していますが、スタンプの位置設定が正しく行われるよう、座標変換を見直しました。 これで、PDFドキュメントの回転にかかわらず、1ページ目にスタンプが適切な位置に配置されるようになることを願っています。ぜひお試しください。 ------------------------------------------------ こちらの回答はAIエージェント「あい」による参考回答です。 有識者からの回答も是非お待ちしています。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/