-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAcrobat.txt
52 lines (48 loc) · 2.04 KB
/
Acrobat.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Acrobat
# Adobe Reader は COM オブジェクトが公開されていないので
# COM オートメーションをするには Acrobat を使う必要がある。
# 30日間の体験版でも可能。
# カレントディレクトリ内のPDFをテキストに変換する。
# pdftotext などより品質や成功度が格段に高いが Acrobat なのでとにかく重い。
# 警告やエラーのたびにダイアログボックスが出てきてOKを押さないと次に進まないので、
# キーを勝手に連打したり勝手にボタンを押してくれるツールを併用した方がいい。
# 終了時に Acrobat のプロセスが残っていたら kill すること。
ls -Filter *.pdf |% {
echo $_;
$a = New-Object -ComObject AcroExch.AVDoc;
$a.Open($_.Fullname, "strTitle") | Out-Null;
$p = $a.GetPDDoc();
$j = $p.GetJSObject();
$t = $j.GetType();
$t.InvokeMember(
"SaveAs",
[Reflection.BindingFlags]::InvokeMethod -bor [Reflection.BindingFlags]::Public -bor [Reflection.BindingFlags]::Instance,
$null,
$j,
@([IO.Path]::ChangeExtension($_.Fullname, "txt"), "com.adobe.acrobat.plain-text"));
$p.Close() | Out-Null;
$a.Close(1) | Out-Null; # Positive: Don't ask
}
# PDFファイルの結合
# なんと ファイル > 結合 > ファイルを単一のPDFに結合 だなんてものがありました。
# PowerShell からやったほうが結合速度が速いので残しておきます。
$a = New-Object -ComObject AcroExch.AVDoc;
$p = $null;
$isFirst = $true;
ls -Filter *.pdf | sort |% {
if($isFirst) {
$isFirst = $false;
$a.Open($_.Fullname, "strTitle") | Out-Null;
$p = $a.GetPDDoc();
} else {
$a2 = New-Object -ComObject AcroExch.AVDoc;
$a2.Open($_.Fullname, "strTitle") | Out-Null;
$p2 = $a2.GetPDDoc();
$p.InsertPages(($p.GetNumPages()-1), $p2, 0, $p2.GetNumPages(), 0) | Out-Null;
$p2.Close() | Out-Null;
$a2.Close(1) | Out-Null;
}
}
$p.Save(1, (Join-Path (pwd) "_COMBINED_.pdf")); # PDSaveFull = 1
$p.Close() | Out-Null;
$a.Close(1) | Out-Null;