xlogI125’s blog

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

Acrobat JavaScript練習 注釈(FreeText, Square, Line)

使い捨てスクリプト

注釈でテキストボックスを追加 (FreeText)

  • ページは回転0度、座標は注釈、MediaBox、CropBoxとで原点(0,0)の位置は同じと仮定する
// Acrobat Standard DC (2022年3月頃), Windows 11
// JavaScript デバッガー の コンソール から実行

(() => {
  const doc = this;

  // 連番
  const pageNum1Baseds  = [...Array(doc.numPages)].map( (_null, i) => i + 1 );

  // 特定のページを対象とする場合
  // const pageNum1Baseds = [1, 3, 5];

  // テキストボックスの座標 (単位 mm)
  const [x1mm, y1mm] = [10, 5];
  const [x2mm, y2mm] = [x1mm + 100, y1mm + 50];
  const rot = 0;

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

  const pageNums = pageNum1Baseds.map( p => p - 1 );

  doc.syncAnnotScan();

  pageNums.forEach( pageNum => {
    // テキストボックス注釈を追加
    const annotFreeText = addAnnot({
      // name: "annotFreeText001", 
      page: pageNum, type: "FreeText", 
      rect: [x1, y1, x2, y2], rotate: rot, 

      // 書式はテキストのプロパティにて手動で設定
      contents: 
        "書式は\r" + 
        "テキストのプロパティにて\r" + 
        "手動で設定してください", 

      // ----- [表示方法] タブ ----- //
      style: "S", 
      // style: "D", dash: [3, 2], 
      borderEffectStyle: "", 
      // borderEffectStyle: "C", borderEffectIntensity: 1, 
      strokeColor: ["RGB", 192 / 255, 0 / 255, 0 / 255], 
      opacity: 1.0, width: 1, fillColor: ["T"], 

      // ----- [一般] タブ ----- //
      author: "作成者", subject: "タイトル", 
      modDate: util.scand("yyyy/mm/dd HH:MM:ss", "2022/03/01 09:00:00"), 

      // -------------------- //
      lock: false, readOnly: false, 
      hidden: false, noView: false, toggleNoView: false, 
      print: true, delay: false
    });
  });

})();

注釈で長方形を追加 (Square)

  • ページは回転0度、座標は注釈、MediaBox、CropBoxとで原点(0,0)の位置は同じと仮定する
// Acrobat Standard DC (2022年3月頃), Windows 11
// JavaScript デバッガー の コンソール から実行

(() => {
  const doc = this;

  // 連番
  const pageNum1Baseds = [...Array(doc.numPages)].map( (_null, i) => i + 1 );

  // 特定のページを対象とする場合
  // const pageNum1Baseds = [1, 3, 5];

  // 長方形の座標 (単位 mm)
  const [x1mm, y1mm] = [20, 5];
  const [x2mm, y2mm] = [210 - 10, 297 - 5];

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

  const pageNums = pageNum1Baseds.map( p => p - 1 );

  pageNums.forEach( pageNum => {
    // 長方形を追加
    const annotSquare = doc.addAnnot({
      // name: "annotSquare001", 
      page: pageNum, type: "Square", 
      rect: [x1, y1, x2, y2], 

      // ----- [表示方法] タブ ----- //
      style: "S", 
      // style: "D", dash: [3, 2], 
      borderEffectStyle: "", 
      // borderEffectStyle: "C", borderEffectIntensity: 1, 
      strokeColor: ["RGB", 192 / 255, 0 / 255, 0 / 255], 
      opacity: 1.0, width: 1, fillColor: ["T"], 

      // ----- [一般] タブ ----- //
      author: "作成者", subject: "タイトル", 
      modDate: util.scand("yyyy/mm/dd HH:MM:ss", "2022/03/01 10:00:00"), 

      // -------------------- //
      lock: false, readOnly: false, 
      hidden: false, noView: false, toggleNoView: false, 
      print: true, delay: false
    });
  });

})();

注釈で線を追加 (Line)

  • ページは回転0度、座標は注釈、MediaBox、CropBoxとで原点(0,0)の位置は同じと仮定する
// Acrobat Standard DC (2022年3月頃), Windows 11
// JavaScript デバッガー の コンソール から実行

(() => {
  const doc = this;

  // 連番
  const pageNum1Baseds = [...Array(doc.numPages)].map( (_null, i) => i + 1 );

  // 特定のページを対象とする場合
  // const pageNum1Baseds = [1, 3, 5];

  // 線の座標 (単位 mm)
  const [x1mm, y1mm] = [0, 0];
  const [x2mm, y2mm] = [210, 297];

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

  const pageNums = pageNum1Baseds.map( p => p - 1 );

  pageNums.forEach( pageNum => {
    // 線を追加
    const annotLine = doc.addAnnot({
      // name: "annotLine001", 
      page: pageNum, type: "Line", 
      points: [[x1, y1], [x2, y2]], 
      // doCaption: true, contents: "○×△mm", 
      leaderExtend: (72 / 25.4) * 0, leaderLength: (72 / 25.4) * 0, 

      // ----- [表示方法] タブ ----- //
      arrowBegin: "None", arrowEnd: "None", 
      // arrowBegin: "OpenArrow", arrowEnd: "OpenArrow", 
      style: "S", 
      // style: "D", dash: [3, 2], 
      strokeColor: ["RGB", 192 / 255, 0 / 255, 0 / 255], 
      opacity: 1.0, width: 1, fillColor: ["T"], 

      // ----- [一般] タブ ----- //
      author: "作成者", subject: "タイトル", 
      modDate: util.scand("yyyy/mm/dd HH:MM:ss", "2022/03/01 11:00:00"), 

      // -------------------- //
      lock: false, readOnly: false, 
      hidden: false, noView: false, toggleNoView: false, 
      print: true, delay: false
    });
  });

})();

注釈の作成者などを変更

// Acrobat Standard DC (2022年3月頃), Windows 11
// JavaScript デバッガー の コンソール から実行

(() => {
  const doc = this;
  const pageNum = doc.pageNum;

  doc.syncAnnotScan();

  const anns = doc.getAnnots({
    nPage: pageNum, 
    nSortBy: ANSB_None, bReverse: false, nFilterBy: ANFB_ShouldNone
  });

  anns.forEach( ann => {
    ann.hidden = false;
    ann.readOnly = false;
    ann.lock = false;
    ann.author = "作成者";
    ann.subject = "タイトル";
  });

})();

フラット化 (flattenPages)

  • 注釈の内容を十分に確認し、バックアップをとってから実行したほうが良いと思います
// Acrobat Standard DC (2022年3月頃), Windows 11
// JavaScript デバッガー の コンソール から実行

// 現在のページにある注釈をページ本文に変換
if (true) {
  this.syncAnnotScan();
  this.flattenPages(this.pageNum, this.pageNum + 0);
} else {
  undefined;
}