qunitamaのモノづくりブログ

レザークラフトなど、モノづくりのブログです

トラベラーズノート用 Weekly Schedule リフィルの作成

f:id:qunitama:20200215223510j:plain
Weekly Schdule レイアウト

プライベートのスケジュールはiPadで管理していますが、仕事では自作リフィルをトラベラーズノートにはさんで使ってます。
冬休みの間に2020年のリフィルを作成しましたのでご紹介したいと思います。

仕様

  • レイアウトは週間バーチカル
  • 期間は半年分 ※厚みを考慮
  • 完成サイズは横110mm 縦210mm
  • 製本は糸
  • 背表紙(?)はマスキングテープ

作成の流れ

  1. リフィル(PDF)の作成
  2. 作成したリフィルの印刷
  3. 製本

リフィル(PDF)の作成

今までは、InkScapeで作っていましたが、iPad用のTemplate生成Perlスクリプトを使えば紙物も作れると思い作ってみました。
↓完成したリフィル

左上のボックスに月、その下はTodo 、上部はガントチャートなど、下部は予定を記入します。

リフィル生成Perlスクリプト

上記リフィルPDFを生成するスクリプトです。

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_tr_template_weekly.pl
# Copyright (c) 2020 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

$PDF_X_MM = 297;
$PDF_Y_MM = 210;
$BAIRITSU = 1;
$PDF_FILE = 'TR_weekly.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 左基準点
# 印刷結果の中心がずれる場合、印刷時に微調整するか
# 下記の$base_x を調整して下さい
# +0.0 を+0.5 にすれば右に0.5mmずれます
$base_x = (297-210)/2+0.0;

# 上基準点
$base_y = $bs;

#グリッド幅
$haba = 210;

#グリッド高さ
$takasa = 200;

# 用紙生成
&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# グリッド描画(縦線)
&mtdraw::tatesen(
    $base_x,$base_y,$takasa,$COL_USU,$WID_HOS,$bs,($haba/$bs)+1);

# グリッド描画(横線)
&mtdraw::yokosen(
    $base_x,$bs,$haba,$COL_USU,$WID_HOS,$bs,($takasa/$bs)+1);

# 月曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*6,$base_y,$takasa,$COL_USU,$WID_FUT,0,1);

# 火曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*11,$base_y,$takasa,$COL_USU,$WID_CHU,0,1);

# 水曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*16,$base_y,$takasa,$COL_USU,$WID_CHU,0,1);

# 木曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*21,$base_y,$takasa,$COL_USU,$WID_CHU,0,1);

# 金曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*26,$base_y,$takasa,$COL_USU,$WID_CHU,0,1);

# 土曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*31,$base_y,$takasa,$COL_USU,$WID_FUT,0,1);

# 日曜日の左側の線
&mtdraw::tatesen(
    $base_x+$bs*36,$base_y,$takasa,$COL_USU,$WID_CHU,0,1);

# 日曜日の右側の線
&mtdraw::tatesen(
    $base_x+$bs*41,$base_y,$takasa,$COL_USU,$WID_FUT,0,1);

# 曜日描画
$xwk=$base_x+31;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_KOI,3,"月");
$xwk+=25;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_KOI,3,"火");
$xwk+=25;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_KOI,3,"水");
$xwk+=25;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_KOI,3,"木");
$xwk+=25;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_KOI,3,"金");
$xwk+=25;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_BLU,3,"土");
$xwk+=25;
&mtdraw::text($xwk,$base_y+0.5,$FONT,$COL_RED,3,"日");

# 曜日の下側の線
&mtdraw::yokosen(
    $base_x+$bs*6,$base_y+$bs*2,$bs*35,$COL_USU,$WID_CHU,0,1);

# 9 10 11 ... 19 描画
$y = $base_y+$bs*20;
for($i=0;$i<11;$i++){
    if ($i<10){
        &mtdraw::yokosen(
            $base_x+$bs*6,$y,$bs*35,$COL_USU,$WID_CHU,0,1);
    }
    $x = $base_x+$bs*6+2;
    for($j=0;$j<7;$j++){
        if ($i==0){
            $wkx=$x-0.5; # 9は1桁なので少し右に
        }else{
            $wkx=$x-1;
        }
        &mtdraw::text(
            $wkx,$y-1,$FONT,
            $COL_KOI,1.6,$i+9);
        $x+=$bs*5;
    }
    $y+=$bs*2;
}

# ToDo Box 描画
$y = $base_y+$bs*4;
for($i=0;$i<20;$i++){
    &mtdraw::box($base_x+1,$y+1,3,3,$COL_KOI,$WID_CHU);
    $y+=$bs;
}

# 左上月記入BOX 描画
&mtdraw::box($base_x,$base_y,$bs*3,$bs*3,$COL_KOI,$WID_CHU);

# 年描画
&mtdraw::text($base_x+$bs*4,$base_y+0.5,$FONT,$COL_KOI,4,"2020");
&mtdraw::text($base_x+$bs*3+2,$base_y+$bs+1,$FONT,$COL_KOI,3,"令和2年");

# PDFに変換
&mtdraw::make_pdf($PDF_FILE);

スクリプトの中で使用するライブラリはこの記事の中で使っている”mtdraw.pl”です。
qunitama.hatenablog.com
※実行は自己責任でお願いします。

作成したリフィルの印刷

半年27週分のリフィルを作る為にA4用紙14枚に作成したリフィルを印刷します。その際、13枚は両面、1枚は片面で印刷します。

製本

表紙にするA4の厚紙は100均や画材店、ホームセンターなどでご用意下さい。
ちなみに私は、コーナンで買っています。

