2012-02-06 25 views
69
  • Nhiều ứng dụng như RepliGo, Aldiko, Mantano, ezPdf trong thị trường Android làm cho loại chú thích này trong trình xem pdf của chúng được hiển thị trong hình bên dưới.
  • Tôi đã thử nhiều cách để thực hiện chú thích này nhưng tôi đã thất bại. Tôi có một trình xem pdf cho android và mã java riêng biệt cho chú thích bằng cách sử dụng iText để vẽ đường.
  • Câu hỏi của tôi là tôi có thể triển khai iText trong Android. Nếu có thể, tôi phải nhập gói nào?
  • Cũng trong một số ứng dụng, phương thức canvas được sử dụng để vẽ đường kẻ. Có thể bao gồm phương thức canvas này trong android thay vì sử dụng chú thích không ?. Mục tiêu sẽ là có cùng các tính năng mà chú thích có.
  • Trong hình ảnh dưới đây (RepliGo PDF Reader) loại mã nào họ đã sử dụng cho chú thích? enter image description here
+8

@yadab: Tôi chỉ cần một ý tưởng về chú thích, vải và iText dù nó có thể được sử dụng hay không. Trước khi bình luận hoặc trả lời lần đầu đọc và cố gắng hiểu câu hỏi. – BobDroid

+1

Tôi đang gọi lại nhận xét của mình. – yadab

+1

http://developer.android.com/guide/topics/ui/custom-components.html#custom – zapl

Trả lời

6

Câu hỏi của bạn có vẻ là những gì phương pháp để cho phép người dùng chú thích trên một tập tin PDF trong android/java, vì vậy đây là một phương pháp cho bạn, mặc dù nó có thể không phải là giải pháp tốt nhất.

Tôi muốn chỉ ra rằng thực sự không cần thiết phải chỉnh sửa tệp PDF thực sự chỉ để cho phép người dùng thêm và xem chú thích. Ứng dụng của bạn chỉ có thể lưu trữ dữ liệu cho chú thích một cách riêng biệt, lưu trữ các chú thích đó cho từng tệp và tải chúng khi tệp được tải.

Điều đó có nghĩa là nó sẽ không tạo tệp PDF mới với các chú thích được đặt, nhưng thay vào đó, nó sẽ lưu trữ dữ liệu người dùng cho mỗi tệp PDF được tải vào ứng dụng của bạn và hiển thị khi người dùng tải tệp PDF lại. (Vì vậy, nó xuất hiện để được chú thích).

Ví dụ:

  1. đọc văn bản tập tin PDF, text-định dạng & hình ảnh vào ứng dụng của bạn
  2. hiển thị một tài liệu (như một từ bộ xử lý)
  3. Cho phép người dùng chỉnh sửa & chú thích tài liệu
  4. Lưu thay đổi & chú thích-dữ liệu trong ứng dụng của bạn (không phải tệp PDF)
  5. Khi tải lại tệp, áp dụng thay đổi & chú thích được lưu trữ trước đó.

lớp chú thích của bạn có thể trông giống như thế này:

class Annotations implements Serializable { 

    public Annotations() { 
     annotations = new HashSet<Annotation>(); 
    } 

    public ArrayList<Annotation> getAnnotations() { 
     return new ArrayList<Annotation>(annotations); 
    } 

    public Annotation annotate(int starpos, int endpos) { 
     Annotation a = new Annotation(startpos, endpos); 
     annotations.add(a); 
     return a; 
    } 

    public void unannotate(Annotation a) { 
     annotations.remove(a); 
    } 

    static enum AnnotationTypes { 
     HIGHLIGHT, UNDERLINE; 
    } 

    class Annotation { 
     int startPos, endPos; 
     AnnotationTypes type; 
     Color color; 
     Annotation(int start, int end) { 
      startPos = start; 
      endPos = end; 
     } 
     public void update(int start, int end) { 
      startPos = start; 
      endPos = end; 
     } 
     public void highlight(int red, int green, int blue) { 
      type = AnnotationTypes.HIGHLIGHT; 
      color = new Color(red, green, blue); 
     } 
     public void underline(int red, int green, int blue) { 
      type = AnnotationTypes.UNDERLINE; 
      color = new Color(red, green, blue); 
     } 
     // getters 
     ... 
    } 

    private Set<Annotation> annotations; 
} 

Vì vậy, bạn chỉ cần lưu trữ các dữ liệu chú thích hiển thị ở đây, và khi bạn tải các tập tin và (serialized) đối tượng chú thích tương ứng của nó, bạn có thể sử dụng từng chú thích để ảnh hưởng đến cách bạn hiển thị các ký tự giữa các số startPosendPos trong tài liệu của mình.

Mặc dù tôi đã sử dụng int s cho hai vị trí startPosendPos, bạn cũng có thể sử dụng hai hay nhiều biến để đề cập đến chỉ số mảng, chỉ số bảng cơ sở dữ liệu SQLite, vị trí char cho các tài liệu văn bản đơn giản; bất kể việc triển khai của bạn là gì, bạn chỉ có thể thay đổi điều đó để bạn biết bắt đầu chú thích ở đâu và ở đâu để kết thúc chú thích với AnnotationType đó.

Ngoài ra, bạn có thể thiết lập trình nghe thay đổi thuộc tính để khi thuộc tính chú thích được thay đổi, chúng kích hoạt các phương pháp để cập nhật hiển thị/chế độ xem của bạn.

+0

u có thể vui lòng đủ mã nguồn ở đây @Ozzy? –

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