Я использую реагирование с машинописью, а также pdfjs-dist v2.2
Я могу читать данные из pdf без проблем. Меня интересуют пустые ячейки, так как я хочу преобразовать pdfв текст, а затем в CSV-файл, который, в свою очередь, будет использоваться для заполнения таблицы для отображения информации. перепробовал все варианты, которые я могу придумать, пожалуйста, помогите
мой текущий код:
import React, {Component } from 'react';
import pdfjs from 'pdfjs-dist';
import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry';
import _ from 'lodash'
pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;
function pdfToPlainText(pdfData) {
console.log(pdfData, "pdfData")
//pdfjs.disableWorker = true;
var pdf = pdfjs.getDocument(pdfData)
console.log(pdf, "pdf")
pdf.promise.then(getPages);
}
function getPages(pdf) {
//console.log(pdf, "pdf")
for (let i = 1; i <= pdf.numPages; i++) {
if(i <= pdf.numPages){
pdf.getPage(i).then((p)=>{
//console.log(p, "p")
getPageText(p)
})
}
}
}
function getPageText(page){
page.getTextContent({normalizeWhitespace: false, disableCombineTextItems: false})
.then(function(textContent) {
console.log(textContent, "textContent")
var textItems = textContent.items;
console.log(textItems, "textContent Items")
var pageTextArray =[]
//var pageTextOrderdedArray =[]
var PageTextString = ""
//var arrayStrings = []
textItems.forEach((el)=>{
console.log(el, "el" )
pageTextArray.push(el.str);
console.log(pageTextArray,"pageTextArray" )
PageTextString = pageTextArray.toString()
// console.log(PageTextString,"PageTextString" )
})
sortPageTextToArray(PageTextString)
});
}
function sortPageTextToArray(pagetextString){
console.log(pagetextString, "pagetextString")
}
function exstractTable(page){
}
export default class PfdConverter extends Component {
GetPdfFromInput(){
return <input type="file" name="" id="" onChange={(e)=> {
console.log(e.target.files, "e")
var file = e.target.files && e.target.files[0];
if(file!== null){
var fileReader = new FileReader();
fileReader.onload = function() {
console.log(fileReader.result, "fileReader")
pdfToPlainText(fileReader.result)
}
fileReader.readAsArrayBuffer(file)
}
}}/>
}
render() {
return (
<div>
{this.GetPdfFromInput()}
</div>
)
}
}
РЕДАКТИРОВАТЬ 1
import React, {Component } from 'react';
import pdfjs from 'pdfjs-dist';
import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry';
pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;
interface iColAndTexts{
nrCols:number
texts:string[]
yPoints: number[]
}
interface NamedDictionary<T>
{
[v:string]:T
}
interface itext{str:string,width:number,transform:number[]}
function pdfToPlainText(pdfData) {
console.log(pdfData, "pdfData")
//pdfjs.disableWorker = true;
var pdf = pdfjs.getDocument(pdfData)
console.log(pdf, "pdf")
pdf.promise.then(getPages);
}
function getPages(pdf) {
//console.log(pdf, "pdf")
for (let i = 1; i <= pdf.numPages; i++) {
if(i <= pdf.numPages){
pdf.getPage(i).then((p)=>{
//console.log(p, "p")
getPageText(p)
//tryMe(p)
})
}
}
}
function getPageText(page){
page.getTextContent({normalizeWhitespace: false, disableCombineTextItems: false})
.then(function(textContent) {
// console.log(textContent, "textContent")
var textItems:itext[] = textContent.items;
// console.log(textItems, "textContent Items")
const popColumn=(d:NamedDictionary<iColAndTexts>,getX:(i:itext)=>number,t:itext, getY:(i:itext)=>number)=>{
var use = Math.round(getX(t)/3)*3
var useY = Math.round(getY(t)/1)*1
if(!d[use])
{
d[use]={ nrCols:0, texts:[], yPoints:[]} as iColAndTexts;
}
let colinfo= ( d[use]);
colinfo.nrCols+=1;
colinfo.texts.push(t.str);
colinfo.yPoints.push( useY )
}
const popRows=(d:NamedDictionary<iColAndTexts>,getX:(i:itext)=>number,t:itext)=>{
var use = Math.round(getX(t)/3)*3
if(!d[use])
{
d[use]={ nrCols:0, texts:[]} as iColAndTexts;
}
let colinfo= ( d[use]);
colinfo.nrCols+=1;
colinfo.texts.push(t.str);
}
var colsLeft:NamedDictionary<iColAndTexts> = {};
var colsRight:NamedDictionary<iColAndTexts> = {};
var rows: NamedDictionary<iColAndTexts> = {}
var x=4,y=5;
textItems.forEach(t=>{
popColumn(colsLeft,(t)=>t.transform[x],t,(t)=>t.transform[y] )
popColumn(colsRight,(t)=>t.transform[x]+t.width,t, (t)=>t.transform[y])
popRows(rows,(t)=>t.transform[y],t)
})
console.log('colsLeft',colsLeft);
console.log('colsRight',colsRight);
console.log('rows',rows);
//first block on test
});
}
export default class PfdConverter extends Component {
GetPdfFromInput(){
return <input type="file" name="" id="" onChange={(e)=> {
console.log(e.target.files, "e")
var file = e.target.files && e.target.files[0];
if(file!== null){
var fileReader = new FileReader();
fileReader.onload = function() {
console.log(fileReader.result, "fileReader")
pdfToPlainText(fileReader.result)
}
fileReader.readAsArrayBuffer(file)
}
}}/>
}
render() {
return (
<div>
{this.GetPdfFromInput()}
</div>
)
}
}