f:id:qunitama:20200215224143j:plain
表紙用厚紙
表紙と印刷したリフィルを全て半分におります。
ただし、片面印刷した1枚は印刷面を谷側にしております。
表紙、片面印刷のリフィル、両面印刷のリフィルの順に重ねます。
次に糸で縫っていきますが、糸の通し方を図にしてみました。
f:id:qunitama:20200215224217j:plain
糸の通し方
この図の糸の通る場所を錐で穴を開けます。
f:id:qunitama:20200215224245j:plain
穴あけ
図の通り糸で縫います。
糸はタコ糸では太すぎますが、細いと縫い目から紙が切れてしまいますので、多少太目が良いかと思います。
f:id:qunitama:20200215224313j:plain
内側の糸
f:id:qunitama:20200215224358j:plain
外側の糸
背表紙側をマスキングテープで覆います。
f:id:qunitama:20200215230749j:plain
マスキングテープで糸を隠す
マスキングテープは数ミリ折り返すと、トラベラーズノートのゴムで挟んでも切れずらいと思います。
f:id:qunitama:20200215224452j:plain
マスキングテープを折り返す
背表紙側から110mmの位置をカッターまたはペーパーカッターでカットします。
f:id:qunitama:20200215223808j:plain
余分な部分をカット
コーナーカッター かどまるPROでコーナーを丸くします。
f:id:qunitama:20200215224518j:plain
コーナーを丸くする
完成です。
f:id:qunitama:20200215224033j:plain
完成したリフィル

最後までご覧いただき、ありがとうございました。

Goodnotes5 テンプレート生成スクリプト【高速版】

Goodnotesテンプレート生成Perlスクリプトですが課題を抱えていましたので作り直しました。

今までの課題

  • 遅い
  • 描画処理の重複(全てのスクリプトに同じ処理を書いている)

対策

  • ImageMagickはモジュール版を使う
  • 描画処理を外だしする

注意事項

  • 実行は自己責任でお願いします。

Perlスクリプト

共通描画処理(mtdraw.pl)

描画処理の共通ライブラリですので、各スクリプトと同じフォルダ(ディレクトリ)に設置して下さい。
※Noteshelf2のライブラリと同じものです。

# ---------------------------------------------------------------------
# Library for Template Create Script
# File Name mtdraw.pl
# Copyright (c) 2020 qunitama. All rights reserved.
# ---------------------------------------------------------------------
use utf8;
use Image::Magick;
package mtdraw;
# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# 名前       create_paper_mm
# 処理       用紙を生成
# パラメータ
#   $xmm 用紙サイズ(横)(mm)
#   $ymm 用紙サイズ(縦)(mm)
#   $col 用紙の色
#   $bai 倍率を指定
#        用紙サイズ及びDPIから実寸サイズを計算して用紙を生成すると、
#        書いた時に線が太いので、本倍率で用紙を拡大
# ---------------------------------------------------------------------
sub create_paper_mm {
    my ($xmm,$ymm,$col,$bai) = @_;

    $PDF_X_MM = $xmm;
    $PDF_Y_MM = $ymm;
    $BAIRITSU = $bai;

    $img = Image::Magick->new();

    my $size = sprintf("%dx%d",z($PDF_X_MM),z($PDF_Y_MM));
    $img->Set(size=>"$size");

    my $color = sprintf("xc:%s",$col);
    $img->Read("$color");
}
# ---------------------------------------------------------------------
# 名前       line
# 処理       線を描画
# パラメータ
#   $x1    始点(X)指定(mm)
#   $y1    始点(Y)指定(mm)
#   $x2    終点(X)指定(mm)
#   $y2    終点(Y)指定(mm)
#   $col   線の色
#   $width 線の幅
# ---------------------------------------------------------------------
sub line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

    my $zahyou = sprintf("%d,%d %d,%d",z($x1),z($y1),z($x2),z($y2));

    $img->Draw(
        primitive=>'line',
        points=>"$zahyou",
        stroke=>"$col",
        strokewidth=>$width);
}
# ---------------------------------------------------------------------
# 名前       tatesen
# 処理       縦線をn本等間隔に描画
# パラメータ
#   $x       始点(X)指定(mm)
#   $y       始点(Y)指定(mm)
#   $takasa  高さ指定(mm)
#   $col     線の色
#   $width   線の幅
#   $kankaku 線の間隔
#   $honsuu  本数
# ---------------------------------------------------------------------
sub tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
# ---------------------------------------------------------------------
# 名前       yokosen
# 処理       横線をn本等間隔に描画
# パラメータ
#   $x       始点(X)指定(mm)
#   $y       始点(Y)指定(mm)
#   $haba    幅指定(mm)
#   $col     線の色
#   $width   線の幅
#   $kankaku 線の間隔
#   $honsuu  本数
# ---------------------------------------------------------------------
sub yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
# ---------------------------------------------------------------------
# 名前       dot
# 処理       ドットを描画
# パラメータ
#   $x       中心点(X)指定(mm)
#   $y       中心点(Y)指定(mm)
#   $r       半径指定(mm)
#   $col     線の色
# ---------------------------------------------------------------------
sub dot {
    my ($x,$y,$r,$col) = @_;

    my $wkx1=int(z($x));
    my $wkx2=$wkx1+z($r);

    my $zahyou = sprintf("%d,%d %d,%d",$wkx1,z($y),$wkx2,z($y));
    $img->Draw(
        primitive=>'circle',
        points=>"$zahyou",
        fill=>"$col");
}
# ---------------------------------------------------------------------
# 名前       text
# 処理       テキストを描画
# パラメータ
#   $x       指定(X)指定(mm)
#   $y       指定(Y)指定(mm)
#   $font    フォント指定
#   $col     線の色
#   $size    フォントサイズ(≒mm)
#   $text    描画テキスト
# ---------------------------------------------------------------------
sub text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $geo = sprintf("+%d+%d",z($x),z($y));
    $sz = $size * 14 * $BAIRITSU;

    $img->Annotate(
        text=>$text,
        gravity=>'NorthWest',
        geometry=>"$geo",
        font=>$font,
        fill=>"$col",
        pointsize=>"$sz");
}
# ---------------------------------------------------------------------
# 名前       box
# 処理       箱を描画
# パラメータ
#   $x       始点(X)指定(mm)
#   $y       始点(Y)指定(mm)
#   $haba    幅指定(mm)
#   $takasa  高さ指定(mm)
#   $col     線の色
#   $width   線の幅
# ---------------------------------------------------------------------
sub box {
    my ($x,$y,$haba,$takasa,$col,$width) = @_;

    my $zahyou = sprintf("%d,%d %d,%d",z($x),z($y),z($x+$haba),z($y+$takasa));

    $img->Draw(
        primitive=>'Rectangle',
        points=>"$zahyou",
        fill=>'none',
        stroke=>"$col",
        strokewidth=>$width);
}
# ---------------------------------------------------------------------
# 名前       make_pdf
# 処理       PDFファイルを生成
# パラメータ
#   $fn      ファイル名
# ---------------------------------------------------------------------
sub make_pdf {
    my ($fn) = @_;

    if ( -e $fn ) {
        binmode(STDERR, ":utf8");
        print STDERR "$fn は既に存在します\n";
        undef $img;	
        exit(1);
    }

    binmode(STDOUT);

    my $density = sprintf("%dx%d",$DPI,$DPI);

    $img->Set(density=>"$density");

    $img->Write($fn);

    undef $img;

    exit(0);
}
# ---------------------------------------------------------------------
# 名前       z
# 処理       mm to pixel変換
# パラメータ
#   $mm      座標(mm)
#   戻り値   座標(Pixel)
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}

