pdf.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url)$/;
  2. const SELECT_REGEX = /:eq|:lt|:gt|#/g;
  3. const SELECT_REGEX_A = /:eq|:lt|:gt/g;
  4. const parseTags = {
  5. jq:{
  6. pdfh(html, parse, base_url) {
  7. if (!parse || !parse.trim()) {
  8. return ''
  9. }
  10. parse = parse.trim();
  11. let option = null;
  12. if (parse.startsWith('body&&')) {
  13. parse = parse.substr(6);
  14. }
  15. print('pdfh parse前:'+parse);
  16. if (parse.indexOf('&&') > -1) {
  17. let sp = parse.split('&&');
  18. option = sp[sp.length - 1];
  19. sp.splice(sp.length - 1);
  20. sp.forEach((it,idex)=>{
  21. if(/:eq\((.*?)\)/.test(it)){
  22. let pos = parseInt(it.match(/:eq\((.*?)\)/)[1]);
  23. if(pos >= 0 ){ // jsoup的eq 正整数从1开始
  24. it = it.replace(/:eq\((.*?)\)/,`:eq(${pos+1})`);
  25. sp[idex] = it;
  26. }
  27. }else if (!SELECT_REGEX.test(it) && it!=='body') {
  28. sp[idex] = it+':eq(1)'; // jsoup的eq从1开始
  29. }
  30. });
  31. parse = sp.join(' ');
  32. }
  33. if(parse === 'Text'){
  34. parse = 'body';
  35. option = 'Text';
  36. }else if(parse === 'Html'){
  37. parse = 'body';
  38. option = 'Html';
  39. }
  40. print('pdfh parse后:'+parse+',option:'+option);
  41. let result = defaultParser.pdfh(html,parse + " " + option);
  42. print(result);
  43. if(option&&/style/.test(option.toLowerCase())&&/url\(/.test(result)){
  44. try {
  45. result = result.match(/url\((.*?)\)/)[1];
  46. }catch (e) {}
  47. }
  48. if (result && base_url && option && DOM_CHECK_ATTR.test(option)) {
  49. if (/http/.test(result)) {
  50. result = result.substr(result.indexOf('http'));
  51. } else {
  52. result = urljoin(base_url, result)
  53. }
  54. }
  55. return result;
  56. },
  57. pdfa(html, parse) {
  58. if (!parse || !parse.trim()) {
  59. print('!parse');
  60. return [];
  61. }
  62. parse = parse.trim();
  63. print('pdfa parse前:'+parse);
  64. if (parse.indexOf('&&') > -1) {
  65. let sp = parse.split('&&');
  66. sp.forEach((it,idex)=>{
  67. if(/:eq\((.*?)\)/.test(it) && idex < sp.length - 1){
  68. let pos = parseInt(it.match(/:eq\((.*?)\)/)[1]);
  69. if(pos >= 0 ){ // jsoup的eq 正整数从1开始
  70. it = it.replace(/:eq\((.*?)\)/,`:eq(${pos+1})`);
  71. sp[idex] = it;
  72. }
  73. }else if (!SELECT_REGEX_A.test(it) && idex < sp.length - 1 && it!=='body') {
  74. sp[idex] = it+':eq(1)'; // jsoup的eq从1开始
  75. }
  76. });
  77. parse = sp.join(' ');
  78. }
  79. print('pdfa parse后:'+parse);
  80. let result = defaultParser.pdfa(html,parse);
  81. // print(result);
  82. print(result.length);
  83. return result;
  84. },
  85. pd(html,parse,uri){
  86. return parseTags.jq.pdfh(html, parse, MY_URL);
  87. },
  88. },
  89. };