2014-04-01 3 views
0

검색 시간이 너무 길어졌습니다. 나는 놀라운 것을 발견 한 엑셀 vba를 위해 아무 것도 생각해 내지 못했다. 나는 포트를 시도했으나 행운이 없다는 것을 발견했다. 필자는 pdf 텍스트를 시트로 가져 와서 검색해 보았습니다. 그러나 이것은 내가 실제로 pdf를 분명하게 강조하는 것을 허락하지 않을 것입니다.Excel VBA를 사용하여 PDF의 텍스트를 검색하고 강조 표시하는 방법

내가하려는 것은 PDF 문서를 열고 키워드를 검색 한 다음 해당 단어를 강조 표시하고 저장하는 것입니다. 나는 어도비 애크로뱃 X를 가지고있다. 그래서 나는 엑셀 vba로 이것을 할 수있는 일종의 API가 있어야만한다. 나는 iText와 같은 일종의 오픈 소스 라이브러리를 사용해야 할 것이다. 나는하지 않을 것을 원합니다.

내가 본 VGA 중 일부는 문자로 문자를 찾은 다음 그 주위에 직사각형을 그리고 자바 스크립트로 채색하는 것을 포함하고 있으며 불필요하게 복잡해 보였습니다 (어쨌든 작동하도록 포트를 얻을 수 없었 음).

CLARIFICATION : Excel에서 텍스트를 강조 표시하고 싶지 않습니다. PDF에서 강조 표시하고 싶습니다. 나는 텍스트를 검색하고 PDF에서 PDF를 볼 수 있도록 Excel로만 읽고 있는데, 다른 방법을 알지 못하므로 참조하십시오.

추 신 : 이미지 pdfs에 OCR을 사용할 수있게되면 좋을 것입니다.

답변

0

Excel에서 읽을 수있는 형식의 pdf 파일을 열 수 없습니다.

당신이하려고하는 일을하기 위해서는 Excel에서 읽을 수있는 형식 (예 : xls 또는 txt)으로 문서를 변환하는 일종의 PDF 변환기가 필요합니다. 그런 다음 일반 .Find 및 .Format 메서드를 사용하여 작업을 완료 할 수 있습니다.

http://www.freepdfconvert.com/‎ 
http://www.pdf995.com/download.html 
http://www.cutepdf.com/ 
http://www.primopdf.com/ 
http://sourceforge.net/projects/pdfcreat... 

있습니다 (아마 당신은 추가 연구를 할 것이다, 그래서 난이 중 하나를 사용하지 않은 참고하지만)

여기에, 그러나, 나는 빠른 구글 검색에서 발견 된 일부 무료 컨버터입니다 당신이 그들을 연 형식으로 저장하는 것이 불가능할 가능성이 높습니다. 그것은 정말로 변환기가 얼마나 좋은지에 달려 있습니다. 궁극적으로, 나는 Excel이 당신이이 작업을 위해 사용하고자하는 도구라고 생각하지 않습니다.

+0

감사 하르트을 즐길하지만 난 분명 미안하지 적이 있습니다. Excel에서 텍스트를 강조 표시하고 싶지 않습니다. PDF에서 강조 표시하고 싶습니다. 나는 텍스트를 검색하고 PDF에서 그것을 볼 수있는 Excel로만 읽고 있는데, 다른 방법을 알지 못하기 때문에. – rex

+0

나는 당신이하려는 것을 이해합니다. 나는 당신이 이것을 달성 할 수있는 유일한 방법은 엑셀로 변환하여 엑셀에서 변경 한 다음 PDF로 인쇄하는 것입니다. 최신 버전의 Excel에서는 PDF로 인쇄 할 수 있지만 PDF 문서는 편집 할 수 없습니다. 원하는 것을하기 위해서는 Adobe Acrobat Developer 같은 고급 이미지 도구를 사용해야합니다. 그리고 심지어 어떤 스크립팅 옵션이 제공 될지 잘 모르겠습니다. – DanK

+0

감사합니다.하지만 Excel로 변환하는 것은 나에게 옵션이 아니며 텍스트 만 사용하는 것이 아니라 기술적 인 그림이기도합니다. – rex

0

Acrobat을 원격 제어 할 수있는 몇 가지 방법이 있습니다. Mac에서는 AppleScript를 통해 이루어지며 Windows에서는 VB/VBS를 통해 이루어집니다 (올바르게 기억하는 경우). 어쨌든 Acrobat JavaScript를 실행할 수 있습니다.

Adobe 웹 사이트에서 Acrobat SDK를 다운로드하고 Documentation 폴더를 살펴보십시오.

좋은 경험은 아니지만이 방법이 적합합니다. 문서의 모든 페이지를 반복하면서 실제 페이지의 모든 "단어"를 반복하고, 해당 페이지의 경계 상자 좌표를 읽습니다. 발견 된 단어 ("quads"라고도 함)는이 "단어"가 함께 속하는지 여부를 파악하기 위해 다른 "단어"와 비교할 수 있습니다. 마지막으로 읽은 사각형을 좌표로 사용하여 강조 주석을 만듭니다.

PDF 문서에서 단어를 찾는 또 다른 방법은 교정 도구의 마크 업 부분을 사용하는 것입니다 (수정 된 문서를 제거하고 다시 기록하기 전에 수정 프로세스를 중지해야합니다). 그런 다음 모든 교정 유형 주석을 열거하는 Acrobat JavaScript를 실행하고 유사한 Highlight 주석으로 대체합니다.

+0

Thanks @Max Wyss, Acrobat Reader의 내장 검색 도구를 공개하는 것이 가능하지 않습니까? – rex

+0

IAC – rex

+0

을 통해이 작업을 수행 할 수 있어야하는 것처럼 보입니다. 나는 그렇게 생각합니다. 따라야 할 방법입니다. 행운을 빕니다! –

0

좋아, 이미 가지고있는 코드와 js annot으로 약간 놀았습니다. 영구 단어를 표시하거나 강조 표시 할 수있는 VBScript가 있습니다.하나의 단어로만 표시되도록 쉽게 변경할 수 있습니다. AcroJS 도움말 파일에서 마커 복장에 대한 몇 가지 옵션을 찾을 수 있습니다.

VBS 코드는 VBA 코드와 비슷합니다. 따라서 직접 IDE로 복사 할 수 있습니다.

'// Save this as xxx.vbs and start with Double Click 
'// Acrobat must be opend before with an active document!! -otherwise error- 

wordTF = "Reinhard" '//word to find 
pdfText = "" 

set WshShell = CreateObject ("Wscript.Shell") 
WshShell.AppActivate("Adobe Acrobat") 
WScript.Sleep 500 

'// get the active Document 
Set AcroApp = CreateObject("AcroExch.App") 
Set AVDoc = AcroApp.GetActiveDoc 
Set PDDoc = AVDoc.GetPDDoc 
Set AForm = CreateObject("AFormAut.App") 'connect to Form API for later use 

maxPages = PdDoc.GetNumPages 
for p = 0 to maxPages - 1 '// start the page loop 
    Set PdfPage = PDDoc.AcquirePage(p) '// p = Pagenumber (zero based) 
    Set PageHL = CreateObject("AcroExch.HiliteList") '// created to get the page text 
    PageHLRes = PageHL.Add(0,9000) '<<--SET in FILE! (Start,END[9000=All]) 
    Set PageSel = PdfPage.CreatePageHilite(PageHL) 

    for i = 0 to PageSel.Getnumtext - 1 '// start the word loop on current page 
     word = PageSel.getText(i)   '// get one word 
     pdfText = pdfText & word   '// gather words on page 

     if instr(word, wordTF) then  '// used instr because the "word" you may get as "word " 
      msgbox("add:""" &word &"""")    Set wordToHl = CreateObject("AcroExch.HiliteList") '// created to get the word on list 
      wordToHl.Add i, 1 'Hilite the word Reinhard 
      Set wordHl = PdfPage.CreateWordHilite(wordToHl) 
      Set rect = wordHl.GetBoundingRect 
      msgbox("left:" &rect.Left &" bot:" &rect.bottom &" right:"&rect.Right &" top:" &rect.Top) 
      AVDoc.SetTextSelection(wordHl) '// highlight the word (not really needed) 
      AVDoc.ShowTextSelect()   '// show highlighted text (not really needed) 
       '// write and execute js to mark permanent (to lazy to translate to jso) 
      ex = " // set annot for text selection " &vbLf _ 
       & "var sqannot = this.addAnnot({type: ""Square"", page: 1, " &vbLf _ 
       & "rect: [" &rect.left &", "& rect.top &", " &rect.right &", " &rect.bottom &"], " &vbLf _ 
       & "name: ""p" &p &"i" &i &"""});" 
      msgbox(ex) 
      AForm.Fields.ExecuteThisJavaScript ex 
     end if '// word found 
    Next '// get next word 
    msgBox(pdfText) 
    pdfText = "" 
next '// get next page 
msgbox("Done!") 
관련 문제