簡體   English   中英

pdfjs:使用正確的換行符/帶空格從 pdf 獲取原始文本

[英]pdfjs: get raw text from pdf with correct newline/withespace

使用pdf.js ,我做了一個簡單的函數來從 pdf 中提取原始文本:

async getPdfText(path){

    const pdf = await PDFJS.getDocument(path);

    const pagePromises = [];
    for (let j = 1; j <= pdf.numPages; j++) {
        const page = pdf.getPage(j);

        pagePromises.push(page.then((page) => {
            const textContent = page.getTextContent();
            return textContent.then((text) => {
                return text.items.map((s) =>  s.str).join('');
            });
        }));
    }

    const texts = await Promise.all(pagePromises);
    return texts.join('');
}

// usage
getPdfText("C:\\my.pdf").then((text) => { console.log(text); });

但是我找不到正確提取新行的方法,所有文本僅在一行中提取。

如何正確提取文本? 我想以與台式電腦相同的方式提取文本:

打開pdf(雙擊文件)-> 選擇所有文本(CTRL + A)-> 復制所選文本(CTRL + C)-> 粘貼復制的文本(CTRL + V)

我知道這個問題已經有一年多了,但以防萬一有人遇到同樣的問題。

正如這篇文章所說

在 PDF 中,沒有使用諸如 '\\n' 之類的控制字符來控制布局——PDF 中使用精確坐標定位的字形。 使用文本 y 坐標(可以從變換矩陣中提取)來檢測線條變化。

因此,對於 pdf.js,您可以使用textContent.items對象的transform屬性。 特別是表格的框 5。 如果這個值改變了,那么就意味着有一個新行

這是我的代碼:

            page.getTextContent().then(function (textContent) {
                var textItems = textContent.items;
                var finalString = "";
                var line = 0;

                // Concatenate the string of the item to the final string
                for (var i = 0; i < textItems.length; i++) {
                    if (line != textItems[i].transform[5]) {
                        if (line != 0) {
                            finalString +='\r\n';
                        }

                        line = textItems[i].transform[5]
                    }                     
                    var item = textItems[i];

                    finalString += item.str;
                }

                var node = document.getElementById('output');
                node.value = finalString;
            });

聽起來很奇怪,除了使用tranform ,您還可以使用fontName屬性。 每換一行,fontName 就會改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM