首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PDF转换为文本

将PDF转换为文本
EN

Stack Overflow用户
提问于 2018-02-23 22:25:52
回答 2查看 844关注 0票数 1

我正在开发一个电子应用程序。应用程序应该接收PDF文件并转换为txt。我使用了库PDF2JSON,但是,如果和电子一起使用,它会给出以下worker错误:

代码语言:javascript
复制
Uncaught Error: No PDFJS.workerSrc specified

使用Electron将PDF转换为文本而无需重定向到外部服务器的最佳方法是什么?

代码语言:javascript
复制
  const {dialog} = require('electron').remote;
    const fs = require('fs');
    const PDFParser = require("pdf2json");

    const pdfParser = new PDFParser(this,1);



    document.getElementById('select-file').addEventListener('click',function(){
        dialog.showOpenDialog(function (fileNames) {
            if(fileNames === undefined){
                console.log("No file selected");
            }else{
                const file = fileNames[0];

                pdfParser.on("pdfParser_dataError", errData => console.error(errData.parserError) );
                pdfParser.on("pdfParser_dataReady", pdfData => {
                    fs.writeFile("content.txt", pdfParser.getRawTextContent());
                });

                pdfParser.loadPDF(file);

            }
        });
    },false);
EN

回答 2

Stack Overflow用户

发布于 2019-01-14 23:23:19

我正在开发一个电子应用程序,我也有同样的问题(试着读一个PDF和'No PDFJS.workerSrc specified‘),最后我得到了它。我做了与@slowjack2k相同的想法(但没有coffeescript hehe)。

首先,安装pdf2json

然后,在main.js中

代码语言:javascript
复制
const { ipcMain } = require( 'electron' );
const PDFParser = require( 'pdf2json' );

ipcMain.on( 'prefix-convert-pdf', ( event, file_base_path ) => {
    new PDFParser()
        .on( "pdfParser_dataError", errData => {
            event.sender.send( 'prefix-pdf-converted-error', errData );
        })
        .on( "pdfParser_dataReady", pdfData => {
            event.sender.send( 'prefix-pdf-converted', pdfData );
        })
        .loadPDF( file_base_path );
});

在renderer.js中

代码语言:javascript
复制
const { ipcRenderer } = require( 'electron' );

document.getElementById( 'the-button' ).addEventListener('click', () => {
    ipcRenderer.send( 'prefix-convert-pdf', 'C:\Users\user\Desktop\test\my-pdf.pdf' );
    // Better use require('path'), this is a simple way to understand how it works.
});

ipcRenderer
    .on( 'prefix-pdf-converted-error', ( event, errData ) => {
        console.error( errData );
        //do whatever you want in the DOM
    })
    .on( 'prefix-pdf-converted', ( event, pdfData ) => {
        console.log( pdfData );
        //do whatever you want in the DOM
    });
票数 1
EN

Stack Overflow用户

发布于 2018-02-25 19:29:53

你的代码看起来像是在你的渲染器处理器中做所有的pdf2json工作。在渲染器进程中,您无法获得nodejs的完整功能集。

到目前为止,pdf2json还没有被设计为在浏览器中运行。你可以通过将所有与pdf2json相关的东西放到你的渲染器进程中来让它工作,如下所示:

在渲染器进程中(咖啡脚本):

代码语言:javascript
复制
{app, BrowserWindow, ipcMain} = require('electron')
PDFParser = require("pdf2json")

ipcMain.on 'convert-pdf', (event, path_to_file) ->
  console.log "Converting pdf " + path_to_file
  pdfParser = new PDFParser()

  pdfParser.on "pdfParser_dataError", (errData) ->
    console.error(errData.parserError)

  pdfParser.on "pdfParser_dataReady", (pdfData) =>
    console.log "sending data to renderer process"
    console.log JSON.stringify(pdfData)
    event.sender.send 'pdf-converted',  pdfData

    pdfParser.loadPDF(path_to_file)

在渲染器中:

代码语言:javascript
复制
<a href="#" id="convert-pdf"> doit </a> <span id="pdf-data">0</span>
  <script>
    const {ipcRenderer} = require('electron');
    let link = document.querySelector('#convert-pdf');
    link.addEventListener("click",function (event) {
        event.preventDefault();
        ipcRenderer.send('convert-pdf', '/the/file.pdf');
    },
    false);

    ipcRenderer.on('pdf-converted', (event, data) => {
      let span =  document.querySelector('#pdf-data');
      span.textContent=JSON.stringify(data);
    });
 </script>

您还可以使用remote显示一个对话框(对话框是主流程的一部分)。remote只是以同步方式使用所有消息传递的快捷方式。您可以使用ipcRenderer.sendSync实现相同的效果,并更清晰地将渲染器操作与主操作分开。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48950033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档