2014-07-23 32 views
0

我的web应用程序的工作中,我一定要显示使用PDF.JS PDF文件,并有在那里我有画一个矩形,用户可以点击该该把他带到详细信息页面数区域。到现在为止,我能够显示PDF边看PDF JS,我发现canvas.js中的所有文本是吸取使用
showText帆布:功能CanvasGraphics_showText(字形){}功能现在我跟踪的所有文本的文本,我必须画一个矩形但我面临一些问题来完成它。 showText函数调用多次创建多个矩形。我已经做了以下更改功能使用PDFJS可以在画布上搜索绘图文本吗?

if(glyphs.length ==10){ 
      // common case 
      var bValue=false; 

      glyphs.forEach(function(value, index, ar){ 
      var str =['d', 'e', 't', 'a','i','l','=']; 

      if(str.indexOf(value.fontChar)>=0){ 
       bValue=true; 
       } 
      }); 

      if(bValue){ 
       ctx.beginPath(); 
        ctx.rect(scaledX, 50, 200, 100); 
        ctx.fillStyle = 'yellow'; 
        ctx.fill(); 
        ctx.lineWidth = 2; 
        ctx.strokeStyle = 'black'; 
        ctx.stroke();  
        ctx.font = '20pt Calibri'; 
        // textAlign aligns text horizontally relative to placement 
        ctx.textAlign = 'center'; 
        // textBaseline aligns text vertically relative to font 
        // style 
        ctx.textBaseline = 'middle'; 
        ctx.fillStyle = 'blue'; 
        ctx.fillText("Click", 120, 100); 
      } 

      } 

字形是对象的数组,我正在寻找值海峡定义。 任何人都可以将我指向正确的方向吗? 在此先感谢。

+0

mmmh我建议你喜欢FabricJs – InferOn

+0

画布框架@推断,在使用FabricJs它可以搜索文本? – RizN81

+0

这只是一种可能。要做到这一点,而不库的唯一方法是使用包括每个位置的变量来跟踪文本,搜索变量,看看搜索文本匹配,则假选中文字,如果它匹配的 –

回答

0

这不是真的有可能直接做到这一点。 Canvas从根本上说是一个基于位图的图形引擎:它从调用中调用的唯一东西就是它内部像素的值。 您可以绘制文字,但一旦完成了,画布就不会再知道文字了。。这就是为什么你不能在图像内搜索它。

解决这个问题的最快和最简单的方法是跟踪文本其他地方的。 @ ZachSaucier的评论提到了这种可能性。我发现你关心的是性能,但另一种方法是实现某种OCR算法来从位图中提取文本。没有标准的方法来做到这一点,所以你必须自己实现OCR,并且它将比将文本存储在变量中慢得多。

另一种选择是使用SVG来代替画布。 SVG不是基于位图的,因此当您将文本放入SVG图像时,引擎可以记住它是文本,并且您可以在其中进行搜索。但是,在SVG中绘制事物与在Canvas中绘制事物非常不同,因此除非您已经使用可以与任何一个工作的库,否则必须重新编写绘图代码。对于你想要做的事,这可能是不可行的。