PDFを回転・保存するqpdfコマンド

MacOSのプレビューの不満
コマンド+Rで回転して保存しても変更が保存されない
非常に不便

そこでUNIXの出番
org.pdfを
時計回り(右回り)90度回転 +90
して、new.pdfをつくる

$ qpdf --rotate=+90 org.pdf new.pdf

これでOK

注意は、+90が数学における反時計周り・左回りではなく、その反対である点

qpdfはbrewでインストール

$ brew install qpdf
$ brew info qpdf
qpdf: stable 10.6.3 (bottled)
Tools for and transforming and inspecting PDF files
https://github.com/qpdf/qpdf
/usr/local/Cellar/qpdf/10.6.3 (81 files, 9.4MB) *
  Poured from bottle on 2022-03-14 at 22:21:47
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/qpdf.rb
License: Apache-2.0
==> Dependencies
Required: jpeg ✔, openssl@1.1 ✔
==> Analytics
install: 2,815 (30 days), 14,484 (90 days), 48,488 (365 days)
install-on-request: 2,148 (30 days), 10,922 (90 days), 33,609 (365 days)
build-error: 0 (30 days)

qpdfの詳細
https://qpdf.readthedocs.io/en/stable/cli.html?highlight=rotate#option-rotate

【BOOKS】新The UNIX SuperText 改訂増補版【上】【下】

☆新The UNIX SuperText 改訂増補版【上】

2003年2月28日発売 山口和紀,古瀬一隆 監修 B5判/896ページ 定価(本体3,480円+税)
サポートページ https://gihyo.jp/book/2003/4-7741-1682-3/support

5159BB4A 4041 41DE A4BF E7F579ACDD2F

☆新The UNIX SuperText 改訂増補版【下】

2003年2月28日発売 山口和紀,古瀬一隆 監修 B5判/1,040ページ 定価(本体3,680円+税)
サポートページ https://gihyo.jp/book/2003/4-7741-1683-1/support

61907D98 6818 4536 9FF4 180A2FCB6016

現在在庫切れ
Amazonで中古本が購入できます

https://www.amazon.co.jp/o/ASIN/4774116823/gihyojp-22
https://www.amazon.co.jp/o/ASIN/4774116831/gihyojp-22

TheUNIXSuperTextp98

TheUNIXSuperTextp101

初版1992年
私が初めて手にしたのは東工大時代の1995年
情報科学科の友人が使っている本を見て感激
以来25年間使い続けています
いまだ2000ページすべてに目を通したことはありません

この本に書かれてあることは現在のubuntuでも実行できます
UNIXの仕組みをきちんと知ることができる本です
UNIXの仕組みを知れば知るほど面白くなり、感動することでしょう

UNIXはこの2冊あればこれから20年間使い続けられます
中古本は安く手に入るのでこの機会にぜひ手元に置いておきましょう

なお、UNIXまたはLINUXの参考書はたくさんあります
ぜひ自分が気に入った本を探してみてください

MacOS UNIXコマンド locate

$ locate pytest

pipでpytestをインストールした際、whichとwhereisでpytestを探しても見つけられなかった
pipでアンインストールしようとしたら

