Сохранить встроенный объект из OneNote

Моя цель — программно извлечь встроенные документы из записной книжки OneNote. Встроенные документы, скорее всего, будут документами Office, PDF-файлами и другими произвольными файлами. У меня нет проблем с получением строки Base64 для встроенных изображений, но у меня есть проблема с получением строки Base64 для других типов файлов.

Я использую VS 2008 С#, OneNote 2007, Windows XP SP3.

Я использую образец файла .ONE, который состоит из небольшого количества текста, файла PDF и одного встроенного изображения. Я могу определить идентификатор содержащей страницы и идентификатор PDF. Я жестко закодировал идентификаторы в следующем примере.

        // 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 для встроенного изображения. Однако приложение возвращает ошибку 0x8004200f The binary object does not exist. для PDF. То же самое верно, если я попробую версию, содержащую встроенный документ Word.

Как я могу получить строку Base64 для PDF? Я открыт для использования http://onom.codeplex.com/, но я не нашел там решения.

Кстати, я знаю, что идентификаторы могут не совпадать из одного сеанса OneNote в другой. В своих тестах я проверяю правильность идентификаторов вручную, просматривая XML в режиме отладки.

Вот фрагмент XML, записанный в strXML2.

The inline image

<![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 embedded PDF

<![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}\">

Спасибо.


person Jacob Quisenberry    schedule 10.06.2013    source источник


Ответы (1)


GetBinaryPageContent API можно использовать только для получения данных изображения и рукописного ввода. Для встроенных файлов атрибут pathCache указывает на файл, хранящийся в папке кеша OneNote. Вы можете просто прочитать этот файл.

person Omer Atay - MSFT    schedule 22.02.2014