gpt4 book ai didi

c# - 从 OneNote 中保存嵌入对象

转载 作者:行者123 更新时间:2023-11-30 17:53:41 26 4
gpt4 key购买 nike

我的目标是以编程方式从 OneNote 笔记本中提取嵌入式文档。嵌入的文档可能是 Office 文档、PDF 和其他任意文件。我在获取内联图像的 Base64 字符串时没有任何困难,但在获取其他文件类型的 Base64 字符串时遇到问题。

我正在使用 VS 2008 C#、OneNote 2007、Windows XP SP3。

我正在使用示例 .ONE 文件,其中包含少量文本、一个 PDF 文件和一个内联图像。我能够识别包含页面的 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 session 到另一个 session 的 ID 可能不同。在我的测试中,我在 Debug模式下手动查看 XML 以确保 ID 正确。

这是写入 strXML2 的 XML 片段。

内嵌图片

<![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)

嵌入的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}\">

谢谢。

最佳答案

GetBinaryPageContent API 只能用于检索图像和墨迹数据。对于嵌入文件,pathCache 属性指向存储在 OneNote 缓存文件夹中的文件。您可以简单地阅读该文件。

关于c# - 从 OneNote 中保存嵌入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17033575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com