在Linux中以编程方式运行pdftotext x.pdf y.txt?

时间:2019-01-13 09:33:28

标签: c fork pdftotext

char *readFile(char *path, char *buffer) {

    if(strcmp(getExtenstion(path), "pdf") == 0){
        pid_t pid = fork();
        if(pid == 0) {
            execlp("pdftotext", path, "henok.txt");
        }

        wait(NULL);
        readTextFile("henok.txt", buffer);
    }

    else {
        readTextFile(path, buffer);
    }

    return buffer;
}

我想用c读取pdf文件,但是在网上搜索后,我知道直接读取pdf文件太难了,因此我在Linux中使用pdftotext命令行工具将pdf转换为txt文件。转换pdf后,我可以读取txt文件。

-> pdftotext shell.pdf henok.txt

在外壳中工作正常,但我想以编程方式运行此命令。

以上命令显示错误,I / O错误:无法打开文件“ henok.txt”:没有此类文件或目录。

1 个答案:

答案 0 :(得分:1)

子进程在启动“ pdf2text”之后结束,而不是在pdf2text完成转换后结束。当父进程检测到子进程结束时,尚未创建文本文件。为此,子进程应控制“ pdf2text”执行的完成。为简化起见,您无需派生,只需使用“ system”命令即可。例如,

// 20 is length of "pdf2text" + length of "henok.txt" + 2 spaces + NULL character
char * cmd = malloc (20 + strlen (path)); 
sprintf(cmd, "pdf2text %s henok.txt", path);
system(cmd);
free(cmd);