如何在android中为pdf查看器制作注释,如突出显示、删除线、下划线、绘制、添加文本等?
Posted
技术标签:
【中文标题】如何在android中为pdf查看器制作注释,如突出显示、删除线、下划线、绘制、添加文本等?【英文标题】:How to make annotation like highlighting, strikethrough, underline, draw, add text, etc in android for a pdf viewer? 【发布时间】:2012-02-27 17:28:36 【问题描述】: android 市场中的许多应用程序(如 RepliGo、Aldiko、Mantano、ezPdf)在其 pdf 查看器中使用这种类型的注释,如下图所示。 我尝试了多种方法来实现此注释,但都失败了。我有一个用于 android 的 pdf 查看器和用于使用 iText 绘制线条的注释的单独 Java 代码。 我的问题是我能否在 android 中实现 iText。如果可能,我必须导入哪个包? 此外,在某些应用程序中,画布方法用于绘制线条。是否可以在android中包含这个canvas方法而不是使用注释?目标是具有与注释相同的功能。 在下图(RepliGo PDF 阅读器)中,他们使用哪种代码进行注释?【问题讨论】:
@yadab :我只需要关于注解、画布和 iText 是否可以使用的想法。在评论或回答之前先阅读并尝试理解问题。 我正在回电。 developer.android.com/guide/topics/ui/… 有些商业pdf SDK如PDFTRON支持注解。您还可以检查开源 android 项目,例如:Android PDF Viewer 或 APDFViewer。您可能还想检查一些相关问题:PDF parsing library for Android? [Android : Is there any free PDF library for Android](***.com/questions/4665957/pdf-parsing-libr 这个问题由于涉及面大,不太可能得到任何有用的答案。你应该把它分成更小、更详细和更具体的问题。例如,“如何创建带有标注的弹出窗口...”或“如何实现拖放...” 【参考方案1】:您的问题似乎是允许用户在 android/java 中对 PDF 文件进行注释的方法是什么,所以这是适合您的一种方法,尽管它可能不是最佳解决方案。
我想指出,实际上并没有必要仅仅为了允许用户添加和查看注释而编辑实际的 PDF 文件。您的应用程序可以单独存储注释数据,为每个文件存储这些注释,并在文件加载时加载它们。
这意味着它不会创建带有这些注释的新 PDF 文件,而是只会存储加载到您的应用中的每个 PDF 文件的用户数据,并在用户加载 PDF 文件时显示该数据再次。 (所以它似乎被注释了)。
例子:
-
将 PDF 文件文本、文本格式和图像读取到您的应用程序中
显示文档(如文字处理器)
允许用户编辑和注释文档
在您的应用程序中保存更改和注释数据(不是 PDF 文件)
再次加载文件时,应用之前存储的更改和注释。
您的注释类可能如下所示:
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;
因此,您只是在此处存储注释显示数据,当您加载文件及其各自的(序列化)注释对象时,您可以使用每个注释来影响您在 startPos
和 @987654323 之间显示字符的方式@ 在您的文档中。
虽然我使用int
s 来表示startPos
和endPos
这两个位置,但您也可以使用两个或多个变量来引用数组索引、SQLite 数据库表索引、简单文本文档的字符位置;无论您的实现是什么,您都可以更改它,以便您知道从哪里开始注释以及在哪里结束使用该 AnnotationType 进行注释。
此外,您可以设置属性更改侦听器,以便在更改注释属性时触发方法来更新您的显示/视图。
【讨论】:
【参考方案2】:Pdf-annotation 是一个开源的,从https://code.google.com/p/pdf-annotation/开始的好点
【讨论】:
以上是关于如何在android中为pdf查看器制作注释,如突出显示、删除线、下划线、绘制、添加文本等?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 浏览器上嵌入谷歌文档查看器 iframe