Advertisement
Guest User

Untitled

a guest
Jul 24th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
  3.  
  4. // save the file as '<pdf.js>/font~/debug.js'
  5. // bookmarklet -> javascript:(function(){if(window.fontDebugScript)%20return;%20var%20script%20=%20window.fontDebugScript%20=%20document.createElement('script');script.setAttribute('src',%20'../font~/debug.js');document.body.appendChild(script);})();
  6.  
  7. 'use strict';
  8.  
  9. (function fontDebug() {
  10. var fonts;
  11. var panelWidth = 300;
  12. function initUI() {
  13. var ui = document.createElement('div');
  14. ui.setAttribute('style', 'position: fixed; top:35px; bottom:5px; right: 0; width: ' + panelWidth + 'px; background: white; border: 2px black solid; padding: 5px; overflow: scroll;');
  15. document.body.appendChild(ui);
  16. var tmp;
  17. tmp = document.createElement('p');
  18. tmp.textContent = 'pdf.js font instrumentation';
  19. ui.appendChild(tmp);
  20.  
  21. tmp = document.createElement('button');
  22. tmp.addEventListener('click', refresh);
  23. tmp.textContent = 'Refresh';
  24. ui.appendChild(tmp);
  25. ui.appendChild(document.createElement('br'));
  26.  
  27. fonts = document.createElement('div');
  28. ui.appendChild(fonts);
  29.  
  30. var style = document.createElement('style');
  31. style.textContent = '.showtext { background: yellow; color: blue; opacity: 0.3; } .hidetext:hover { background: yellow; opacity: 0.3; }';
  32. ui.appendChild(style);
  33.  
  34. document.body.setAttribute('style', 'padding-right: ' + panelWidth + 'px;');
  35. document.body.addEventListener('click', textLayerClick, true);
  36. refresh();
  37. }
  38. function refresh() {
  39. resetSelection();
  40. fonts.innerHTML = '';
  41. var styles = document.styleSheets;
  42. for (var i = 0; i < styles.length; i++) {
  43. var style = styles[i];
  44. if (!style.cssRules || style.cssRules.length != 1) continue;
  45. var rule = style.cssRules[0];
  46. var text = rule.cssText;
  47. var m = /(pdfFont\d+)/.exec(text);
  48. if (!m) continue;
  49. var fontName = m[1];
  50. m = /url\(['"]?([^\)"']+)/.exec(text);
  51. var font = document.createElement('div');
  52. var name = document.createElement('a');
  53. name.href = m[1];
  54. name.textContent = fontName;
  55. font.appendChild(name);
  56. var select = document.createElement('input');
  57. select.setAttribute('type', 'checkbox');
  58. select.dataset.fontName = fontName;
  59. select.addEventListener('click', (function(select, fontName) {
  60. return (function() {
  61. selectFont(fontName, select.checked);
  62. });
  63. })(select, fontName));
  64. font.appendChild(select);
  65.  
  66. fonts.appendChild(font);
  67. }
  68. }
  69. function resetSelection() {
  70. var divs = document.getElementsByTagName('div');
  71. for (var i = 0; i < divs.length; ++i) {
  72. var div = divs[i], style = div.getAttribute('style');
  73. if (!style || style.indexOf('pdfFont') < 0) continue;
  74. var m = /(pdfFont\d+)/.exec(style);
  75. div.dataset.fontName = m[1];
  76. div.className = 'hidetext';
  77. }
  78. }
  79. function selectFont(fontName, show) {
  80. var divs = document.getElementsByTagName('div');
  81. for (var i = 0; i < divs.length; ++i) {
  82. var div = divs[i], style = div.getAttribute('style');
  83. if (div.dataset.fontName != fontName) continue;
  84. div.className = show ? 'showtext' : 'hidetext';
  85. }
  86. }
  87. function textLayerClick(e) {
  88. if (!e.target.dataset.fontName || e.target.tagName != 'DIV')
  89. return;
  90. var fontName = e.target.dataset.fontName;
  91. var selects = document.getElementsByTagName('input');
  92. for (var i = 0; i < selects.length; ++i) {
  93. var select = selects[i];
  94. if (select.dataset.fontName != fontName) continue;
  95. select.checked = !select.checked;
  96. selectFont(fontName, select.checked);
  97. select.scrollIntoView();
  98. }
  99. }
  100.  
  101. initUI();
  102. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement