2012-04-25 12 views
5

Chúng tôi có một hệ thống phân tích các tệp PDF và kéo văn bản bên trong để lập chỉ mục và như vậy. Một vấn đề mà chúng tôi gặp phải là Illustrator đặt các từ có chứa "fi" để sử dụng dây chằng cho fi (đơn glyph).Cách quyết định Hệ số cho "FI" trong Java (và các loại khác)

Ví dụ: dòng này ...

"băng ghế dự bị và gạch men thủy tinh giàu."

Hiển thị như thế này trong trình gỡ lỗi Java của tôi

"ete bench and rich vitri \ u001Fed ceramic tile."

Dường như \ u001F là mã ký tự mà các tệp Adobe PDF sử dụng cho "fi" kết nối. Tôi rõ ràng có thể hoán đổi sự xuất hiện của \ u001F cho "fi" nhưng không ai biết một cách mạnh mẽ để xử lý này và các trường hợp như nó?

+0

ick. họ đang sử dụng các ký tự điều khiển unicode? !!! –

+0

không có nhiều chữ ghép: ff, fl, ffl, fi, ffi là những chữ cái chính (ít nhất là bằng tiếng Anh.) –

+0

Adobe có nhiều bộ mã hóa ký tự. Vì vậy, nó phụ thuộc vào thư viện PDF; ví dụ trên văn bản một chọn một phông chữ và một mã hóa như CP1252 hay như vậy. Trong trường hợp của bạn, giải pháp hiện tại duy nhất có thể được tìm thấy tại đây http://superuser.com/questions/220363/cleaning-up-pdftotext-font-issues –

Trả lời

4

Chuỗi byte được sử dụng làm toán hạng cho toán tử 'văn bản hiển thị' trong PDF (TJ, Tj, v.v.) sẽ được chuyển thành văn bản bằng cách sử dụng mã hóa phông hoạt động trong trạng thái đồ họa và cmap ToUnicode được liên kết với phông chữ . Một số phông chữ bao gồm một cmap ToUnicode ánh xạ mã 0x001F (hoặc bất kỳ mã nào nó được sử dụng cho glyph) vào các ký tự 'f' và 'l'. Các phông chữ khác sử dụng một bảng mã với một mảng/Khác biệt để ánh xạ mã 0x1F tới ký tự/fl. Các cấu trúc này phải được xử lý để có được kết quả chính xác.

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