我正在开发一个pdf 编辑器。
我已经使用基于 iText的OpenPDF核心对 pdf 文件进行了更改
我正在使用AndroidPdfViewer查看 Pdf 文件
我的问题是:
将文本或标签或图标等新注释添加到现有 pdf 文件中。(已解决)在将注释添加到 pdf 文件后立即显示新更改。(已解决)将用户点击转换为 Pdf 文件坐标,以根据用户点击的位置添加新的注释。
在添加的注释上获取点击事件并读取添加到该注释中的元数据,例如:读取在图标注释上设置的标签哈希 id。(已解决)从 PDF 文件中删除添加的注释。
任何帮助表示赞赏
更新
==================================================== =======================
解决方案 1:添加注释
- 这是我在现有 pdf 文件中添加图标注释的代码片段。
public static void addWatermark(Context context, String filePath) throws FileNotFoundException, IOException {
// get file and FileOutputStream
if (filePath == null || filePath.isEmpty())
throw new FileNotFoundException();
File file = new File(filePath);
if (!file.exists())
throw new FileNotFoundException();
try {
// inout stream from file
InputStream inputStream = new FileInputStream(file);
// we create a reader for a certain document
PdfReader reader = new PdfReader(inputStream);
// get page file number count
int pageNumbers = reader.getNumberOfPages();
// we create a stamper that will copy the document to a new file
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(file));
// adding content to each page
int i = 0;
PdfContentByte under;
// get watermark icon
Image img = Image.getInstance(PublicFunction.getByteFromDrawable(context, R.drawable.ic_chat));
img.setAnnotation(new Annotation("tag", "gd871394bh2c3r", 0, 0, 0, 0));
img.setAbsolutePosition(230, 190);
img.scaleAbsolute(50, 50);
while (i < pageNumbers) {
i++;
// watermark under the existing page
under = stamp.getUnderContent(i);
under.addImage(img);
}
// closing PdfStamper will generate the new PDF file
stamp.close();
} catch (Exception de) {
de.printStackTrace();
}
}
}
解决方案 2:显示新更改
- 这是我添加注释后刷新视图的代码片段,我已将其添加到
AndroidPdfViewer
核心类中。
public void refresh(int currPage) {
currentPage = currPage;
if (!hasSize) {
waitingDocumentConfigurator = this;
return;
}
PDFView.this.recycle();
PDFView.this.callbacks.setOnLoadComplete(onLoadCompleteListener);
PDFView.this.callbacks.setOnError(onErrorListener);
PDFView.this.callbacks.setOnDraw(onDrawListener);
PDFView.this.callbacks.setOnDrawAll(onDrawAllListener);
PDFView.this.callbacks.setOnPageChange(onPageChangeListener);
PDFView.this.callbacks.setOnPageScroll(onPageScrollListener);
PDFView.this.callbacks.setOnRender(onRenderListener);
PDFView.this.callbacks.setOnTap(onTapListener);
PDFView.this.callbacks.setOnLongPress(onLongPressListener);
PDFView.this.callbacks.setOnPageError(onPageErrorListener);
PDFView.this.callbacks.setLinkHandler(linkHandler);
if (pageNumbers != null) {
PDFView.this.load(documentSource, password, pageNumbers);
} else {
PDFView.this.load(documentSource, password);
}
}
解决方案 4:单击 pdf 中的对象
我已经创建注释并将其设置为添加的图像对象,AndroidPdfViewer
有一个事件处理程序,这是示例
@Override
public void handleLinkEvent(LinkTapEvent event) {
// do your stuff here
}
我将在我的问题中添加其他新的解决方案,作为更新部分。