JavaScript
OSX
Automator

OSXでPDFから濁点付きのひらがなを普通にコピーする

Mac OSXでは,PDFから濁音付きの日本語をコピーしてどこかに貼り付けようとすると,変な感じになります。
スクリーンショット 2019-01-12 15.29.18.png
これは,OSXでは平仮名の濁音を「◯+゛」の「2字」(結合文字列)で表現しようとする傾向があるため,なんじゃないかと思っています。
 参考文献→文字コード地獄秘話 第2話:聖母マリアよ、二人を何故別々に? - ALBERT Engineer Blog

もっとも,JavaScriptではこうした結合文字列を等価性に基づく合成済み文字(例:て+゛→で)に正規化するString.normalize(form)が実装されています。
"て゛".normalize("NFC") という感じにすれば「で」になります。(「という感じ」というのは,この例は結合文字列ではなく単なる2文字なので,コピペしても動かない故。)
 参考文献→String.prototype.normalize() - MDN web docs

そんでもって,Macでクリップボードやシステムサービス的なものを操作しようと思ったら,古くからAppleScriptが使われていたのですが,最近はJavaScriptを使うこともできます。
つまり,JavaScriptの標準機能を使って,OSから容易に呼び出せる,結合文字列をどうにかするサービスを作ることができます。たとえばAutomator+JavaScriptで「クイックアクション」の「サービス」にしてシステム環境設定でキーボードショートカットを割り当てるとこんな感じに。
スクリーンショット 2019-01-12 15.47.42.png

たとえばこんなコード

スクリーンショット 2019-01-12 15.51.48.png
Automatorで【新規作成→クイックアクション】。
JavaScriptを実行→クリップボードにコピー。
JavaScriptの内容はこんな感じ。

function run(input, parameters) {   
    // Your script goes here
    return input.toString().normalize("NFC");
}

おまけ:クリップボード内を操作する。

上記はAutomatorのワークフローとして作りましたが,たとえばクリップボード内に置いたまま操作することも考えられます。
私の場合,他にも,半角を全角にしたりとか(裁判所への提出文書は全角にする慣行なので…)その他諸々の処理を加えたいので,こんな感じのスクリプトを作っています。

法曹用正規化コピー.scpt
var app = Application.currentApplication();
app.includeStandardAdditions = true;

var cb = app.theClipboard();

cb = cb.split("\r").join("\n"); // \rを普通の改行に
cb = cb.normalize("NFC"); //合成文字を単文字化
cb = cb.replace(/[^\x01-\x7E] [^\x01-\x7E]/g, function(s) { //全角文字間の半角スペース削除
    return s.split(" ").join("");
});
cb = cb.replace(" "," "); //残った半角スペースを全角化
cb = cb.replace(/[A-Za-z0-9\(\)]/g, function(s) { //半角文字を全角化
    return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
});

app.setTheClipboardTo(cb);

使い方:PDF等から任意の文字列をコピーし,上記スクリプトを実行してから貼り付ける。

AppleScript的な感じでJavaScriptでクリップボードを扱う場合,まずStandardAdditionsを呼び出せるようにする必要がある点に注意。
 参考文献→JavaScriptによるMacの自動操作入門の情報まとめ - 大石製作ブログ
スクリプトエディタ.appで上記スクリプトを作って,スクリプトメニューから使用。
 →インストール方法委細 AppleScript ことはじめ - Script Factory

これでてきとーな判決文からコピペして裁判所提出文書作成が容易に!