- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 pdftron 库来渲染和编辑 pdf。我有一个场景,我必须获取注释的坐标并将其保存到数据库,如果形状被删除,则从数据库中删除这些坐标。我设法记录了绘制坐标和删除坐标,但绘制坐标和删除坐标在这里不匹配。如果删除的坐标不匹配,即使 lib 成功删除了形状,我该如何从我的数据库中删除绘制的坐标。
我的提交方法
public void commitAnnotation() {
ArrayList<DrawPoints> points=new ArrayList<DrawPoints>();
try {
mPDFView.docLock(true);
pdftron.PDF.Rect rect = getShapeBBox();
if (rect != null) {
float sx = mPDFView.getScrollX();
float sy = mPDFView.getScrollY();
pdftron.PDF.Annots.Ink ink = pdftron.PDF.Annots.Ink.create(mPDFView.getDoc(), rect);
int pathIdx = 0;
ListIterator<LinkedList<PointF>> itrPaths = mStrokes.listIterator(0);
while (itrPaths.hasNext()) {
LinkedList<PointF> path = itrPaths.next();
ListIterator<PointF> itr = path.listIterator(0);
double[] pts = new double[2];
pdftron.PDF.Point p = new pdftron.PDF.Point();
int pointIdx = 0;
while (itr.hasNext()) {
PointF p_ = itr.next();
DrawPoints drawPoints=new DrawPoints();
pts = mPDFView.convScreenPtToPagePt(p_.x - sx, p_.y - sy, mPageForFreehandAnnot);
p.x = pts[0];
p.y = pts[1];
ink.setPoint(pathIdx, pointIdx++, p);
drawPoints.setPoint(p_);
drawPoints.setPathindex(pathIdx);
drawPoints.setPointindex(pointIdx);
points.add(drawPoints);
}
pathIdx++;
}
setStyle(ink);
ink.refreshAppearance();
Page page = mPDFView.getDoc().getPage(mPageForFreehandAnnot);
page.annotPushBack(ink);
mAnnot = ink;
mAnnotPageNum = mPageForFreehandAnnot;
buildAnnotBBox();
mPDFView.update(mAnnot, mAnnotPageNum); // Update the region where the annotation occupies.
}
mPaint.setStrokeJoin(oldStrokeJoin);
mPaint.setStrokeCap(oldStrokeCap);
} catch (Exception ex) {
mNextToolMode = ToolManager.e_pan;
} finally {
mPDFView.docUnlock();
mStrokePoints.clear();
mStrokes.clear();
}
if(mListener!=null){
mListener.getStrokePoints(points);
}else{
Log.e(TAG, " No Listener Registered ");
}
mPDFView.waitForRendering();
}
删除 fragment
// Erase
double[] pt1points = mPDFView.convScreenPtToPagePt(mPrevPt.x, mPrevPt.y, mDownPageNum);
double[] pt2points = mPDFView.convScreenPtToPagePt(mCurrentPt.x, mCurrentPt.y, mDownPageNum);
Point pdfPt1 = new Point(pt1points[0], pt1points[1]);
Point pdfPt2 = new Point(pt2points[0], pt2points[1]);
try {
mPDFView.docLock(true);
Page page = mPDFView.getDoc().getPage(mDownPageNum);
int annot_num = page.getNumAnnots();
for (int i=annot_num-1;i>=0;--i) {
Annot annot = page.getAnnot(i);
if (!annot.isValid())
continue;
if (annot.getType() == Annot.e_Ink) {
Ink ink = new Ink(annot);
if (ink.erase(pdfPt1, pdfPt2, mEraserHalfThickness)) {
Log.i("Erased", "Erased onMove "+pdfPt1.x+" "+pdfPt1.y+" "+pdfPt2.x+" "+pdfPt2.y);
double[] pts = new double[2];
pts=mPDFView.convCanvasPtToPagePt(pdfPt1.x, pdfPt1.y, mDownPageNum);
for (int j = 0; j < pts.length; j++) {
Log.i("Erased ", "Erased converted pts "+pts[0]+" "+pts[1]);
}
// DrawPoints points=new DrawPoints();
if (!mInkList.contains(ink)) {
mInkList.add(ink);
mDoUpdate = true;
}
}
}
}
} catch (Exception ex) {
} finally {
mPDFView.docUnlock();
mPrevPt.x = mCurrentPt.x;
mPrevPt.y = mCurrentPt.y;
}
这是我的日志的样子:
03-06 14:53:04.947: E/Draw(1746): Draw Points x 1131.558 y 347.78265 pathIndex 0 pointIndex 1
03-06 14:53:04.947: E/Draw(1746): Draw Points x 1131.558 y 369.04636 pathIndex 0 pointIndex 2
03-06 14:53:04.947: E/Draw(1746): Draw Points x 1131.558 y 389.84354 pathIndex 0 pointIndex 3
03-06 14:53:04.951: E/Draw(1746): Draw Points x 1131.558 y 425.15198 pathIndex 0 pointIndex 4
03-06 14:53:04.951: E/Draw(1746): Draw Points x 1137.5557 y 475.53995 pathIndex 0 pointIndex 5
03-06 14:53:04.951: E/Draw(1746): Draw Points x 1137.5557 y 523.5142 pathIndex 0 pointIndex 6
03-06 14:53:04.955: E/Draw(1746): Draw Points x 1140.1648 y 553.43933 pathIndex 0 pointIndex 7
03-06 14:53:04.955: E/Draw(1746): Draw Points x 1143.5533 y 575.1314 pathIndex 0 pointIndex 8
03-06 14:53:04.955: E/Draw(1746): Draw Points x 1143.5533 y 585.5112 pathIndex 0 pointIndex 9
03-06 14:53:04.959: E/Draw(1746): Draw Points x 1143.5533 y 588.13245 pathIndex 0 pointIndex 10
03-06 14:53:04.959: E/Draw(1746): Draw Points x 1143.5533 y 589.7196 pathIndex 0 pointIndex 11
03-06 14:53:04.959: E/Draw(1746): Draw Points x 1143.5533 y 632.37 pathIndex 0 pointIndex 12
03-06 14:53:04.959: E/Draw(1746): Draw Points x 1137.4645 y 683.9676 pathIndex 0 pointIndex 13
03-06 14:53:04.963: E/Draw(1746): Draw Points x 1137.5557 y 708.979 pathIndex 0 pointIndex 14
03-06 14:53:04.963: E/Draw(1746): Draw Points x 1137.5557 y 711.25366 pathIndex 0 pointIndex 15
03-06 14:53:04.971: E/Draw(1746): Draw Points x 1137.5557 y 715.0531 pathIndex 0 pointIndex 16
03-06 14:53:29.295: I/Erased(1746): Erased onMove 197.8857521641508 607.0408325297578 199.44002904429334 593.6879611452792
03-06 14:53:29.311: I/Erased(1746): Erased onMove 199.44002904429334 593.6879611452792 199.44002904429334 589.8265169549495
03-06 14:53:29.327: I/Erased(1746): Erased onMove 199.44002904429334 589.8265169549495 200.99430592443588 585.3476263723171
03-06 14:53:29.351: I/Erased(1746): Erased onMove 200.99430592443588 585.3476263723171 200.99430592443588 583.0830710249556
03-06 14:53:29.379: I/Erased(1746): Erased onMove 200.99430592443588 583.0830710249556 200.99430592443588 581.9483495694424
03-06 14:53:29.511: I/Erased(1746): Erased onMove 200.99430592443588 581.9483495694424 200.99430592443588 576.6664117141074
03-06 14:53:29.527: I/Erased(1746): Erased onMove 200.99430592443588 576.6664117141074 202.54864607401095 572.73110046127
03-06 14:53:29.551: I/Erased(1746): Erased onMove 202.54864607401095 572.73110046127 202.54864607401095 568.2373890140615
03-06 14:53:29.563: I/Erased(1746): Erased onMove 202.54864607401095 568.2373890140615 202.54864607401095 563.1586725760926
03-06 14:53:29.587: I/Erased(1746): Erased onMove 202.54864607401095 563.1586725760926 204.10292295415348 560.3824098755857
03-06 14:53:29.619: I/Erased(1746): Erased onMove 204.10292295415348 560.3824098755857 204.10292295415348 554.1803288452473
03-06 14:53:29.639: I/Erased(1746): Erased onMove 204.10292295415348 554.1803288452473 204.10292295415348 550.7530078663927
03-06 14:53:29.667: I/Erased(1746): Erased onMove 204.10292295415348 550.7530078663927 204.70252736647586 546.8737375134407
03-06 14:53:29.679: I/Erased(1746): Erased onMove 204.70252736647586 546.8737375134407 205.65726310372855 545.2844568197372
03-06 14:53:29.699: I/Erased(1746): Erased onMove 205.65726310372855 545.2844568197372 205.65726310372855 542.818894485149
03-06 14:53:29.731: I/Erased(1746): Erased onMove 205.65726310372855 542.818894485149 205.65726310372855 537.4532037184695
03-06 14:53:29.755: I/Erased(1746): Erased onMove 205.65726310372855 537.4532037184695 205.65726310372855 534.3117340358978
03-06 14:53:29.775: I/Erased(1746): Erased onMove 205.65726310372855 534.3117340358978 205.65726310372855 531.5041846009924
03-06 14:53:29.803: I/Erased(1746): Erased onMove 205.65726310372855 531.5041846009924 205.65726310372855 526.8179600878776
03-06 14:53:29.815: I/Erased(1746): Erased onMove 205.65726310372855 526.8179600878776 205.65726310372855 524.163522679755
03-06 14:53:29.835: I/Erased(1746): Erased onMove 205.65726310372855 524.163522679755 205.65726310372855 521.9044401383096
03-06 14:53:29.871: I/Erased(1746): Erased onMove 205.65726310372855 521.9044401383096 205.65726310372855 516.5835283125208
03-06 14:53:29.895: I/Erased(1746): Erased onMove 205.65726310372855 516.5835283125208 205.65726310372855 511.1228068581439
03-06 14:53:29.923: I/Erased(1746): Erased onMove 205.65726310372855 511.1228068581439 205.65726310372855 509.33579337034837
03-06 14:53:29.947: I/Erased(1746): Erased onMove 205.65726310372855 509.33579337034837 205.65726310372855 502.5355314899201
03-06 14:53:29.971: I/Erased(1746): Erased onMove 205.65726310372855 502.5355314899201 205.65726310372855 499.1108203751584
03-06 14:53:29.991: I/Erased(1746): Erased onMove 205.65726310372855 499.1108203751584 205.65726310372855 495.58421383926714
03-06 14:53:30.019: I/Erased(1746): Erased onMove 205.65726310372855 495.58421383926714 205.65726310372855 489.60904862878675
03-06 14:53:30.031: I/Erased(1746): Erased onMove 205.65726310372855 489.60904862878675 205.65726310372855 485.9805783064822
03-06 14:53:30.071: I/Erased(1746): Erased onMove 205.65726310372855 485.9805783064822 205.65726310372855 480.81070643356
03-06 14:53:30.087: I/Erased(1746): Erased onMove 205.65726310372855 480.81070643356 205.65726310372855 478.3197888738754
03-06 14:53:30.115: I/Erased(1746): Erased onMove 205.65726310372855 478.3197888738754 205.65726310372855 473.6962801857806
03-06 14:53:30.127: I/Erased(1746): Erased onMove 205.65726310372855 473.6962801857806 205.65726310372855 470.0352577404266
03-06 14:53:30.155: I/Erased(1746): Erased onMove 205.65726310372855 470.0352577404266 205.65726310372855 468.72412528959234
03-06 14:53:30.187: I/Erased(1746): Erased onMove 205.65726310372855 468.72412528959234 205.65726310372855 463.74788951500426
03-06 14:53:30.215: I/Erased(1746): Erased onMove 205.65726310372855 463.74788951500426 205.65726310372855 459.25237488896795
03-06 14:53:30.235: I/Erased(1746): Erased onMove 205.65726310372855 459.25237488896795 205.65726310372855 456.2922195827403
03-06 14:53:30.251: I/Erased(1746): Erased onMove 205.65726310372855 456.2922195827403 205.65726310372855 452.85498112033275
03-06 14:53:30.279: I/Erased(1746): Erased onMove 205.65726310372855 452.85498112033275 205.65726310372855 451.0065646482427
03-06 14:53:30.303: I/Erased(1746): Erased onMove 205.65726310372855 451.0065646482427 205.65726310372855 445.2987127903066
03-06 14:53:30.327: I/Erased(1746): Erased onMove 205.65726310372855 445.2987127903066 205.65726310372855 439.7794671108165
03-06 14:53:30.355: I/Erased(1746): Erased onMove 205.65726310372855 439.7794671108165 204.10292295415348 435.30290167983037
03-06 14:53:30.375: I/Erased(1746): Erased onMove 204.10292295415348 435.30290167983037 204.10292295415348 431.77831976578085
03-06 14:53:30.403: I/Erased(1746): Erased onMove 204.10292295415348 431.77831976578085 204.10292295415348 427.22364822030573
03-06 14:53:30.439: I/Erased(1746): Erased onMove 204.10292295415348 427.22364822030573 204.10292295415348 424.5336850258036
03-06 14:53:30.463: I/Erased(1746): Erased onMove 204.10292295415348 424.5336850258036 204.10292295415348 422.06991005268503
03-06 14:53:30.543: I/Erased(1746): Erased onMove 204.10292295415348 422.06991005268503 204.10292295415348 420.3948518257953
03-06 14:53:30.811: I/Erased(1746): Erased onMove 204.10292295415348 420.3948518257953 206.43440154379988 411.2446050466984
03-06 14:53:30.827: I/Erased(1746): Erased onMove 206.43440154379988 411.2446050466984 205.65726310372855 409.66018028194344
03-06 14:53:30.847: I/Erased(1746): Erased onMove 205.65726310372855 409.66018028194344 205.65726310372855 404.82079628997155
03-06 14:53:30.879: I/Erased(1746): Erased onMove 205.65726310372855 404.82079628997155 205.65726310372855 402.87418565855637
最佳答案
你是通过比较坐标在Page上搜索annotation,我认为使用UDID查找annotation要简单得多,而且你不必处理从页面到屏幕的坐标转换,反之亦然。
使用此函数设置UDID
public void SetUniqueID(string data);
和
public Obj GetUniqueID()
查找注解函数可以是这样的:
IAnnot FindAnnotOnPageByUDID(int pageIndex, long annotId)
{
IAnnot result = null;
Page page = _doc.GetPage(pageIndex);
if (page != null && page.IsValid())
{
int num_annots = page.GetNumAnnots();
for (int i = 0; i < num_annots; ++i)
{
IAnnot annot = page.GetAnnot(i);
if (annot.IsValid())
{
var UniqueIdObj = annot.GetUniqueID();
if (UniqueIdObj != null)
{
var strUniqueId = UniqueIdObj.GetAsPDFText();
if (strUniqueId.Contains(annotId.ToString()))
{
result = annot;
break;
}
}
}
}
}
return result;
}
PdfTron 文档也推荐这种方法。
只需跟踪您的注释集合的 udid。
关于android - PDFTron 墨水注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901409/
PDFTron 可以选择提供自定义 Javascript 文件来修改查看器,但我不确定该文件中应该包含什么,而且我在网上找不到任何示例。 该网站有如下描述: Viewer Options - By d
我正在使用 PdfTron SDK 并且我正在尝试在用户放大后绘制注释,注释需要在书的侧面(第三张图片)但是当我们放大时它正在绘制书的中心(图 1 和 2)。 缩放示例(错误状态): 没有缩放的例子(
我正在使用 pdftron 库来渲染和编辑 pdf。我有一个场景,我必须获取注释的坐标并将其保存到数据库,如果形状被删除,则从数据库中删除这些坐标。我设法记录了绘制坐标和删除坐标,但绘制坐标和删除坐标
我正在尝试使用 PdfTron 创建 PDF 编辑原型(prototype)软件。 我已成功创建界面,用户可以在该界面中单击从 PDF 创建的图像,选择区域,然后将显示一个文本输入框,然后他/她可以在
在 PDFTron WebViewer 中,当单击标题中的注释工具,然后单击正在查看的 PDF 时,左侧面板中会弹出回复框: 如果单击时间戳旁边的 3 个点,然后单击“编辑”: 您将看到评论框: 有没
在 PDFTron Viewer 2.2.2 中,我们添加了拖放缩略图以移动页面。 但在 3.0.1 和 3.1.0 中,这是不可能的。您是否阻止了拖放事件? (所有浏览器都受影响) 这里是我们 co
我将 PDFTron 用于内部网站。当我单击 PDFTron 中的自由文本工具时,它工作正常。我需要的是在文本工具的 focusout() 上我需要选择平移工具。 有人可以指导我如何去做吗? 最佳答案
将批量 html 文件转换为 pdf 时,出现转换失败错误。对于同一个 html 文件,有时它可以工作。主要是每当有更多文件时,一两个就会失败。 PdfTron 版本:2016 年 9 月,环境:Li
我有一个 pdf tron sdk 集成的问题,我单独尝试过但没有用,所以我尝试运行他们的示例之一,但我总是有 5 个未能解决文件错误。他们的文档不容易阅读而且我没有理解如何通过 gradle 或手动
我正在尝试绘制注释,在 80% 的情况下,注释可以正确绘制,但有时注释会在中间被切断,在我放大和缩小后,注释会完全绘制。 这是我绘制注释的代码: public void createNoteIconO
我正处于最终确定 PDFTron 的阶段,并且正在尝试一些重要的功能。有必要在 PDF 上显示图像并对用户交互使用react。通过给定的示例,我发现我必须使用 PTFileAttachment,如下所
我有一个 PDFTron webviewer,我用它来呈现 pdf 表单。当用户单击外部保存按钮时,我需要从 webviewer 中提取表单 xml。 我试过了 var am = readerCont
有没有办法抑制页面出现时覆盖在页面上然后在淡入淡出动画中消失的页码(例如“1/253”)?它是 PTPDFViewCtrl View 中的一个 UILabel,但我在文档中找不到任何指示如何配置它以防
我尝试使用 PDFTron 添加输入字段,但 PDF 中没有显示任何内容, 我关注了这个文档: https://www.pdftron.com/documentation/samples/js/Int
我在尝试与 PDFTron 集成时遇到一个奇怪的错误,即 PDFNet Android SDK: UnsatisfiedLinkError: Couldn't load PDFNetC: findLi
我试图获取一个 blob 作为 URL,但我在这一行收到错误: xhr.send() 错误消息是 angular.js:13920 Error: Failed to execute 'send on
我正在尝试获取所有注释,例如:INK 并从 Android 保存到数据库。 我查看了 PDFTron 示例,尤其是 ElementReaderAdvTest。我可以跟踪它处理 Element.e_pa
我有 PDFTron 的演示项目,在我本地的相同项目位置也有 Booking.pdf。 我编写了以下代码将 PDF 加载到 PDFTron 中 #viewer
我们正在使用 PdfTron 将 PDF 转换为 XOD,以便可以在 XPS 查看器中查看。 PDFTron 部署在 PCF 上并作为服务使用。 遇到这样的情况:一个简单的扫描 pdf 文件(5mb)
我想在我的应用程序上使用 PDFTron webviewer。我该怎么做? “注意:我安装了@pdftron 节点模块” 最佳答案 绝对可以在 Electron 应用程序中使用 WebViewer。我
我是一名优秀的程序员,十分优秀!