2013-06-10 4 views
3

내 목표는 프로그래밍 방식으로 OneNote 전자 필기장에서 포함 된 문서를 추출하는 것입니다. 포함 된 문서는 Office 문서, PDF 및 기타 임의 파일 일 가능성이 큽니다. 인라인 이미지에 Base64 문자열을 가져 오는 데 어려움이 없지만 다른 파일 형식의 Base64 문자열을 가져 오는 데 문제가 있습니다.OneNote에서 포함 개체 저장

VS 2008 C#, OneNote 2007, Windows XP SP3을 사용하고 있습니다.

소량의 텍스트, PDF 파일 및 인라인 이미지로 구성된 샘플 .ONE 파일을 사용하고 있습니다. 포함 페이지의 ID와 PDF의 ID를 확인할 수 있습니다. 다음 예제에 ID를 하드 코딩했습니다.

 // ID of the Application 
     string strID; 
     Microsoft.Office.Interop.OneNote.Application onApplication = new Microsoft.Office.Interop.OneNote.Application(); 
     onApplication.OpenHierarchy(@"D:\Projects\OneNote\test.one", 
      System.String.Empty, out strID, Microsoft.Office.Interop.OneNote.CreateFileType.cftSection); 


     string strXML1; 
     onApplication.GetPageContent("{460ABC12-855F-09E4-3724-85E8DE17BD57}{1}{B0}", out strXML1, PageInfo.piAll); 

     // Get page reference 
     string strXML2; 
     onApplication.GetPageContent("{4AA5B6DF-1C90-0B3D-3FFD-687B0AF4A632}{1}{B0}", out strXML2, PageInfo.piAll); 

     //Get Hyperlink to embedded object 
     string strHyperlink; 
     onApplication.GetHyperlinkToObject("{4AA5B6DF-1C90-0B3D-3FFD-687B0AF4A632}{1}{B0}", "{23A17F23-F743-0C9B-082A-BC6BD5D9CA6E}{13}{B0}", out strHyperlink); 

     //Condition to ensure that the ObjectID is good. 
     if ((strHyperlink != null) && (strHyperlink != "")) 
     { 
      //Get Base64 string. 
      string strBase64; 
      onApplication.GetBinaryPageContent("{4AA5B6DF-1C90-0B3D-3FFD-687B0AF4A632}{1}{B0}", "{23A17F23-F743-0C9B-082A-BC6BD5D9CA6E}{13}{B0}", out strBase64); 
     } 

PDF 또는 인라인 이미지를 참조 할 때 응용 프로그램이 좋은 하이퍼 링크를 반환합니다. 응용 프로그램은 인라인 이미지에 대해 좋은 Base64 문자열을 반환합니다. 그러나 응용 프로그램에서 PDF에 대한 오류 0x8004200f The binary object does not exist.을 반환합니다. 내포 된 Word 문서가 포함 된 버전을 사용해도 마찬가지입니다.

PDF 용 Base64 문자열은 어떻게 얻을 수 있습니까? http://onom.codeplex.com/을 사용하고 있습니다.하지만 해결책을 찾지 못했습니다.

그런데 하나의 OneNote 세션에서 다른 세션으로 ID가 다를 수 있습니다. 내 테스트에서는 ID가 디버그 모드에서 XML을 수동으로 보는 것이 올바른지 확인합니다.

다음은 strXML2에 쓰여진 XML 스 니펫입니다.

<![CDATA[4\r\n‘4]]> 
</one:OCRText> 
<one:OCRToken startPos=\"0\" region=\"0\" line=\"0\" x=\"564.631591796875\" y=\"250.1052703857422\" width=\"6.063148498535156\" height=\"5.30526351928711\"/> 
<one:OCRToken startPos=\"3\" region=\"1\" line=\"1\" x=\"684.3789672851562\" y=\"462.3157653808594\" width=\"5.305229187011718\" height=\"6.821067810058594\"/> 
</one:OCRData> 
</one:Image> 
<one:InsertedFile pathCache=\"C:\\TEST\\D62228.pdf\" pathSource=\"C:\\C++_Neural_Networks_And_Fuzzy_Logic.pdf\" preferredName=\"C++_Neural_Networks_And_Fuzzy_Logic.pdf\" lastModifiedTime=\"2013-06-10T18:39:43.000Z\" objectID=\"{23A17F23-F743-0C9B-082A-BC6BD5D9CA6E}{13}{B0}\"> 

The embedded PDF

<![CDATA[Attachment_Test_01]]> 
</one:T> 
</one:OE> 
</one:Title> 
<one:Image format=\"jpg\" originalPageNumber=\"0\" lastModifiedTime=\"2013-06-10T18:39:46.000Z\" objectID=\"{1A32E30F-091E-4F03-8147-D00D0D16C6FD}{20}{B0}\"> 
<one:Position x=\"90.0\" y=\"104.400001525879\" z=\"3\"/> 
<one:Size width=\"767.9999389648437\" height=\"576.0\"/> 
<one:Data>/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJ (SNIP) 

The inline image

감사합니다.

답변

1

GetBinaryPageContent API는 이미지 및 잉크 데이터를 검색하는 데에만 사용할 수 있습니다. 포함 된 파일의 경우 pathCache 특성은 OneNote 캐시 폴더에 저장된 파일을 가리 킵니다. 그 파일을 읽을 수 있습니다.