1;

ドット用紙

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_gn_template_dot.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 136;
$BAIRITSU = 1.6;
$PDF_FILE = 'GN_dot.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# dot 描画

$bs = 5; # 基準間隔 5mm

for($y=$bs;$y<=135;$y+=$bs){
    for($x=$bs;$x<=115;$x+=$bs){
        &mtdraw::dot(
            $x,$y,0.18,
            $COL_USU);
    }
}

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

5mm方眼用紙

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_gn_template_grid.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 136;
$BAIRITSU = 1.6;
$PDF_FILE = 'GN_grid.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# grid 描画

$bs = 5; # 基準間隔 5mm

# 罫線描画(縦線)

&mtdraw::tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

&mtdraw::yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,27);

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

グラフ用紙

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_gn_template_graph.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 136;
$BAIRITSU = 1.6;
$PDF_FILE = 'GN_graph.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# graph 描画

$bs  = 1; # 基準間隔 1mm
$bsf = 5; # 太線間隔 5mm

# 罫線描画(細線)

&mtdraw::tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,119);

&mtdraw::yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,135);

# 罫線描画(横線)

&mtdraw::tatesen(
    $bsf,0,$PDF_Y_MM,$COL_USU,$WID_CHU,$bsf,23);

&mtdraw::yokosen(
    0,$bsf,$PDF_X_MM,$COL_USU,$WID_CHU,$bsf,27);

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

Weekly Schedule

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_gn_template_weekly.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 136;
$BAIRITSU = 1.6;
$PDF_FILE = 'GN_weekly.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# grid 描画

$bs = 5; # 基準間隔 5mm

# 罫線描画(縦線)

&mtdraw::tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

&mtdraw::yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,27);

# 曜日描画
$ywk=20.2;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"月");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"火");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"水");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"木");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"金");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_BLU,3,"土");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_RED,3,"日");

# 左から15mmの位置に縦線を描画

&mtdraw::tatesen(
    15,10,105,$COL_USU,$WID_FUT,0,1);

# 曜日区切り線描画(横線)

&mtdraw::yokosen(
    0,$bs*2,$PDF_X_MM,$COL_USU,$WID_FUT,$bs*3,8);

# dot 描画

$y = 10;
for($i=0;$i<7;$i++){
    $x = 25;
    for($j=0;$j<10;$j++){
        &mtdraw::dot(
            $x+0.1,$y+1,0.5,$COL_USU);
        $x+=10;
    }
    $y+=15;
}

# 9 10 11 ... 18 描画

$y = 8.5;
for($i=0;$i<7;$i++){
    $x = 20;
    for($j=0;$j<10;$j++){
        if ($j==0){
            $wkx=$x-0.5; # 9は1桁なので少し右に
        }else{
            $wkx=$x-1;
        }
        &mtdraw::text(
            $wkx,$y+2,$FONT,
            $COL_KOI,1.6,$j+9);
        $x+=10;
    }
    $y+=15;
}

$y = 115;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

完成したPDF

完成したPDFを置いておきますので、ご自由にお使い下さい。

ドット用紙

5mm方眼用紙

グラフ用紙

Weekly Schedule

Noteshelf2 テンプレート生成スクリプト【高速版】

Noteshelf2テンプレート生成Perlスクリプトですが課題を抱えていましたので作り直しました。

今までの課題

  • 遅い
  • 描画処理の重複(全てのスクリプトに同じ処理を書いている)

対策

  • ImageMagickはモジュール版を使う
  • 描画処理を外だしする

注意事項

  • 実行は自己責任でお願いします。

Perlスクリプト

共通描画処理(mtdraw.pl)

描画処理の共通ライブラリですので、各スクリプトと同じフォルダ(ディレクトリ)に設置して下さい。

# ---------------------------------------------------------------------
# Library for Template Create Script
# File Name mtdraw.pl
# Copyright (c) 2020 qunitama. All rights reserved.
# ---------------------------------------------------------------------
use utf8;
use Image::Magick;
package mtdraw;
# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# 名前       create_paper_mm
# 処理       用紙を生成
# パラメータ
#   $xmm 用紙サイズ(横)(mm)
#   $ymm 用紙サイズ(縦)(mm)
#   $col 用紙の色
#   $bai 倍率を指定
#        用紙サイズ及びDPIから実寸サイズを計算して用紙を生成すると、
#        書いた時に線が太いので、本倍率で用紙を拡大
# ---------------------------------------------------------------------
sub create_paper_mm {
    my ($xmm,$ymm,$col,$bai) = @_;

    $PDF_X_MM = $xmm;
    $PDF_Y_MM = $ymm;
    $BAIRITSU = $bai;

    $img = Image::Magick->new();

    my $size = sprintf("%dx%d",z($PDF_X_MM),z($PDF_Y_MM));
    $img->Set(size=>"$size");

    my $color = sprintf("xc:%s",$col);
    $img->Read("$color");
}
# ---------------------------------------------------------------------
# 名前       line
# 処理       線を描画
# パラメータ
#   $x1    始点(X)指定(mm)
#   $y1    始点(Y)指定(mm)
#   $x2    終点(X)指定(mm)
#   $y2    終点(Y)指定(mm)
#   $col   線の色
#   $width 線の幅
# ---------------------------------------------------------------------
sub line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

    my $zahyou = sprintf("%d,%d %d,%d",z($x1),z($y1),z($x2),z($y2));

    $img->Draw(
        primitive=>'line',
        points=>"$zahyou",
        stroke=>"$col",
        strokewidth=>$width);
}
# ---------------------------------------------------------------------
# 名前       tatesen
# 処理       縦線をn本等間隔に描画
# パラメータ
#   $x       始点(X)指定(mm)
#   $y       始点(Y)指定(mm)
#   $takasa  高さ指定(mm)
#   $col     線の色
#   $width   線の幅
#   $kankaku 線の間隔
#   $honsuu  本数
# ---------------------------------------------------------------------
sub tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
# ---------------------------------------------------------------------
# 名前       yokosen
# 処理       横線をn本等間隔に描画
# パラメータ
#   $x       始点(X)指定(mm)
#   $y       始点(Y)指定(mm)
#   $haba    幅指定(mm)
#   $col     線の色
#   $width   線の幅
#   $kankaku 線の間隔
#   $honsuu  本数
# ---------------------------------------------------------------------
sub yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
# ---------------------------------------------------------------------
# 名前       dot
# 処理       ドットを描画
# パラメータ
#   $x       中心点(X)指定(mm)
#   $y       中心点(Y)指定(mm)
#   $r       半径指定(mm)
#   $col     線の色
# ---------------------------------------------------------------------
sub dot {
    my ($x,$y,$r,$col) = @_;

    my $wkx1=int(z($x));
    my $wkx2=$wkx1+z($r);

    my $zahyou = sprintf("%d,%d %d,%d",$wkx1,z($y),$wkx2,z($y));
    $img->Draw(
        primitive=>'circle',
        points=>"$zahyou",
        fill=>"$col");
}
# ---------------------------------------------------------------------
# 名前       text
# 処理       テキストを描画
# パラメータ
#   $x       指定(X)指定(mm)
#   $y       指定(Y)指定(mm)
#   $font    フォント指定
#   $col     線の色
#   $size    フォントサイズ(≒mm)
#   $text    描画テキスト
# ---------------------------------------------------------------------
sub text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $geo = sprintf("+%d+%d",z($x),z($y));
    $sz = $size * 14 * $BAIRITSU;

    $img->Annotate(
        text=>$text,
        gravity=>'NorthWest',
        geometry=>"$geo",
        font=>$font,
        fill=>"$col",
        pointsize=>"$sz");
}
# ---------------------------------------------------------------------
# 名前       box
# 処理       箱を描画
# パラメータ
#   $x       始点(X)指定(mm)
#   $y       始点(Y)指定(mm)
#   $haba    幅指定(mm)
#   $takasa  高さ指定(mm)
#   $col     線の色
#   $width   線の幅
# ---------------------------------------------------------------------
sub box {
    my ($x,$y,$haba,$takasa,$col,$width) = @_;

    my $zahyou = sprintf("%d,%d %d,%d",z($x),z($y),z($x+$haba),z($y+$takasa));

    $img->Draw(
        primitive=>'Rectangle',
        points=>"$zahyou",
        fill=>'none',
        stroke=>"$col",
        strokewidth=>$width);
}
# ---------------------------------------------------------------------
# 名前       make_pdf
# 処理       PDFファイルを生成
# パラメータ
#   $fn      ファイル名
# ---------------------------------------------------------------------
sub make_pdf {
    my ($fn) = @_;

    if ( -e $fn ) {
        binmode(STDERR, ":utf8");
        print STDERR "$fn は既に存在します\n";
        undef $img;	
        exit(1);
    }

    binmode(STDOUT);

    my $density = sprintf("%dx%d",$DPI,$DPI);

    $img->Set(density=>"$density");

    $img->Write($fn);

    undef $img;

    exit(0);
}
# ---------------------------------------------------------------------
# 名前       z
# 処理       mm to pixel変換
# パラメータ
#   $mm      座標(mm)
#   戻り値   座標(Pixel)
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}

1;

ドット用紙

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_ns_template_dot.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 150;
$BAIRITSU = 2.4;
$PDF_FILE = 'NS_dot.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# dot 描画

$bs = 5; # 基準間隔 5mm

for($y=$bs;$y<=145;$y+=$bs){
    for($x=$bs;$x<=115;$x+=$bs){
        &mtdraw::dot(
            $x,$y,0.18,
            $COL_USU);
    }
}

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

5mm方眼用紙

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_ns_template_grid.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 150;
$BAIRITSU = 2.4;
$PDF_FILE = 'NS_grid.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# grid 描画

$bs = 5; # 基準間隔 5mm

# 罫線描画(縦線)

&mtdraw::tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

&mtdraw::yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,29);

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

グラフ用紙

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_ns_template_graph.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 150;
$BAIRITSU = 2.4;
$PDF_FILE = 'NS_graph.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# graph 描画

$bs  = 1; # 基準間隔 1mm
$bsf = 5; # 太線間隔 5mm

# 罫線描画(細線)

&mtdraw::tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,119);

&mtdraw::yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,149);

# 罫線描画(横線)

&mtdraw::tatesen(
    $bsf,0,$PDF_Y_MM,$COL_USU,$WID_CHU,$bsf,23);

&mtdraw::yokosen(
    0,$bsf,$PDF_X_MM,$COL_USU,$WID_CHU,$bsf,29);

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

Weekly Schedule

#!/usr/bin/perl
use utf8;
require("./mtdraw.pl");

# ---------------------------------------------------------------------
# Template Create Script for Note Application
# File Name make_ns_template_weekly.pl
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# 機種:iPad mini アプリ:Goodnotes --> 120x136 倍率 1.6
# 機種:iPad mini アプリ:Noteshelf --> 120x150 倍率 2.4
$PDF_X_MM = 120;
$PDF_Y_MM = 150;
$BAIRITSU = 2.4;
$PDF_FILE = 'NS_weekly.pdf';

