質問

いくつかの古いAccessデータベースをMS-SQLにアップグレード/変換しています。これらのデータベースの多くには、PDFファイルを保存するOLEオブジェクトフィールドがあります。これらのファイルを抽出し、SQLデータベースに保存する方法を探しています。画像ファイル(jpg、bmp、gifなど)でこれを行う方法に答える同様の質問を見てきましたが、PDFで機能する方法は見つかりませんでした。

役に立ちましたか?

解決

ついに、私がやりたいことのためにいくつかのコードが動作するようになりました。秘Theは、OLEヘッダーがどの部分であるかを判断し、それを削除することです。ここに私のために働いているものがあります(見つかったコードに基づいてこちら

    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ファイルでのみ機能することに注意してください。

他のヒント

OLEtoDisk

"このバージョンは、OLEオブジェクトを含むテーブルの内容全体をディスクに保存します。オブジェクトを挿入するために、OLEサーバーとして機能する元のアプリケーションは必要ありません。すべてのMS Officeドキュメント、PDF、MS Photo Editor、MS Paint、Paint Shop Proによって挿入されたすべての画像をサポートします。元のファイル名を含むPACKAGEクラスの抽出もサポートします。リンクされたパスとファイル名を含むOLEフィールドの完全なインベントリを生成する関数が含まれています。構造化ストレージAPIを使用して、フィールドの実際のコンテンツを読み取ります

http://lebans.com/oletodisk.htm

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top