2010-03-08 26 views
6

Tôi đang cố gắng trích xuất văn bản từ các tệp PDF bằng cách sử dụng iFilter.Cách sử dụng một IFilter PDF cụ thể

Adobe PDF iFilter được phân phối với Adobe Reader thật khủng khiếp, trả lại HRESULT E_FAIL thư cho nhiều tài liệu PDF.

FoxIt PDF IFilter hoạt động đẹp mắt trên hầu như tất cả các tệp PDF mà tôi đã sử dụng để thử nghiệm.

Vấn đề là mỗi khi Trình cập nhật Adobe chạy, nó sẽ thay thế FoxIt IFilter tuyệt vời bằng Adobe IFilter crappy.

Tôi đã sử dụng phương thức LoadIFilter để nhận IFilter đã đăng ký cho tệp PDF. Có cách nào để buộc các API Win32 để tải FoxIt IFilter thay vì Adobe IFilter?

LƯU Ý: Câu hỏi này về determining which IFilters are installed hỏi câu hỏi có liên quan - nhưng không giống nhau.

Trả lời

3

IFilter dường như được đăng ký như một đối tượng COM có cửa sổ, vì vậy bạn sẽ có thể tạo một phiên bản của nó bằng cách sử dụng COM.

Từ http://msdn.microsoft.com/en-us/library/ms692565: Cấu trúc của DLL là nó có một IFilter và IClassFactory

Bạn sẽ có thể nhanh chóng IClassFactory (cho CLSID)

séc ra http://msdn.microsoft.com/en-us/library/ms684007 http://msdn.microsoft.com/en-us/library/ms680760

+0

Nhờ Nigel, tôi sẽ cho rằng một thử. – dthrasher

0

Bên cạnh cách trên, bạn có thể chỉ cần kiểm tra DLL được sử dụng trên toàn hệ thống được sử dụng cho loại tệp bạn quan tâm.

Nếu bạn tìm thấy tệp DLL của Adobe thay vì tệp DLL Foxit, hãy thay đổi mục nhập InprocServer32 cho khóa mà PersistentHandler của tệp của bạn đang đề cập đến. Điều này có thể cần các quyền đặc biệt, tùy thuộc vào hệ thống bạn sử dụng. Sau đó bắt đầu sử dụng IFilter.

Có một cái nhìn tại chỉ đơn giản là lời giải thích về cách thức IFilter DLL được chọn:

http://msdn.microsoft.com/en-us/library/ms692488

Các vấn đề liên quan