我们正在将几个旧的 Access 数据库升级/转换为 MS-SQL。其中许多数据库具有存储 PDF 文件的 OLE 对象字段。我正在寻找一种方法来提取这些文件并将它们存储在我们的 SQL 数据库中。我已经看到类似的问题回答了您如何使用图像文件(jpg、bmp、gif 等)执行此操作,但我还没有找到适用于 PDF 的方法。
问问题
8886 次
2 回答
4
我终于得到了一些代码来做我想做的事情。诀窍是确定哪个部分是 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 文件。
于 2009-06-23T18:34:21.617 回答
1
OLEtoDisk
“此版本将包含 OLE 对象的表的全部内容保存到磁盘。不需要用作 OLE 服务器的原始应用程序来插入对象。支持所有 MS Office 文档、PDF、MS 照片编辑器插入的所有图像、MS Paint 和 Paint Shop Pro。还支持提取 PACKAGE 类,包括原始文件名。包含生成 OLE 字段的完整清单的功能,包括链接路径和文件名。使用结构化存储 API 读取字段的实际内容“
于 2009-06-23T01:10:21.743 回答