プレビューの見開き表示の際に、右とじの本を正しく表示する方法がありますか?
Adobeを使っては可能なのですが、プレビューをデフォルトソフトとして使いたいので、可能な方法があれば教えて欲しい。
MacBook Air (M2, 2022)
Adobeを使っては可能なのですが、プレビューをデフォルトソフトとして使いたいので、可能な方法があれば教えて欲しい。
MacBook Air (M2, 2022)
PDF 書類は右開き/左開きの情報を持つことができるようですが Preview では無視されるようです。なので、設定とかでは無理だと思います。Adobe Reader を使うのが簡単で良さそうですよ。
どうしても Preview でということなら、JavaScript でページを並べ替えて新規に PDF 書類を書き出す手があります。(無理矢理感がありますが...)
ページの並べ替えはこんな感じ (最初のページ (0) は表紙と考えて固定)
前: 0 1 2 3 4
後: 0 2 1 4 3
作り方
使い方
※ オリジナルは捨てずにとっておいてください。
コード
'use strict';
ObjC.import('Cocoa');
ObjC.import('PDFKit');
var App = Application.currentApplication(); App.includeStandardAdditions = true;
function R2L(ary) {
function func(a, size) {
const splitted = a.reduce((p, _, i) => i % size ? p : [...p, a.slice(i, i + size).reverse()], []);
return splitted.flat();
}
const new_ary = ary.length > 1 ? [0].concat(func(ary.slice(1), 2)) : [0];
return new_ary;
}
function run() {
const args = App.chooseFile({
withPrompt: 'PDF ファイルを選択してください (複数選択可)',
ofType: 'com.adobe.pdf',
multipleSelectionsAllowed: true,
});
for (const f of args) {
const fpath = f.toString();
const pdf = $.PDFDocument.alloc.init;
const furl = $.NSURL.fileURLWithPath(fpath);
const doc = $.PDFDocument.alloc.initWithURL(furl);
const ii = R2L([...Array(Number(doc.pageCount))].map((_, i) => i));
for (let n = 0; n < doc.pageCount; n++) {
pdf.insertPageAtIndex(doc.pageAtIndex(ii[n]), n);
}
const new_fpath = $(fpath).stringByDeletingPathExtension.stringByAppendingString('_converted.pdf').js;
pdf.writeToFile(new_fpath);
}
App.displayDialog('処理が完了しました', {
buttons: ['OK'], defaultButton: 'OK', withIcon: 1
});
}
# 投稿内容を若干変更しました
プレビューの見開き表示の際に、右とじの本を正しく表示する方法がありますか?