ちょっと変わったマニアな作品が集結

PDFファイルの文書の中から、特定の文字列を検索し、その文字が含まれているページだけを抽出して別のPDFファイルを作る方法を教えてください。
検索結果の件数は表示されるのですが、その頁を抽出(あるいは、文字を含まない頁を削除)する方法がわかりません。
元のページ数が多いので、手作業での不要ページ削除が難しく大変困っています。
(win7でAdobe Acrobat 11 Standardを使用しています) 
どうかよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

検索結果から文字列のあるページをクリックして表示しておけば、その


ページ番号などが分かります。それでページのみでの抽出をすることは
可能だと思いますよ。
https://helpx.adobe.com/jp/acrobat/kb/3320.html
http://www.itmedia.co.jp/bizid/articles/1304/01/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。検索結果、文字列を含むページが500ページほどあり、しかも連続していないので、ページ番号で指定するのがなかなか大変なのですが…またいろいろ試してみたいと思います。

お礼日時:2015/05/05 20:30

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBからPDFファイルの埋め込みテキストを検索する方法

VBで文書を検索できるシステムを作っています。
通常検索では、テキストボックスに入力した文字列と一致するものをデータベースに登録した文書名から探してきてMSHFlexGridコントロール上に表示するようにしています。
今回は、追加検索として、指定したフォルダの中にあるPDFファイルやワードファイルなどの文書中の文字から一致するものを探して表示する機能を作りたいと考えています。
この様な機能はどの様に作れば良いのでしょうか?
色々とサイトを探してみたのですが、該当するものを見つけることが出来ませんでした。
よろしくお願いします。

Aベストアンサー

こんにちは。

[xdoc2txt]
PDF,WORD,EXCEL,一太郎などの各種バイナリ文書からテキストを抽出
http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html

VB から xdoc2txt.exe を起動して抽出テキストをリダイレクトする。
または、ActiveX 版 xdoc2txt.ocx を使うとか。

一から VB でとなると恐ろしく面倒で、難しいですよ。

まず速度面の問題があるでしょうし、ファイルフォーマットの解析が
必要になったり。。

Q複数あるPDFファイルのページ数を知りたい

当方は1,000個以上のPDFファイルを所有しています。それぞれのPDFファイルのページ数を知りたいのですが、このページ数を簡単に検索(一括表示)できる無料ツールなどを知っている方は是非、教えてください。

Aベストアンサー

初めまして。
私も同じようなことをしようと思い、色々探していました。

それで下記のサイトにある「ComPDF」を使ってみたらいかがでしょうか。
シェアウェアですが、ページ数を調べるのでしたら大丈夫でしたよ。
私が調べたアプリの中では精度がかなりいいです。

http://www.ne.jp/asahi/foresth/home/

Qpdfの中を検索したい

win7を使っていますがpdfファイルの中身までは検索してくれません
pdfの中の文字を検索するのにはどうすればいいですか?

Aベストアンサー

通常のPDFファイルは、Adobe Readerの検索機能を使えば検索が可能です。

「文字検索機能はありますか (Adobe Reader X)」
http://kb2.adobe.com/jp/cps/331/3313.html

画像のPDFファイルの場合は、OCRソフトを使ってテキスト認識を可能に指せる必
要があります。

「PDFのOCRテキスト認識」
http://m-school.biz/dev/acrobat-pdf/031-ocr-text-scan.htm

「PDFファイルを開いて、PDFファイル内で文字列の検索を行う」
http://cweb.canon.jp/e-support/products/canoscan/reference.html

QエクセルVBAで、PDFファイルを開きたい

セルに入力した値のブック(xls)を開く場合、
以下となりますが、↓

Sub セルに入力したブック名のブックを開く()
ブック名 = Cells(1, 2) 'B1セルの値を取り出す
Workbooks.Open Filename:=ブック名 & ".xls" '指定されたブックを開く
End Sub


これでPDFファイルを開きたいです。
記述をどうしたらよいでしょうか。
目的はPDFファイルの検索/照会をxlsにてしたいのです。
お手数ですがお願いいたします。

Aベストアンサー

案1
ハイパーリンクにしてしまう。

案2
PDFファイルへのフルパスが、B列に記述してある
拡張子PDFへの関連付けがAcrobat Reader にしてある
と仮定して
ワークシートのイベントに

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(Target.Value, "pdf") > 0 Then
  Call Shell("explorer.exe " & Target.Value)
  Cancel = True '編集モードキャンセル
End If
End Sub
とか?

PDFファイルが一箇所にまとまっているのなら
標準モジュールに
Sub test2()
Dim strFilePath As String
strFilePath = _
  Application.GetOpenFilename _
  ("PDFファイル,*.pdf", MultiSelect:=False)

If strFilePath = "false" Then
 Exit Sub
End If

Call Shell("explorer.exe " & strFilePath)

End Sub
でも?
ということかな?

案1
ハイパーリンクにしてしまう。

案2
PDFファイルへのフルパスが、B列に記述してある
拡張子PDFへの関連付けがAcrobat Reader にしてある
と仮定して
ワークシートのイベントに

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(Target.Value, "pdf") > 0 Then
  Call Shell("explorer.exe " & Target.Value)
  Cancel = True '編集モードキャンセル
End If
End Sub
とか?

PDFファイルが一箇所にまとまっているのなら
標準モジュー...続きを読む

QPDFファイルを開き、印刷し、閉じるマクロ

Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。

Dim AA, AAA

AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)

にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。

Aベストアンサー

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional prin...続きを読む

QPDFを全文検索するプログラム

