【问题标题】:Extract OLE Object (pdf) from Access DB从 Access DB 中提取 OLE 对象 (pdf)
【发布时间】:2010-11-04 23:40:42
【问题描述】:

我们正在将几个旧的 Access 数据库升级/转换为 MS-SQL。其中许多数据库具有存储 PDF 文件的 OLE 对象字段。我正在寻找一种方法来提取这些文件并将它们存储在我们的 SQL 数据库中。我已经看到了类似的问题,这些问题回答了您如何处理图像文件(jpg、bmp、gif 等),但我还没有找到一种适用于 PDF 的方法。

【问题讨论】:

    标签: c# ms-access oledb


    【解决方案1】:

    我终于得到了一些代码来实现我想要它做的事情。诀窍是确定哪个部分是 OLE 标头并将其删除。这对我有用(基于找到的代码here

        public static byte[] StripOleHeader(byte[] fileData)
        {
            const string START_BLOCK = "%PDF-1.3";
            int startPos = -1;
    
            Encoding u8 = Encoding.UTF7;
            string strEncoding = u8.GetString(fileData);
    
            if (strEncoding.IndexOf(START_BLOCK) != -1)
            {
                startPos = strEncoding.IndexOf(START_BLOCK);
            }
    
            if (startPos == -1)
            {
                throw new Exception("Could not find PDF Header");
            }
    
            byte[] retByte = new byte[fileData.LongLength - startPos];
    
            Array.Copy(fileData, startPos, retByte, 0, fileData.LongLength - startPos);
    
            return retByte;
        }
    

    请注意,这只适用于 PDF 文件。

    【讨论】:

    • 因为这是一个较旧的答案,所以这段代码对我有用,我只需要将“%PDF-1.3”更新为“%PDF-1.7”,它就能够正确剥离标题.奇怪的是,搜索“%PDF”也能正常工作...
    【解决方案2】:

    OLEtoDisk

    "此版本将包含 OLE 对象的表的全部内容保存到磁盘。不需要作为 OLE 服务器的原始应用程序插入对象。支持所有 MS Office 文档、PDF、MS Photo 插入的所有图像Editor、MS Paint 和 Paint Shop Pro。还支持提取 PACKAGE 类,包括原始文件名。包含生成 OLE 字段的完整清单的函数,包括链接路径和文件名。使用结构化存储 API 读取字段的实际内容“

    http://lebans.com/oletodisk.htm

    【讨论】:

    • 我已经看到(并尝试过)了。它可以提取 PDF,但我正在尝试找到可以集成到我自己的 (c#) 代码中的东西。其中一些 Access DB 有 4 个以上的列来存储 PDF 文件,最终,我只想将文件复制到 SQL 服务器上的一个表中,其中包含所有其他数据。
    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多