# ---------------------------------------------------------------------
# --- 用紙生成処理
# ---------------------------------------------------------------------

# 用紙生成

&mtdraw::create_paper_mm(
    $PDF_X_MM,$PDF_Y_MM,$PAPER_COLOR,$BAIRITSU);

# grid 描画

$bs = 5; # 基準間隔 5mm

# 罫線描画(縦線)

&mtdraw::tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

&mtdraw::yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,29);

# 曜日描画
$ywk=20.2;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"月");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"火");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"水");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"木");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_KOI,3,"金");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_BLU,3,"土");
$ywk+=15;
&mtdraw::text(10.5,$ywk,$FONT,$COL_RED,3,"日");

# 左から15mmの位置に縦線を描画

&mtdraw::tatesen(
    15,10,105,$COL_USU,$WID_FUT,0,1);

# 曜日区切り線描画(横線)

&mtdraw::yokosen(
    0,$bs*2,$PDF_X_MM,$COL_USU,$WID_FUT,$bs*3,8);

# dot 描画

$y = 10;
for($i=0;$i<7;$i++){
    $x = 25;
    for($j=0;$j<10;$j++){
        &mtdraw::dot(
            $x+0.1,$y+1,0.5,$COL_USU);
        $x+=10;
    }
    $y+=15;
}

# 9 10 11 ... 18 描画

$y = 8.5;
for($i=0;$i<7;$i++){
    $x = 20;
    for($j=0;$j<10;$j++){
        if ($j==0){
            $wkx=$x-0.5; # 9は1桁なので少し右に
        }else{
            $wkx=$x-1;
        }
        &mtdraw::text(
            $wkx,$y+2,$FONT,
            $COL_KOI,1.6,$j+9);
        $x+=10;
    }
    $y+=15;
}

$y = 115;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);
$y+=5;
&mtdraw::box(1,$y+1,3,3,$COL_KOI,$WID_FUT);
&mtdraw::box(51,$y+1,3,3,$COL_KOI,$WID_FUT);

# PDFに変換

&mtdraw::make_pdf($PDF_FILE);

完成したPDF

完成したPDFを置いておきますので、ご自由にお使い下さい。

ドット用紙

5mm方眼用紙

グラフ用紙

Weekly Schedule

Goodnotes 5 テンプレート生成Perlスクリプト 修正版

iPad miniでのGoodnotes5 描画エリア(複数タブ使用時)は、実寸で横120mm縦136mmです。その座標空間内の座標を指定してテンプレート生成出来るようにスクリプトを修正しました。

注意事項

  • スクリプトはファイルを生成します。生成するファイル名はスクリプト内で指定していますが、既存のファイル名を指定した場合、上書きされてしまいますのでご注意下さい。
  • 実行は自己責任でお願いします。

Perlスクリプト

ドット用紙

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_dot.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

    $cmd = sprintf(
                "convert -stroke xc:%s -strokewidth".
                " %d -draw 'line %d,%d %d,%d' %s %s",
                $col,$width,z($x1),z($y1),
                z($x2),z($y2),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# dot 描画

for($y=$bs;$y<=135;$y+=$bs){
    for($x=$bs;$x<=115;$x+=$bs){
        draw_dot(
            $x,$y,$x+0.15,$y,
            $COL_USU);
    }
}

# PNGに変換

make_png;

# PDFに変換

make_pdf;

5mm方眼用紙

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_grid.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

    $cmd = sprintf(
                "convert -stroke xc:%s -strokewidth".
                " %d -draw 'line %d,%d %d,%d' %s %s",
                $col,$width,z($x1),z($y1),
                z($x2),z($y2),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# 罫線描画(縦線)

draw_tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

draw_yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,27);

# PNGに変換

make_png;

# PDFに変換

make_pdf;

グラフ用紙

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_graph.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_CHU = "2"; # 中
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

    $cmd = sprintf(
                "convert -stroke xc:%s -strokewidth".
                " %d -draw 'line %d,%d %d,%d' %s %s",
                $col,$width,z($x1),z($y1),
                z($x2),z($y2),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# 罫線描画(縦線)

draw_tatesen(
    1,0,$PDF_Y_MM,$COL_USU,$WID_HOS,1,119);

draw_tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_CHU,$bs,23);

# 罫線描画(横線)

draw_yokosen(
    0,1,$PDF_X_MM,$COL_USU,$WID_HOS,1,135);

draw_yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_CHU,$bs,27);

# PNGに変換

make_png;

# PDFに変換

make_pdf;

Weekly Schedule

#!/usr/bin/perl

use utf8;

# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------

# ---------------------------------------------------------------------
# --- 固定値 変更不要
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4; # 1インチは25.4mm

# ---------------------------------------------------------------------
# --- 出力PDFのDPIを指定
# ---------------------------------------------------------------------
$DPI = 300;

# ---------------------------------------------------------------------
# --- 中間ファイル名や出力ファイル名を指定
# --- ユーザ環境に合わせて変更してください
# ---------------------------------------------------------------------
$FILE_WK1 = "wk_1.bmp";
$FILE_WK2 = "wk_2.bmp";
$FILE_WK3 = "wk_3.png";
$FILE_PDF = "GN_weekly.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸をmmで記入
# --- 機種:iPad mini アプリ:Goodnotes 120x136
# ---------------------------------------------------------------------
$PDF_X_MM = 120; #縦置き時の横幅
$PDF_Y_MM = 136; #縦置き時の縦幅

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので
# --- 生成用紙を大きくする
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 色,太さ,FONT 指定
# ---------------------------------------------------------------------
$PAPER_COLOR      = "#FAFBFB";

# 色定義
$COL_USU = "#9FA0A0";  # 薄目
$COL_KOI = "#544A47";  # 濃目
$COL_RED = "#d7003a";  # 赤
$COL_BLU = "#007bbb";  # 青

# 線幅定義
$WID_HOS = "1"; # 細
$WID_FUT = "3"; # 太

# FONTを指定
$FONT =	"/cygdrive/c/Windows/Fonts/BIZ-UDGothicR.ttc";

