2012-02-06 56 views
69
  • 許多應用程序,如RepliGo,Aldiko,Mantano,ezPdf在android市場使這種類型的註釋在他們的pdf查看器中顯示在下面的圖像。
  • 我嘗試了很多方式來實現這個註解,但是我失敗了。我有一個PDF瀏覽器的android和單獨的java代碼註釋使用iText繪製線條。
  • 我的問題是我可以在android中實現iText。如果可能,我必須導入哪個軟件包?
  • 同樣在某些應用中,畫布方法用於繪製線條。是否有可能在Android中包含此畫布方法而不是使用註釋?目標是具有註釋所具有的相同功能。
  • 在下面的圖片(RepliGo PDF Reader)他們使用哪種代碼進行註釋? enter image description here
+8

@yadab:我只需要大約註釋,帆布和iText的想法是否可以使用與否。在評論或回答第一次閱讀並嘗試理解該問題之前。 – BobDroid 2012-02-10 06:21:56

+1

我在回覆我的評論。 – yadab 2012-02-16 13:47:14

+1

http://developer.android.com/guide/topics/ui/custom-components.html#custom – zapl 2012-03-12 16:15:06

回答

6

你的問題似乎是有什麼方法讓用戶在註釋中的Android/Java中的PDF文件,所以這裏是給你一個方法,雖然它可能不是最好的解決辦法。

我想指出,實際上並不需要編輯實際的PDF文件,只是爲了允許用戶添加和查看註釋。您的應用程序可以將註釋數據分開存儲,爲每個文件存儲這些註釋,並在文件加載時加載它們。

這意味着它不會創建一個帶有這些註釋的新PDF文件,而是隻存儲加載到應用中的每個PDF文件的用戶數據,並顯示用戶加載PDF再次文件。 (所以它似乎被註釋)。

例子:

  1. 閱讀PDF文件中的文本,文本格式&圖片到你的應用程序
  2. 顯示文檔(如字處理程序)
  3. 允許用戶編輯&註釋文檔
  4. 保存更改&應用程序中的註釋數據(不是PDF文件)
  5. 當再次加載文件時,應用更改0先前存儲的註釋。

你的註釋類可能是這個樣子:

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; 
} 

所以你只是存儲註解的顯示數據在這裏,當你加載文件及其相應的(連載)註釋對象,您可以使用每個註釋來影響文檔中startPosendPos之間顯示字符的方式。

雖然我用int S爲兩個位置startPosendPos,你也可以使用兩個或多個變量來指向數組索引,SQLite數據庫表索引,對於簡單的文本文檔焦位置;無論你的實現是什麼,你都可以改變它,這樣你就知道在哪裏開始註釋以及在哪裏結束使用AnnotationType進行註釋。

此外,您可以設置屬性更改偵聽器,以便在註釋屬性發生更改時觸發更新顯示/視圖的方法。

+0

你可以在這裏請足夠的源代碼@Ozzy? – 2017-11-21 12:36:04

相關問題