xlogI125’s blog

パソコン作業を効率化したい

Acrobat JavaScript練習 注釈の座標を見るため注釈で長方形を描画する

  • 注釈の default user space における原点(0,0)と CropBox における原点(0,0)の対応が良く分からない。
  • 次の変更を加えた際、注釈の default user space の座標を見るため、注釈の長方形を描画する。
    • CropBox と MediaBox を変更
    • ページを回転
// Acrobat Standard DC (2022年3月頃), Windows 11
// JavaScript デバッガー の コンソール から実行

// CropBox変更, MediaBox変更, ページ回転
if (false) {
  // 即時実行関数式
  void function () {
    const doc = this;
    const pageNum = doc.pageNum;

    // 変更後のCropBox (単位 mm)
    const [x1, y1] = [0, 0];
    const [x2, y2] = [210 + x1, 297 + y1];

    // ページの回転角度 0, 90, 180. 270度
    const rot = 0;

    const boxCrop = [
      x1, y2, x2, y1
    ].map( x => (72 / 25.4) * x );

    const boxMedia = [
      0, boxCrop[1] - boxCrop[3], boxCrop[2] - boxCrop[0], 0
    ];

    // CropBoxを設定
    doc.setPageBoxes({
      cBox: "Crop", nStart: pageNum, nEnd: pageNum, rBox: boxCrop
    });

    // MediaBoxを設定
    doc.setPageBoxes({
      cBox: "Media", nStart: pageNum, nEnd: pageNum, rBox: boxMedia
    });

    ["Art", "Trim", "Bleed"].forEach( box => {
      doc.setPageBoxes({cBox: box, nStart: pageNum, nEnd: pageNum});
    });

    // ページの回転角度を設定
    doc.setPageRotations({
      nStart: pageNum, nEnd: pageNum, nRotate: rot
    });

  }();
} else {
  // void演算子
  void 0;
}


// 注釈の default user space の座標に注釈の長方形を描画
(() => {
  const doc = this;
  const pageNum = doc.pageNum;

  // CropBoxの座標を取得
  const arrCrop = doc.getPageBox({cBox: "Crop", nPage: pageNum});

  // BBoxの座標を取得
  const arrBBox = doc.getPageBox({cBox: "BBox", nPage: pageNum});

  // x軸(回転角度が0度の時における右方向)のつもり。赤色で描画。
  const annotSquareAxisX = doc.addAnnot({
    page: pageNum, type: "Square", 
    // [x1, y1, x2, y2]
    rect: [0, 0, 200, 0].map( x => (72 / 25.4) * x ), 
    style: "S", borderEffectStyle: "", 
    strokeColor: ["RGB", 192 / 255, 0 / 255, 0 / 255], opacity: 1.0, 
    width: 10, fillColor: ["T"], 
    author: "axis X", subject: "X座標"
  });

  // y軸(回転角度が0度の時における上方向)のつもり。緑色で描画。
  const annotSquareAxisY = doc.addAnnot({
    page: pageNum, type: "Square", 
    // [x1, y1, x2, y2]
    rect: [0, 0, 0, 200].map( x => (72 / 25.4) * x ), 
    style: "S", borderEffectStyle: "", 
    strokeColor: ["RGB", 0 / 255, 192 / 255, 0 / 255], opacity: 1.0, 
    width: 10, fillColor: ["T"], 
    author: "axis Y", subject: "Y座標"
  });

  // default user space の座標にそのまま CropBox の値で四角形を描画
  const annotSquareCrop = doc.addAnnot({
    page: pageNum, type: "Square", 
    // [x1, y1, x2, y2]
    rect: [arrCrop[0], arrCrop[3], arrCrop[2], arrCrop[1]], 
    style: "S", borderEffectStyle: "", 
    strokeColor: ["RGB", 255 / 255, 128 / 255, 0 / 255], opacity: 1.0, 
    width: 5, fillColor: ["T"], 
    author: "Crop", subject: "Crop"
  });

  // default user space の座標にそのまま BBox の値で四角形を描画
  const annotSquareBBox = doc.addAnnot({
    page: pageNum, type: "Square", 
    // [x1, y1, x2, y2]
    rect: [arrBBox[0], arrBBox[3], arrBBox[2], arrBBox[1]], 
    style: "S", borderEffectStyle: "", 
    strokeColor: ["RGB", 0 / 255, 128 / 255, 255 / 255], opacity: 1.0, 
    width: 5, fillColor: ["T"], 
    author: "BBox", subject: "BBox"
  });

})();