$ python -m pip uninstall pytest
Found existing installation: pytest 6.2.4
Uninstalling pytest-6.2.4:
  Would remove:
    /Users/sakuraisusumu/.local/bin/py.test
    /Users/sakuraisusumu/.local/bin/pytest
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/_pytest/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest-6.2.4.dist-info/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest/*
Proceed (Y/n)? 

となり、/Users/sakuraisusumu/.local/bin/pytest にあることがわかった
これはこれで解決だが、
UNIXコマンドに検索があったはず(使ったことがなかった)と思いだし
findとlocateでpytestを探してみた

findは使い物にならない
locateはあらかじめデータベースを作っておくので全検索に近い
ところがだ
/Users/sakuraisusumu/.local/bin/pytest
が引っかからない
なぜだ?

locateを調べる

GNU版locateはfindutilsに入っているので

$ brew install findutils

によりインストールできる
glocateでpytestを検索するも変わらない

locateがデータベースをつくる歳にすべての領域を範囲とするわけでないことが判明
パーミッションが700である自分のディレクトリィの下は検索しない
そうだ

ということでHOMEにあるディレクトリでパーミッションが700のものを755に変更して
データベースをつくりなおしたところ今度は
/Users/sakuraisusumu/.local/bin/pytest
が見つかった

おかげでlocateについてだいぶわかった

MacOS Pythonにpytest インストール

$ python -m pip install pytest

インストールできたものの

$ pytest
zsh: command not found: pytest

あれれ?

$ which pytest
$ whereis pytest

だめだ、見つからない!
そこで一旦アンインストールすることに

$ python -m pip uninstall pytest
Found existing installation: pytest 6.2.4
Uninstalling pytest-6.2.4:
  Would remove:
    /Users/sakuraisusumu/.local/bin/py.test
    /Users/sakuraisusumu/.local/bin/pytest
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/_pytest/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest-6.2.4.dist-info/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest/*
Proceed (Y/n)? 

ここでようやくpytestの場所が判明
さっそく.zprofileにPATHを通してOK

dateで元号(令和平成昭和大正明治)表示

date → gdate

MacOS標準シェルzshのdateコマンドよりも
GNU系のdateコマンド(gdateコマンド)の方が気に入っている

$ which date
/bin/date
$ date
2021年 8月25日 水曜日 03時28分37秒 JST

このdateコマンドは次のようなGNU系dateコマンド(gdateコマンド)の作文ができない

$ date -d'10year 6month 3day 5hour 23minute 10second ago'

そこでgdateが使えるようにする

$ brew install coreutils

これによりglsやgdateのようなGNU版コマンドが100以上インストールされる
コマンドリストは次により確認できる

$ brew ls coreutils

ただgdateの標準出力が気にくわない

$ gdate
火  9  7 12:41:56 JST 2021

これはdateの出力のいいのでそれにあわせる
ついでに元号表示も工夫してみる

シェルスクリプト

.zprofile
に以下を追加

alias date="gdate +'%Y年%m月%d日%A%T'"
# 元号表示
function gendate()
{
y=(gdate +'%Y')
r=((y+1-2019))
h=((y+1-1989))
s=((y+1-1926))
t=((y+1-1912))
m=((y+1-1868))
n=(gdate +'%Y年%m月%d日%A%T')
echo '令和'r'年 平成'h'年 昭和's'年 大正't'年 明治'm'年 '$n
}

これで

$ date
2021年09月07日火曜日12:46:08

MacPro:~
$ date -d'10year 6month 3day 5hour 23minute 10second ago'
2032年03月10日水曜日18:09:05

MacPro:~
$ gendate
令和3年 平成33年 昭和96年 大正110年 明治154年 2021年09月07日火曜日12:46:19

これでOK

2段組PDFからテキスト抽出するコマンド

Mac標準でPDFからテキストを抜き出す簡単な方法はありません
Mac標準のAutomatorや専用アプリを使う必要があります
さらに二段組みPDFからテキスト抽出となると難しくなります

unixの「pdftotext」コマンドを使う方法なら1行でOK
二段組みのPDFにも対応します
hoge.pdf
から
hoge.txt
を生成するコマンドです

pdftotext -raw hoge.pdf - | sed ':loop; N; $!b loop; ;s/\n//g' >> hoge.txt
pdftotextのインストール

brewでpopplerをインストールすればOK

brew install poppler

次のコマンドがすべてインストールされる

pdftotext: converts PDF to text
pdftops: converts PDF to PostScript
pdftoppm: converts PDF pages to netpbm (PPM/PGM/PBM) image files
pdftopng: converts PDF pages to PNG image files
pdftohtml: converts PDF to HTML
pdfinfo: extracts PDF metadata
pdfimages: extracts raw images from PDF files
pdffonts: lists fonts used in PDF files
pdfdetach: extracts attached files from PDF files
pdfseparate: PDF to PNG/JPEG/TIFF/PDF/PS/EPS/SVG
pdfunite: PDF page merger

https://poppler.freedesktop.org/

pdfgray・pdfmin

pdfgray *.pdf → *.gray.pdf

スクリーンショット 71
MacOSのプレビューにはPDFグレイ変換オプションがある
ファイル→書き出す→グレイトーン
スクリーンショット 65
ところがやってみるとちゃんとグレイ変換されない
なぜか一部だけカラーのまま
これでは使い物にならない

そこでgsによるshellスクリプトの出番
以下のスクリプトを.zprofileに以下を追記するだけ
これでバッチリグレイPDFに変換できる

# pdfgray *.pdf
function pdfgray()
{
    local cnt=0
    for i in @; do
        gs -sDEVICE=pdfwrite \
           -sColorConversionStrategy=Gray \
           -dProcessColorModel=/DeviceGray \
           -dCompatibilityLevel=1.4 \
           -dNOPAUSE -dQUIET -dBATCH \
           -sOutputFile={i%%.*}.gray.pdf ${i} &
        (( (cnt += 1) % 4 == 0 )) && wait
    done
    wait && return 0
}

コンソール上で
pdfgray hoge.pdf
とすれば
hoge.gray.pdf
が出来上がる

$ pdfgray hoge.pdf
[3] 38381
[3]  + done       gs -sDEVICE=pdfwrite -sColorConversionStrategy=Gray  -dCompatibilityLevel=1.4
$ ls
hoge.pdf  hoge.gray.pdf
pdfmin *.pdf → *.min.pdf

おなじくプレビューのファイルサイズを減らすもイマイチ

.zprofile
に以下を追記

# pdfmin *.pdf
function pdfmin()
{
    local cnt=0
    for i in @; do
        gs -sDEVICE=pdfwrite \
           -dCompatibilityLevel=1.4 \
           -dPDFSETTINGS=/ebook \
           -dNOPAUSE -dQUIET -dBATCH \
           -sOutputFile={i%%.*}.min.pdf ${i} &
        (( (cnt += 1) % 4 == 0 )) && wait
    done
    wait && return 0
}

コンソール上で
pdfmin hoge.pdf
とすれば
hoge.min.pdf
が出来上がる

$ pdfmin hoge.pdf
[3] 38523
[3]  + done       gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE 
$ ls
hoge.pdf  hoge.min.pdf

winzipインストール

Macを使っていて面倒なのが
WindowsユーザーにZipファイルを送ることです

ZIPANG.appがおすすめ
https://apps.apple.com/jp/app/zipang/id882655968?mt=12
私はこのアプリをツールバーに登録して使っています
フォルダをZipする際にアクセスが楽です
スクリーンショット 100

ZIPANG.appは暗号化もたやすくできるので完璧

そこで、暇つぶしがしたくなります
ターミナルで同じことができないのか?

 

windowsで文字化けしないzipを, macで作成

 

 

System Integrity Protection (SIP) を無効disableにする
csrutil disable
System Integrity Protection status : disabled

PHP7.4インストール

.zshrc

export PATH="/usr/local/opt/php@7.4/bin:PATH"
export PATH="/usr/local/opt/php@7.4/sbin:PATH"
export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.4/include"

.zprofile

alias brew="PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin brew"

curl -s -O https://pear.php.net/install-pear-nozlib.phar
とすると
warning: pear/pear dependency package “pear/Archive_Tar” downloaded version 1.4.9 is not the recommended version 1.4.4
エラー

php@7.4削除
brew uninstall php@7.4
rm -rf /usr/local/etc/php

=PEAR自身をアップグレード=
URL
https://aknot.hatenablog.jp/entry/20090716/1247726269

pear upgrade –force Archive_Tar
pear upgrade pear
pear version
PEAR Version: 1.10.12
PHP Version: 7.3.28
Zend Engine Version: 3.3.28

Running on: Darwin MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Mon Apr 12 20:57:45 PDT 2021; root:xnu-6153.141.28.1~1/RELEASE_X86_64 x86_64

history

  978  2021-05-09 14:47  brew install php@7.4
  979  2021-05-09 14:50  brew info php@7.4
  980  2021-05-09 15:53  brew info httpd
  981  2021-05-09 17:43  source .zprofile
  982  2021-05-09 17:43  source .zshrc
  983  2021-05-09 17:43  cd /tmp
  984  2021-05-09 18:01  curl -s -O https://pear.php.net/install-pear-nozlib.phar
  985  2021-05-09 18:01  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin 
  986  2021-05-09 18:04  pear upgrade --force Archive_Tar
  987  2021-05-09 18:04  pear upgrade pear
  988  2021-05-09 18:05  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
  989  2021-05-09 18:05  pear version
  990  2021-05-09 18:41  pecl download https://pecl.php.net/get/zip
  991  2021-05-09 18:41  cd /tmp
  992  2021-05-09 18:42  l
  993  2021-05-09 18:42  curl -s -O https://pear.php.net/install-pear-nozlib.phar
  994  2021-05-09 18:42  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
  995  2021-05-09 18:43  pecl download https://pecl.php.net/get/zip
  996  2021-05-09 18:43  brew doctor
  997  2021-05-09 18:43  cd ~
  998  2021-05-09 18:44  brew uninstall php@7.4
  999  2021-05-09 18:44  rm -rf /usr/local/etc/php
 1000  2021-05-09 18:44  brew install php@7.3
 1001  2021-05-09 18:47  cd /tmp
 1002  2021-05-09 18:47  curl -s -O https://pear.php.net/install-pear-nozlib.phar
 1003  2021-05-09 18:47  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
 1004  2021-05-09 18:48  pear upgrade --force Archive_Tar==1.4.4
 1005  2021-05-09 18:49  pear upgrade --force Archive_Tar@1.4.4
 1006  2021-05-09 18:49  pear upgrade --force Archive_Tar=1.4.4
 1007  2021-05-09 18:49  pecl download https://pecl.php.net/get/zip
 1008  2021-05-09 18:49  tar -xzvf zip
 1009  2021-05-09 18:50  sudo find /Library -name php.h
 1010  2021-05-09 18:51  cp /usr/bin/phpize /usr/local/bin/phpize
 1011  2021-05-09 18:52  cp /usr/bin/php-config /usr/local/bin/php-config
 1012  2021-05-09 18:53  cd zip-1.19.2
 1013  2021-05-09 18:53  phpize
 1014  2021-05-09 18:53  ./configure -with-php-config=/usr/local/bin/php-config
 1015  2021-05-09 18:54  make
 1016  2021-05-09 18:59  mkdir -p /usr/local/php/extensions
 1017  2021-05-09 18:59  sudo mkdir -p /usr/local/php/extensions
 1018  2021-05-09 18:59  cp modules/zip.so /usr/local/php/extensions/zip.so
 1019  2021-05-09 18:59  sudo cp modules/zip.so /usr/local/php/extensions/zip.so
 1020  2021-05-09 19:00  sudo apachectl restart
 1021  2021-05-09 19:01  cd ~
 1022  2021-05-09 19:01  ./winzip
 1023  2021-05-09 19:02  com
 1024  2021-05-09 19:03  cp winzip /usr/local/bin
 1025  2021-05-09 19:03  winzip
 1026  2021-05-09 19:03  l
 1027  2021-05-09 19:03  winzip history.txt
 1028  2021-05-09 19:04  l