2017-05-16 10 views
-1

からのx、y座標を取得しようとしています。その理由から、私はdivの上にpdfの上を重ねています。私は座標を取得しています。このアプローチの問題点は、モニターのDPIによって座標が異なることです。 あなたはPDFが、私はangularjsとC#のMVCを使用していますクリックイベント 上の座標を取得する熱い何か提案はありますか。 これらは、私はあなたがエリアからポイントを取得することができるならば、あなたはあなたにPDFファイルを表示enter image description hereは、私は、PDFは、x、y座標をクリック取得しようとしていますPDF

+1

あなたはどのような技術を使用していますか?それはwebformですか、あるいはwinformかWebApiなのでしょうか?あなたのプログラムはどのように見えますか?どのような種類のOGのDLLを使用してPDFを表示していますか? –

+0

私はangularjsでC#mvcを使用しています – user6934713

+1

@ user6934713 2つのアカウントがあり、マージをリクエストでき、自分の投稿に対する編集がすぐに適用され、キューを通過する必要はないようです。 – TheLethalCoder

答えて

0

を取得していますが割合を作ることができます座標です:

xGotFromClickはあなたのコンテナ内のポイントです
x = xGotFromClick * pdfHeight/ContainerHeight; 

pdf。

たとえば。
ISO 216ページの幅と高さの比率は、1:sqr(2)〜1:1.414です。だから、ないように言う:

- あなたは500x707コンテナでウィンドウを持っています。
- このコンテナの内側には、1200×1697のpdfがあります。

だから、あなたはあなたのコンテナから取得している各点はY上のxに500分の1200と707分の1697によってscalledする必要があります。それがあなたの実際のポジションを得る方法です。

Potencial問題:あなたのコンテナはPDFよりも小さくなるよう歪んとして
あなたの計算があります。
あなたのpdfがコンテナ(例えばモバイル用)の10倍の場合は、計算結果を平均化することができます。 200幅のコンテナと2000幅のpdfポイントの場合xGotFromClick = 10の内側のカレンダーは、pdfの100〜109のどこかのポイントに相当します。だから、(105〜)との間に何かのようにそれを治療するためのより良いかもしれません:

x = ((2 * xGotFromClick +1)* pdfHeight)/(2 * ContainerHeight); 

または単純:

x = (xGotFromClick + 0.5)* pdfHeight/ContainerHeight; 

クリックポイントを受け取るについて:高さを設定
https://www.kirupa.com/snippets/move_element_to_click_position.htm

+0

OPが使用しているテクノロジについての単一の手掛かりがなくても、この質問にどのように答えることができますか? –

+0

なぜなら、彼は固定幅のある種のコンテナを使用しているからです。 –

+0

@UweKeimもっと情報があれば簡単な解決法を用意できることは間違いありませんが、これは普遍的なものです:) –

0
  1. あなたが望むdpiに基づいてiframeとdivの幅を計算します。次の例で
  2. は、そこIFRAMEの高さは72dpiですに基づいて設定されます。

72dpiのA4サイズは、「幅×高さ= 595×842pt」です。 300dpiのA4サイズは、「幅×高さ= 2480×3508pt」です。 3例(ドラッグ可能とクリッカブル):

<!DOCTYPE html> 
 
<html> 
 
<title>Pdf Example</title> 
 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 

 
    <script type="text/javascript" 
 
      src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js" 
 
      integrity="sha256-eGE6blurk5sHj+rmkfsGYeKyZx3M4bG+ZlFyA7Kns7E=" 
 
      crossorigin="anonymous"></script> 
 

 
</head> 
 
<body> 
 
    <div id="full-iframe-container" class="hide" style=""> 
 

 
     <div id="iframe-cover" style="position: absolute; height: 842px; width: 595px;z-index: 999;"> 
 
      <div id="signature-position" class="drag" style="color: white;background:red;padding:2px;cursor:pointer">Signature Here</div> 
 
     </div> 
 
     <iframe id="iframe-full" src="https://yourpdffile.com/1.pdf" frameborder="1" scrolling="no" style="overflow: hidden; height:842px;width:595px; pointer-events: none;z-index: 0;"></iframe> 
 

 
    </div> 
 

 

 
    <script type="text/javascript"> 
 
     $(document).ready(function() { 
 
      //Set default position for signatures 
 
      $("#signature-position").css({ top:100, left: 100, position: 'absolute' }); 
 

 
     }); 
 

 
     //Dragable Start 
 
     $('.drag').draggable({ 
 
      scroll: true, 
 
      start: function() { 
 
       $(this).data("startingScrollTop", $(this).parent().scrollTop()); 
 
       $("#signature-position").css({ background: 'green', color: 'white', cursor: 'move' }); 
 
      }, 
 
      drag: function (event, ui) { 
 
       var st = parseInt($(this).data("startingScrollTop")); 
 
       ui.position.top -= $(this).parent().scrollTop() - st; 
 

 
       var positionX = $("#signature-position").position().left; 
 
       var positionY = $("#signature-position").position().top - 65; 
 
       $("#signature-position").css({ background: 'green', color: 'white', cursor: 'move' }).html('Sign Here - Positions:' + positionX + "X" + positionY); 
 
      }, 
 
      cursor: 'move' 
 
     }); 
 
     $("#iframe-cover").droppable({ 
 
      drop: handleDropEvent, 
 
      tolerance: "touch", 
 
     }); 
 
     function handleDropEvent(event, ui) { 
 
      $("#signature-position").css({ background: 'red', color: 'white', cursor: 'pointer' }); 
 
     } 
 
     //End Dragable 
 

 

 
     //on click 
 
     $('#iframe-cover').click(function (e) { 
 

 
      var iframeOffset = $('#iframe-full').offset(); 
 

 
      var positionX = e.pageX - (iframeOffset.left + 10); 
 
      var positionY = e.pageY - (iframeOffset.top + 65); 
 

 
      $("#signature-position").css({ top: positionY + 65, left: positionX, position: 'absolute' }).html('Sign Here - Positions:' + positionX + "X" + positionY); 
 
     }); 
 
    </script> 
 
</body> 
 
</html>

関連する問題