1

一部の PDF ファイルを TXT に変換する必要があります。たとえば、pdftotextにはPDFのテーブルに問題があるため、「less」コマンドになります。問題は、exec 関数 (または shell_exec/system) からコマンドを実行したときに、情報を表示するだけでなく、選択した PDF がバイナリ ファイルであり、結果ファイルが PDF データを含む TXT であることです。しかし、ターミナルで通常どおり同じことを行うと、すべて問題ありません。また、www_data ユーザーでログインして、このユーザーでコマンドを実行してみましたが、これも問題ありません。

指示:

$ less /var/www/original.pdf > /var/www/new.txt

PHP コード:

exec("less -f /var/www/original.pdf > /var/www/new.txt 2>&1");

PHP exec の結果:

"/var/www/original.pdf" may be a binary file.  See it anyway?

exec コマンドの「-f」オプションがあるのは、「はい、とにかく見たい」という理由で「y」を押す必要がないためです。

set | grep less収量:

LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
            Lossless LZW RLE Zip' -- "$cur" ));
                _apport_parameterless
                _apport_parameterless
                _apport_parameterless
                _apport_parameterless
_apport_parameterless () 
4

3 に答える 3

1

私が読んだところによると、またはlessのような入力プリプロセッサがインストールされているため、コンソールはPDFファイルを表示できます。これらのプリプロセッサを使用する方法は、スクリプトを指すLESSOPENと呼ばれる環境変数を読み取ることです。lesspipelessfilelesslesspipelessfile

lessWebサーバーが、環境変数とシェルコマンドを使用してこの動作を複製し、 PDFを適切に解析するための呼び出しを実行できる方法があるかもしれません。

私が提案するのは、less直接呼び出すのではなく、bashスクリプトを呼び出して変換を行うことです。そうすれば、bashスクリプトは適切な環境変数を設定し、適切なコマンドを実行してPDFファイルを読み取り可能な出力に変換することができます。

これを行う方法の例を次に示します。

#!/bin/bash

eval $(lesspipe)
less $1 > $2 2>&1

次に、PHPから、次のようにそのスクリプトを呼び出します。

exec("/path/to/your/script/script.sh /var/www/original.pdf /var/www/new.txt");

うまくいかない場合は、に変更eval $(lesspipe)してみてくださいeval $(lessfile)

于 2012-10-03T14:28:18.590 に答える
0

まず、less はテキスト ストリームを読み取るための対話型プログラムです。このコンテキストでは、cat代わりに使用する必要があります。PDFはテキストベースではなくバイナリ形式であるため、これまたはコースは機能しません。

のようなPDFからテキストへのコンバーターを使用しないのはなぜpdftotextですか?

于 2012-10-03T13:36:07.983 に答える
0

PHPコードはどのように実行されましたか? コマンドラインで、php file.phpまたはブラウザでヒットしたときにWebサーバーを介して、またはWebサーバーによってhttp://servername/something/file.php

1 つの推測ではless、コマンド ラインで実行する場合とlessPHP コードを実行する場合は同じではありません。

于 2012-10-03T14:14:42.100 に答える