# ---------------------------------------------------------------------
# --- 描画ルーチン *基本的には変更不要
# ---------------------------------------------------------------------
sub z {
    my ($mm) = @_;
    return $DPI / $MM_PER_IN * $mm * $BAIRITSU;
}
sub rew {
    $cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
    system($cmd);
}
sub draw_paper {
    $cmd = sprintf(
                "convert -size %dx%d xc:%s %s",
                z($PDF_X_MM),z($PDF_Y_MM),
                $PAPER_COLOR,$FILE_WK1); 
    system($cmd);
}
sub draw_line {
    my ($x1,$y1,$x2,$y2,$col,$width) = @_;

    $cmd = sprintf(
                "convert -stroke xc:%s -strokewidth".
                " %d -draw 'line %d,%d %d,%d' %s %s",
                $col,$width,z($x1),z($y1),
                z($x2),z($y2),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_tatesen {
    my ($x,$y,$takasa,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x+$kankaku*$i,$y,
            #$x+$kankaku*$i,$y+$takasa-1,
            $x+$kankaku*$i,$y+$takasa,
            $col,$width);
    }
}
sub draw_yokosen {
    my ($x,$y,$haba,$col,$width,$kankaku,$honsuu) = @_;

    for($i=0;$i<$honsuu;$i++){
        draw_line(
            $x,$y+$kankaku*$i,
            #$x+$haba-1,$y+$kankaku*$i,
            $x+$haba,$y+$kankaku*$i,
            $col,$width);
    }
}
sub draw_dot {
    my ($cx,$cy,$x,$y,$col) = @_;

    $cmd = sprintf(
                "convert -fill xc:%s ".
                "-draw 'circle %d,%d %d,%d' %s %s",
                $col,z($cx),z($cy),z($x),z($y),
                $FILE_WK1,$FILE_WK2); 
    system($cmd);

    rew;
}
sub draw_text {
    my ($x,$y,$font,$col,$size,$text) = @_;

    $cmd = sprintf(
                "convert -font \"%s\" -fill xc:%s ".
                "-pointsize %d -draw ".
                "\"text %d,%d '%s'\" %s %s",
                $font,$col,z($size),z($x),z($y),$text,
                $FILE_WK1,$FILE_WK2);
    system($cmd);

    rew;
}
sub make_png {
    $cmd = sprintf(
		"convert %s %s",$FILE_WK1,$FILE_WK3);
    system($cmd);
}
sub make_pdf {
    $cmd = sprintf(
                "convert -density %d -geometry %dx%d %s %s",
                $DPI,z($PDF_X_MM),z($PDF_Y_MM),
                $FILE_WK3,$FILE_PDF);
    system($cmd);
}
# ---------------------------------------------------------------------
# --- 用紙生成処理 ※ユーザ指定処理
# ---------------------------------------------------------------------

$bs = 5; # 基準間隔 5mm

# 用紙生成

draw_paper;

# 罫線描画(縦線)

draw_tatesen(
    $bs,0,$PDF_Y_MM,$COL_USU,$WID_HOS,$bs,23);

# 罫線描画(横線)

draw_yokosen(
    0,$bs,$PDF_X_MM,$COL_USU,$WID_HOS,$bs,27);

# 曜日区切り線描画

draw_yokosen(
    0,10,$PDF_X_MM,$COL_USU,$WID_FUT,$bs*3,8);

# 曜日描画

draw_text(11, 24,$FONT,$COL_KOI,3,"月");
draw_text(11, 39,$FONT,$COL_KOI,3,"火");
draw_text(11, 54,$FONT,$COL_KOI,3,"水");
draw_text(11, 69,$FONT,$COL_KOI,3,"木");
draw_text(11, 84,$FONT,$COL_KOI,3,"金");
draw_text(11, 99,$FONT,$COL_BLU,3,"土");
draw_text(11,114,$FONT,$COL_RED,3,"日");


# 左から15mmの位置に縦線を描画

draw_tatesen(
    15,10,105,$COL_USU,$WID_FUT,0,1);

# dot 描画

$y = 10;
for($i=0;$i<7;$i++){
    $x = 25;
    for($j=0;$j<10;$j++){
        draw_dot(
            $x-0.1,$y+1,$x+0.3,$y+1,
            $COL_KOI);
        $x+=10;
    }
    $y+=15;
}

# 9 10 11 ... 18 描画

$y = 10;
for($i=0;$i<7;$i++){
    $x = 20;
    for($j=0;$j<10;$j++){
        if ($j==0){
            $wkx=$x-0.5; # 9は1桁なので少し右に
        }else{
            $wkx=$x-1;
        }
        draw_text(
            $wkx,$y+2,$FONT,
            $COL_KOI,2,$j+9);
        $x+=10;
    }
    $y+=15;
}

# PNGに変換

make_png;

# PDFに変換

make_pdf;

完成したPDF

完成したPDFを置いておきますので、ご自由にお使い下さい。

ドット用紙

5mm方眼用紙

グラフ用紙

Weekly Schedule

SoundPEATS TrueFree+ × FENDER SureSeal Tips

普段通勤などでイヤホンはSHURE SE215 SEをメインに使っていますが、TWSの身軽さも捨てがたく、お気軽価格のSoundPEATS TrueFree+を買ってしまいました。

f:id:qunitama:20191222221710j:plain
SoundPEATSにSureSealを装着

イヤーピース問題

TWSで問題になるのが落下による紛失や破損で、うちの娘に買った時も速攻で片側をなくされました。また、TWSに限った話ではありませんが、イヤーピースがフィットしないと本来の音(特に低音)が出ていないと感じます。

イヤーピース変更

家に届くなりコンプライのイヤーピースに変えていたのですが、以前SE215用に買ってみたSureSealの存在を思い出したので試してみました。

これがドンピシャで、低音はしっかり出るし、あまりにフィットしているので外す時は傘のおちょこ状態です。

f:id:qunitama:20191222224734j:plain
外すとおちょこ
これでは、まず落ちる事は無いと思います。
また、ケースに戻しても邪魔をせず充電も問題ありません。

GoodNotes 5 テンプレート

前回、iPad mini用のNoteshelf 2 のテンプレートを公開しましたが、
qunitama.hatenablog.com
GoodNotes 5 のテンプレートも作成してみましたので公開いたします。

注意事項

  • スクリプトはファイルを生成します。生成するファイル名はスクリプト内で指定していますが、既存のファイル名を指定した場合、上書きされてしまいますのでご注意下さい。
  • 実行は自己責任でお願いします。

スクリプト

グラフ用紙版

#!/usr/bin/perl
# ---------------------------------------------------------------------
# Script Name : Template Create Script for Note Application
#
# Copyright (c) 2019 qunitama. All rights reserved.
# ---------------------------------------------------------------------
# --- 固定値
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4;   # 1インチは25.4mm
$FILE_WK1 = "wk_graph_1.png";
$FILE_WK2 = "wk_graph_2.png";
$FILE_PDF = "GN_graph.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸を記入 機種:iPad mini アプリ:Goodnotes
# ---------------------------------------------------------------------
$PAPER_AREA_X_MM_GN_IPADMINI  = 120; #縦置き時の横幅をmmで記入
$PAPER_AREA_Y_MM_GN_IPADMINI  = 137; #縦置き時の縦幅をmmで記入
$PAPER_AREA_X_PIX_GN_IPADMINI = 1536; #縦置き時の横幅をピクセルで記入

#縦置き時の縦幅(自動計算)
$PAPER_AREA_Y_PIX_GN_IPADMINI = int($PAPER_AREA_X_PIX_GN_IPADMINI
				* $PAPER_AREA_Y_MM_GN_IPADMINI
				/ $PAPER_AREA_X_MM_GN_IPADMINI);

# ---------------------------------------------------------------------
# --- 描画する方眼のサイズをmmで指定
# ---------------------------------------------------------------------
$HOUGAN_SIZE_MM = 1;

# ---------------------------------------------------------------------
# --- 太線指定
# --- 5を指定すれば5本目は太線,0で太線なし
# ---------------------------------------------------------------------
$FUTOSEN_STEP = 5;

# ---------------------------------------------------------------------
# --- タイトル区切り線の位置を指定
# --- 10を指定すれば10本目は太線,0で区切り線なし
# ---------------------------------------------------------------------
$KUGIRISEN_POS = 10;

# ---------------------------------------------------------------------
# --- 機種とアプリを指定
# ---------------------------------------------------------------------
$PDF_X_MM  = $PAPER_AREA_X_MM_GN_IPADMINI;
$PDF_Y_MM  = $PAPER_AREA_Y_MM_GN_IPADMINI;
$IMG_X_PIX = $PAPER_AREA_X_PIX_GN_IPADMINI;
$IMG_Y_PIX = $PAPER_AREA_Y_PIX_GN_IPADMINI;

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので2、3倍の大きさ生成
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 生成サイズを計算
# ---------------------------------------------------------------------
$PDF_X_MM  *= $BAIRITSU;
$PDF_Y_MM  *= $BAIRITSU;
$IMG_X_PIX *= $BAIRITSU;
$IMG_Y_PIX *= $BAIRITSU;

$HOUGAN_SIZE_MM *= $BAIRITSU;

# ---------------------------------------------------------------------
# --- DPI計算
# ---------------------------------------------------------------------
$PDF_DPI = $IMG_X_PIX / ($PDF_X_MM / $MM_PER_IN);

# ---------------------------------------------------------------------
# --- 描画する方眼のピクセル数を自動計算
# ---------------------------------------------------------------------
$HOUGAN_SIZE_PIX = $IMG_X_PIX / $PDF_X_MM * $HOUGAN_SIZE_MM;

# ---------------------------------------------------------------------
# --- 色指定,太さ指定
# ---------------------------------------------------------------------
$PAPER_COLOR    = "#fafbfb";

$LINE_USU_COLOR = "#cccccc"; #薄い線の色
$LINE_USU_WIDTH = "1";       #薄い線の幅

$LINE_KOI_COLOR = "#767676"; #濃い線の色
$LINE_KOI_WIDTH = "1";       #濃い線の幅

$LINE_KUG_COLOR = "#767676"; #タイトル区切り線の色
$LINE_KUG_WIDTH = "3";       #タイトル区切り線の幅

# ---------------------------------------------------------------------
# --- 描画ルーチン
# ---------------------------------------------------------------------
sub line_draw {

	my ($x1,$y1,$x2,$y2,$col,$width) = @_;

        $cmd = sprintf("convert -stroke xc:%s -strokewidth".
                        " %s -draw 'line %d,%d %d,%d' %s %s",
                        $col,$width,$x1,$y1,$x2,$y2,
                        $FILE_WK1,$FILE_WK2);

	system($cmd);
	$cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
	system($cmd);
}

# ---------------------------------------------------------------------
# --- 生成処理開始
# ---------------------------------------------------------------------
# 用紙生成
$cmd = sprintf("convert -size %dx%d xc:%s %s",
		$IMG_X_PIX,$IMG_Y_PIX,$PAPER_COLOR,$FILE_WK1); 
system($cmd);

# 縦線描画
$wk_x = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_x < $IMG_X_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_x += $HOUGAN_SIZE_PIX;
	$count++;
}
# 横線描画
$wk_y = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_y < $IMG_Y_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_y += $HOUGAN_SIZE_PIX;
	$count++;
}
# 区切り線描画

