Извлечь указанную c часть текста из PDF, используя Javascript? - PullRequest
1 голос
/ 05 февраля 2020

Мне нужно сделать модификацию. Я использую этот код, который я нашел, чтобы извлечь весь текст в формате PDF:

<!-- edit this; the PDF file must be on the same domain as this page -->
<iframe id="input" src="your-file.pdf"></iframe>

<!-- embed the pdftotext service as an iframe -->
<iframe id="processor" src="http://hubgit.github.com/2011/11/pdftotext/"></iframe>

<!-- a container for the output -->
<div id="output"></div>

<script>
var input = document.getElementById("input");
var processor = document.getElementById("processor");
var output = document.getElementById("output");

// listen for messages from the processor
window.addEventListener("message", function(event){
  if (event.source != processor.contentWindow) return;

  switch (event.data){
    // "ready" = the processor is ready, so fetch the PDF file
    case "ready":
      var xhr = new XMLHttpRequest;
      xhr.open('GET', input.getAttribute("src"), true);
      xhr.responseType = "arraybuffer";
      xhr.onload = function(event) {
        processor.contentWindow.postMessage(this.response, "*");
      };
      xhr.send();
    break;

    // anything else = the processor has returned the text of the PDF
    default:
      output.textContent = event.data.replace(/\s+/g, " ");
    break;
  }
}, true);
</script>

В результате получается упакованный текст без каких-либо абзацев. Все мои PDF-файлы содержат слово «Datacover» где-то в начале и следуют за большим абзацем.

Все, что я хочу сделать, это удалить весь текст с его начала до первого экземпляра слова «Datacover», а также в начале слова «Datacover», чтобы показать весь текст до третьего экземпляра ». '<- (точка с пробелом) и удалите весь следующий текст до конца. </p>

Вы можете помочь? спасибо!

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете сопоставить Datacover между границами слов \b и повторить не жадным образом 3 раза, сопоставляя любой символ, включая ньюлинга [\s\S]*?, до следующего появления точки и пробела \.

\bDatacover\b(?:[\s\S]*?\. ){3}

Regex demo

Чтобы получить данные, вы можете использовать

event.data.match(regex)

Например:

const regex = /\bDatacover\b(?:[\s\S]*?\. ){3}/g;
let event = {
  data: `testhjgjhg hjg jhg jkgh kjhghjkg76t 76 tguygtf yr 6 rt6 gtyut 67 tuy yoty yutyu tyu yutyuit iyut iuytiyu tuiyt Datacover uytuy tuyt uyt uiytuiyt uytutest.
yu tuyt uyt uyt iutiuyt uiy
 yuitui tuyt
test. 
 uiyt uiytuiyt
 uyt ut ui
this is a test. 
sjhdgfjsa. 
hgwryuehrgfhrghw fsdfdfsfs sddsfdfs.`
};

console.log(event.data.match(regex));
...