Acrobatの提供するJavascriptオブジェクトやAPIを使用して、PDFを対象とした
全文検索ツールを作りたいのですが、書籍等も少なく、なかなか有効な情報に
出会えません。どなたか実際にそのような開発に携わったことがあれば、
その手法に関する情報をご提供頂けないでしょうか?
なお、市販のPDF全文検索ソフトもいろいろあるのですが、ライセンス
フリーなものが今回必要となり、自作を検討しております。
用途はPDFをCD-Rに焼き、そのCD-R内にCD-R内全文検索プログラムを
組み込むというものです。
よろしくお願い致します。

Aベストアンサー

私は経験も知識も無いものですが、
A.PDFファイルを直接読んで検索する。
B.人間が操作して、下記RTFファイルまたはテキストファイルに抽出して、検索する。の2つが考えられると思います。
お手許にPDFファイルのファイルフォーマットは既にあるのでしょうか。
その後Adobe社にこの形式のファイルを読み検索するアプリを作成する(その後貴社でソフトを販売するのですか?それを明確に伝えて)のに認諾や契約や有償が必要なのか確認されましたか。
(1)AcrobatファイルはRTF形式にテキスト部分のみ落とせるとのことです。
http://www.keiyu.com/doc/pdftxt.htm
http://search.luky.org/linux-users.8/msg00983.html
http://www.pdf-seek.com/jyouhou/index.html
http://pc-training.hp.infoseek.co.jp/pdf.html
http://www.y-adagio.com/public/standards/tr_pdf/pdfmain.htm
(この中に「著作権認諾」のことも載っている。)
相当調べられたふうですが、「PDF」「テキスト」「ファイル形式」「ファイルフォーマット」などでWEB検索してみてください。
(2)この落としたファイルを対象に、自作の検索プログラムを作り、走らせる。
(3)(1)はAcrobatの「操作」ですから、その通り操作でやると
オフラインバッチ処理的になり、1ステップ入ってしまいます。
それで良いのでしょうか。もし操作を自動的にするマクロのようなものが
あればAと近くなり、良いのでしょうが。
(3)バッチ的になって良いなら、(1)を操作でさせて、RTFファイルを読みこみ、扱う方法を習得すれば、検索プログラムが出来ると思います。
検索は「JavascriptオブジェクトやAPI」にそのものズバリはあるはずは
無いと思います。WINやJAVAやその他で検索エンジンまでAPIになっている例があるのでしょうか。
すなわち言いたいことは、RTFの形式のフォーマット詳細を調べるとかして勉強し、処理言語を決めて扱える事ができるようになることがターゲットでしょう。
(4)あと文章検索について色々なアルゴリズムがあるようですので、それを調べて勉強し、その処理言語で使用できるようになることでしょう。クラスモジュールのようなものが販売されておれば、使えると早いでしょうが。
経験のないものがあれこれいっておりますが、目指し進む方向がちょっと
気になりましたので。得るものがあれば幸甚です。

私は経験も知識も無いものですが、
A.PDFファイルを直接読んで検索する。
B.人間が操作して、下記RTFファイルまたはテキストファイルに抽出して、検索する。の2つが考えられると思います。
お手許にPDFファイルのファイルフォーマットは既にあるのでしょうか。
その後Adobe社にこの形式のファイルを読み検索するアプリを作成する(その後貴社でソフトを販売するのですか?それを明確に伝えて)のに認諾や契約や有償が必要なのか確認されましたか。
(1)AcrobatファイルはRTF形式にテ...続きを読む

QVBAでAcrobatを操作してテキスト抽出で詰まっています。

ExcelVBAからAcrobatを立ち上げPDFからテキストと、その座標情報を取得したいと考えております。

http://pdf-file.jugem.jp/
を参考にしてAcrobatを立ち上げJavaでテキストを抽出することはできましたが、その座標情報を得られず困っております。

Dim test As Variant
test = jso.getPageNthWordQuads(0, 1)

でtestには8つの値が配列で入るはずなのですがtest(0)にしか値は入っていません。
この値は妥当な値を得られているのですが、test(1)からは参照できません。

いろいろ調べて、VBAのvariantはVBのそれとは違う・・・のが原因ではというところで行き詰りここに書き込んでみることにしました。

VBAで同様なことをされている方がいましたらぜひよろしくお願いします。

Aベストアンサー

こんにちは。

>VBAで同様なことをされている方がいましたらぜひよろしくお願いします。
ふつうは、pdf に、テキストが入っているとは限らないし、プロテクトが掛かっていたら出来ませんので、印刷プロテクトが入っていないものなら、私は、OCR で取ってしまいます。それに、小さい規模なら、テキストが入っていれば、テキスト・コピーが利きます。

Acrobat 自体は分かりませんが、

test = jso.getPageNthWordQuads(0, 1)

もし、もともとが、配列があるとするなら、インデックス(添え字)を入れなければ、そのまま入るはずです。ただし、変数 test は、Variant 型で、配列の宣言をしないことが条件です。

そういうことではなくて、それぞれを取りたいなら、

jso.getPageNthWordQuads が、8つがどのような構造をしているかは分かりませんが、

座標は、二次限配列なのですから、

getPageNthWordQuads ([nPage],[nWord])

そのそれぞれのインデックスに、たぶん、0か、1 から、上限まで数字を入れれば出てくるはずです。

こんにちは。

>VBAで同様なことをされている方がいましたらぜひよろしくお願いします。
ふつうは、pdf に、テキストが入っているとは限らないし、プロテクトが掛かっていたら出来ませんので、印刷プロテクトが入っていないものなら、私は、OCR で取ってしまいます。それに、小さい規模なら、テキストが入っていれば、テキスト・コピーが利きます。

Acrobat 自体は分かりませんが、

test = jso.getPageNthWordQuads(0, 1)

もし、もともとが、配列があるとするなら、インデックス(添え字)を入れなけ...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング