Tei5’s Blog

Tei5 の メモ書き

A3見開きのPDFを、A4の両面印刷にしたい

結論から簡単に言うと「PDF X-ChangeEditor」で「大きなページを並べて表示」で両面印刷。

印刷時に、「ページの配置とスケール」の   タイプ「大きなページを並べて表示」   ズーム「100%」   重ね合わせ「0mm」 と設定して、両面印刷する。

マウスホイールの修理

Buffalo の 有線レーザーマウス BSMBU18WH(だと思う)が手に馴染むので、長年愛用してたんだけど、スクロールのホイールが調子悪くなってきた。

具体的には、ホイールを一方向に回してもスクロールが進んだり戻ったりする。挙動がおかしい。

結論は、マウスホイールのロータリーエンコーダの3ピンの内1本が断線していた。半田付けし直して、無事修理完了。

このマウスは、ホイールを左右に傾けるとexcelなどで左右スクロールができるのだが、ホイールを傾けられるようにするため、構造状ロータリーエンコーダの足の部分が動く。長期間動かしていることで、金属疲労をおこし断線したと思われる。

 

そもそもロータリーエンコーダの3ピンのうち一本切れて動くのか?だが、

本の足のうち、1本はGNDで、残り2本からパルス(A相とB相)が出力されているらしい。今回はパルスの1本が切れていたので、なんとなく動いていたらしい。

 

ロータリーエンコーダの挙動も知れて勉強になったぜ。

A3見開きPDFを、A4冊子印刷に

A3見開きのパンフレットなどを、A4の小冊子印刷にしたい。無料で😅

目次

結論

  1. A3見開きPDFを、A4のPDFにページを分解
  2. 背表紙を、一番最後に移動
  3. 小冊子印刷をする

簡単に言うと

A3用にくっついたパンフレットなんかを、A4に分割して、背表紙を移動して、印刷する

詳細

1. A3見開きPDFを、A4のPDFにページを分解

PDF 印刷できるソフトから、「Microsoft Print To PDF」を使用して、分割したPDFを作成します。

私は、「PDF X-ChangeEditor」を使ってます。

印刷時に、「ページの配置とスケール」の
  タイプ「大きなページを並べて表示
  ズーム「100%」
  重ね合わせ「0mm
と設定して、印刷すると、左右に分割したPDFが作成できます。

実は、PDF X-ChangeEditorは、ページ分割の機能があるのだけれど、有料のPRO版の機能なので、今回は使用しません。

2. 背表紙を、一番最後に移動

背表紙を、一番最後のページに移動します。

私は、「CubePDF Utility」を使ってます。ページをドラッグするだけなんで、簡単。

3. 小冊子印刷をする

あとは、プリンタドライバの小冊子印刷機能を使って印刷します。

Canon複合機のプリンタドライバには、小冊子印刷機能はあるが、今回のように分割しつつ印刷するのは対応できなさそう。(できるんならすんません)

Windowsバッチファイルで、テキストやPDFを開き、終了を待たずに次のコマンドに進む方法

皆さん、こんにちは。今回はWindowsバッチファイルを使用して、テキストやPDFファイルを開きつつ、その終了を待たずに次のコマンドに進む方法についてご紹介します。

まずは以下のように、START "sample.txt"と記述してみるかもしれません。しかし、これでは期待通りに動作しません。

START "sample.txt"

なぜなら、STARTコマンドは最初の二重引用符で囲まれたパラメータを新しいウィンドウのタイトルとして扱うためです。そのため、この書き方ではテキストファイルが正しく開かれず、次のコマンドに進むこともできません。

それでは、どうすればよいのでしょうか。以下の2つの方法があります。

1つ目の方法は、空のタイトル "" を指定することです。

START "" "sample.txt"

こちらの方法では、START コマンドが正しくテキストファイルを開き、その終了を待たずにすぐに次のコマンドに進むことができます。

2つ目の方法は、cmd /Cを使用することです。

cmd /C "sample.txt"

こちらの方法でも同様に、テキストファイルが開かれ、その終了を待たずにすぐに次のコマンドに進むことができます。

以上、Windowsバッチファイルを使ってテキストやPDFを開きつつ、その終了を待たずに次のコマンドに進む方法について解説しました。


ChatGPTで生成しました。

TSV ファイルの整形 TSV2TXT.py ChatGPT4.0で生成

いわゆるTSVファイルのタブをスペースに置き換えて整形し直す。
自動処理の印刷用に使いたかった。

秀丸ではTSVの扱いが良いなと思ってる。
特に、「タブを含まない行はカラム幅の計算を無視する」というのがよい。
タイトルなどを入れておいてもフォーマットが崩れない。

同様の事をさせるPythonスクリプトを ChatGPT4.0に作らせた。

ほぼ ChatGPT 4.0 で生成できた。 ・タブがなければそのまま次へ。カラムの幅をカウントしない。のところに、不要な「print(line)」があって、 ・タブがなければそのまま出力するところの「print(line)」がなかったので、追加 と言うか、指示がまずかっただけかも。

もちろん、'/t' を ',' に変えれば、CSV2TXTにもなるはず。

import sys
import unicodedata

## ほぼ ChatGPT 4.0 で生成したスクリプト
## 秀丸のTSV表示と同様にタブをスペースに置き換えフォーマットし直す。全角も考慮する。
## 各カラムの最大幅を計算し出力するが、タブの無い行はそのまま出力する。
## カラムが数値のみの場合右寄せにする。

def get_display_width(s):
    width = 0
    for char in s:
        # W(全角)、F(全角)、A(アンビギュアス)の文字は2とカウント
        if unicodedata.east_asian_width(char) in 'WFA':
            width += 2
        else:
            width += 1
    return width

def format_tab_separated_values(input_lines):
    # カラムの最大幅を保存するリスト
    max_widths = []

    # 各行について
    for line in input_lines:
        # タブがなければそのまま出力
        if '\t' not in line:
            continue

        # タブで区切られた値を取得
        values = line.split('\t')

        # 新しいカラムが見つかった場合、max_widthsを拡張
        while len(max_widths) < len(values):
            max_widths.append(0)

        # 各カラムについて
        for i, value in enumerate(values):
            # カラムの現在の最大幅を更新
            max_widths[i] = max(max_widths[i], get_display_width(value))

    # 再度各行について
    for line in input_lines:
        # タブがなければそのまま出力
        if '\t' not in line:
            print(line)
            continue

        # タブで区切られた値を取得
        values = line.split('\t')

        # 各カラムを最大幅に合わせてフォーマット
        for i, value in enumerate(values):
            padding = ' ' * (max_widths[i] - get_display_width(value))
            # 数字のみなら右寄せ、それ以外は左寄せ
            if value.isdigit():
                print(padding + value, end=' ')
            else:
                # 最後のカラムは右詰めせずに出力
                if i == len(values) - 1:
                    print(value, end='')
                else:
                    print(value + padding, end=' ')

        print()

def main():
    lines = []
    for line in sys.stdin:
        lines.append(line.rstrip())

    format_tab_separated_values(lines)

if __name__ == "__main__":
    main()

使い方は、こんな感じ。

tsv2txt.py < org.tsv > format.txt

org.tsv

タイトルなど、この行にはタブは無し
名前  生年月日    住所  数値
山田 太郎   1990-01-15  東京都渋谷区  4567
John Smith  1985-07-03  New York, USA   123
田中 みな子    1995-12-28  大阪府大阪市  9876
Emily Johnson   1992-04-10  London, UK  2345
佐藤 健太   1988-09-22  東京都千代田区   56789

これを変換すると、

タイトルなど、この行にはタブは無し
名前          生年月日   住所           数値
山田 太郎     1990-01-15 東京都渋谷区    4567
John Smith    1985-07-03 New York, USA    123
田中 みな子   1995-12-28 大阪府大阪市    9876
Emily Johnson 1992-04-10 London, UK      2345
佐藤 健太     1988-09-22 東京都千代田区 56789

こんな感じに変換できる。

Windowsバッチファイルが正常に動作しない!(環境変数定義)

バッチファイルのハマりポイント

環境変数定義で、見やすくするために、スペースを入れて、

set TEMP_FILE = "X:\WORK.tmp"

とかしたくなる。

 

実際に定義されている、変数名は、「TEMP_FILE 」(後ろにスペースを含む!)

 

この例の場合で、環境変数を利用する場合、

ECHO %TEMP_FILE%  

ではだめで、

ECHO %TEMP_FILE %  

と後ろにスペースを入れなければダメ。

 

変数の値も、この例の場合

「 "X:\WORK.tmp"」(頭にスペースを含む)となる。(このECHOの例なら問題ない)

 

環境変数定義では、スペースを入れないように注意!!

 

Windowsバッチファイルが正常に動作しない! (文字コード、改行コード)

Windowsバッチファイルが正常に動作しない!ときは、
文字コード、改行コードも疑ってみて!

 

文字コードは、S-JIS ! 

改行コードは CR+LF にする!

 

なぜか、改行コードが、LFになってしまっていて、ハマった・・。