2009-06-22 2 views
5

이전의 여러 Access 데이터베이스를 MS-SQL로 업그레이드/변환하고 있습니다. 이러한 데이터베이스 중 대부분에는 PDF 파일을 저장하는 OLE 개체 필드가 ​​있습니다. 이러한 파일을 추출하여 SQL 데이터베이스에 저장하는 방법을 찾고 있습니다. 이미지 파일 (jpg, bmp, gif 등)을 사용하여이 작업을 수행하는 방법에 대한 답변이 비슷한 질문을 보았지만 PDF로 작동하는 방법을 찾지 못했습니다.Access 데이터베이스에서 OLE 개체 (pdf) 추출

답변

4

마침내 제가하고 싶은 일을위한 코드가 생겼습니다. 트릭은 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; 
    } 

주 (코드를 기반으로이 here 발견) PDF 파일이에서만 작동하는지.

+1

이전 답변이므로이 코드는 저에게 효과적이었습니다. "% PDF-1.3"을 "% PDF-1.7"로 업데이트하기 만하면 헤더를 올바르게 제거 할 수있었습니다. 이상하게도, "% PDF"를 검색하는 데 효과적이었습니다 ... – Arthurdent510

1

OLEtoDisk

"이 버전은. 개체를 삽입하는 OLE 서버를 역임 원래 응용 프로그램을 필요로하지 않습니다. 디스크에 OLE 개체를 포함하는 테이블의 전체 내용을 저장하는 모든 MS 오피스 문서, PDF 지원, MS Photo Editor, MS Paint 및 Paint Shop Pro가 삽입 한 모든 이미지 원본 파일 이름을 포함하여 PACKAGE 클래스의 추출을 지원하며 LINKED 경로 및 파일 이름을 포함하여 OLE 필드의 전체 인벤토리를 생성하는 기능이 포함되어 있습니다. 필드의 실제 내용 "

http://lebans.com/oletodisk.htm

+0

나는 그것을 보았고 시도했다. 그것은 PDF를 꺼내기 위해 일하지만 나는 내 자신의 (C#) 코드에 통합 할 수있는 것을 찾으려고 노력하고있다. 이 Access DB 중 일부는 PDF 파일을 저장하는 4 개 이상의 열을 가지고 있으며 궁극적으로 파일을 다른 모든 데이터가있는 SQL 서버의 테이블에 복사하려고합니다. – Nate

+0

아, 당신은 C# 코드를 찾고 있다고 말한 적이 없다. –

관련 문제