if ($KUGIRISEN_POS>0){
	$wk_y = $HOUGAN_SIZE_PIX * $KUGIRISEN_POS;
	line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KUG_COLOR,$LINE_KUG_WIDTH);
}

# PDFに変換して完成

$cmd = sprintf("convert -density %d -geometry %dx%d %s %s",
	$PDF_DPI,$IMG_X_PIX,$IMG_Y_PIX,$FILE_WK1,$FILE_PDF);
system($cmd);

5mm方眼用紙版

#!/usr/bin/perl
# ---------------------------------------------------------------------
# Template Create Script for Note Application
#
#
# ---------------------------------------------------------------------
# --- 固定値
# ---------------------------------------------------------------------
$MM_PER_IN = 25.4;   # 1インチは25.4mm
$FILE_WK1 = "wk_grid_1.png";
$FILE_WK2 = "wk_grid_2.png";
$FILE_PDF = "GN_grid.pdf";

# ---------------------------------------------------------------------
# --- アプリの用紙エリアの実寸を記入 機種:iPad mini アプリ:Goodnotes
# ---------------------------------------------------------------------
$PAPER_AREA_X_MM_GN_IPADMINI  = 120; #縦置き時の横幅をmmで記入
$PAPER_AREA_Y_MM_GN_IPADMINI  = 137; #縦置き時の縦幅をmmで記入
$PAPER_AREA_X_PIX_GN_IPADMINI = 1536; #縦置き時の横幅をピクセルで記入

