2009-06-22 142 views
5

我們正在將幾個舊的Access數據庫升級/轉換爲MS-SQL。這些數據庫中的很多都具有存儲PDF文件的OLE對象字段。我正在尋找一種方法來提取這些文件並將它們存儲在我們的SQL數據庫中。我已經看到類似的問題,回答你可能如何使用圖像文件(jpg,bmp,gif等)來做到這一點,但我還沒有找到適用於PDF的方法。從Access數據庫中提取OLE對象(pdf)

回答

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文件。

1

OLEtoDisk

「這個版本來保存包含OLE對象到磁盤表的全部內容。不要求擔任OLE服務器插入對象的原始應用程序支持所有MS Office文檔,PDF,所有由MS Photo Editor,MS Paint和Paint Shop Pro插入的圖像也支持提取PACKAGE類,包括原始文件名,包含生成包括LINKED路徑和文件名在內的OLE字段的完整庫存的功能,使用結構化存儲API讀取實際內容「

http://lebans.com/oletodisk.htm

+0

我見過(並嘗試過)。它的工作,以拉出PDF文件,但我試圖找到我可以集成到我自己的(C#)代碼的東西。其中一些Access數據庫有4列以上存儲PDF文件,最終,我只想將文件複製到我們的SQL服務器上的所有其他數據表中。 – Nate 2009-06-23 12:56:46

+0

啊,你從來沒有說過你在尋找C#代碼。 – 2009-06-23 19:32:35