#縦置き時の縦幅(自動計算)
$PAPER_AREA_Y_PIX_GN_IPADMINI = int($PAPER_AREA_X_PIX_GN_IPADMINI
				* $PAPER_AREA_Y_MM_GN_IPADMINI
				/ $PAPER_AREA_X_MM_GN_IPADMINI);

# ---------------------------------------------------------------------
# --- 描画する方眼のサイズをmmで指定
# ---------------------------------------------------------------------
$HOUGAN_SIZE_MM = 5;

# ---------------------------------------------------------------------
# --- 太線指定
# --- 5を指定すれば5本目は太線,0で太線なし
# ---------------------------------------------------------------------
$FUTOSEN_STEP = 0;

# ---------------------------------------------------------------------
# --- タイトル区切り線の位置を指定
# --- 10を指定すれば10本目は太線,0で区切り線なし
# ---------------------------------------------------------------------
$KUGIRISEN_POS = 2;

# ---------------------------------------------------------------------
# --- 機種とアプリを指定
# ---------------------------------------------------------------------
$PDF_X_MM  = $PAPER_AREA_X_MM_GN_IPADMINI;
$PDF_Y_MM  = $PAPER_AREA_Y_MM_GN_IPADMINI;
$IMG_X_PIX = $PAPER_AREA_X_PIX_GN_IPADMINI;
$IMG_Y_PIX = $PAPER_AREA_Y_PIX_GN_IPADMINI;

# ---------------------------------------------------------------------
# --- 生成倍率を指定 実寸で生成すると線が太いので2、3倍の大きさ生成
# ---------------------------------------------------------------------
$BAIRITSU = 1.6;

# ---------------------------------------------------------------------
# --- 生成サイズを計算
# ---------------------------------------------------------------------
$PDF_X_MM  *= $BAIRITSU;
$PDF_Y_MM  *= $BAIRITSU;
$IMG_X_PIX *= $BAIRITSU;
$IMG_Y_PIX *= $BAIRITSU;

$HOUGAN_SIZE_MM *= $BAIRITSU;

# ---------------------------------------------------------------------
# --- DPI計算
# ---------------------------------------------------------------------
$PDF_DPI = $IMG_X_PIX / ($PDF_X_MM / $MM_PER_IN);

# ---------------------------------------------------------------------
# --- 描画する方眼のピクセル数を自動計算
# ---------------------------------------------------------------------
$HOUGAN_SIZE_PIX = $IMG_X_PIX / $PDF_X_MM * $HOUGAN_SIZE_MM;

# ---------------------------------------------------------------------
# --- 色指定,太さ指定
# ---------------------------------------------------------------------
$PAPER_COLOR    = "#fafbfb";

$LINE_USU_COLOR = "#767676"; #薄い線の色
$LINE_USU_WIDTH = "1";       #薄い線の幅

$LINE_KOI_COLOR = "#767676"; #濃い線の色
$LINE_KOI_WIDTH = "1";       #濃い線の幅

$LINE_KUG_COLOR = "#767676"; #タイトル区切り線の色
$LINE_KUG_WIDTH = "3";       #タイトル区切り線の幅

# ---------------------------------------------------------------------
# --- 描画ルーチン
# ---------------------------------------------------------------------
sub line_draw {

	my ($x1,$y1,$x2,$y2,$col,$width) = @_;

        $cmd = sprintf("convert -stroke xc:%s -strokewidth".
                        " %s -draw 'line %d,%d %d,%d' %s %s",
                        $col,$width,$x1,$y1,$x2,$y2,
                        $FILE_WK1,$FILE_WK2);

	system($cmd);
	$cmd = sprintf("mv %s %s",$FILE_WK2,$FILE_WK1); 
	system($cmd);
}

# ---------------------------------------------------------------------
# --- 生成処理開始
# ---------------------------------------------------------------------
# 用紙生成
$cmd = sprintf("convert -size %dx%d xc:%s %s",
		$IMG_X_PIX,$IMG_Y_PIX,$PAPER_COLOR,$FILE_WK1); 
system($cmd);

# 縦線描画
$wk_x = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_x < $IMG_X_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw($wk_x,0,$wk_x,$IMG_Y_PIX,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_x += $HOUGAN_SIZE_PIX;
	$count++;
}
# 横線描画
$wk_y = $HOUGAN_SIZE_PIX;
$count = 1;
while($wk_y < $IMG_Y_PIX){
	if ($FUTOSEN_STEP>0 && $count % $FUTOSEN_STEP == 0){
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KOI_COLOR,$LINE_KOI_WIDTH);
	}else{
		line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_USU_COLOR,$LINE_USU_WIDTH);
	}
	$wk_y += $HOUGAN_SIZE_PIX;
	$count++;
}
# 区切り線描画

if ($KUGIRISEN_POS>0){
	$wk_y = $HOUGAN_SIZE_PIX * $KUGIRISEN_POS;
	line_draw(0,$wk_y,$IMG_X_PIX,$wk_y,
			$LINE_KUG_COLOR,$LINE_KUG_WIDTH);
}

# PDFに変換して完成

$cmd = sprintf("convert -density %d -geometry %dx%d %s %s",
	$PDF_DPI,$IMG_X_PIX,$IMG_Y_PIX,$FILE_WK1,$FILE_PDF);
system($cmd);

完成したPDF

完成したPDFを置いておきますので、ご自由にお使い下さい。

グラフ用紙版

5mm方眼用紙版