3

PDFlib ファミリーの製品である TET.EXE という名前のツールを持っています。これは、特定のテキストの座標を抽出するために使用されます。これらの座標を Perl スクリプトで使用して、必要なテキストを抽出できます。これは、.EXE を実行してから Perl に座標を渡すための手動プロセスです。

つまり、Perl スクリプト自体が .EXE を実行し、必要な座標を取得してテキストを抽出する必要があるということです。この perl スクリプトを実行するために Linux で使用するコマンドは何ですか? お願いします、次のことについてあなたの提案が必要です。
前もって感謝します。

4

6 に答える 6

10

私の理解が正しければ、perl に実行可能ファイルを起動させ、標準出力に出力されたテキストで何かをさせたいと考えています。その場合、いくつかのオプションがあります。

バックティックの使用:

my $output = `TED.EXE`;

これにより、TED.EXE コマンドの出力が変数 $output に入れられ、必要なものには十分な可能性が高くなります。

IPC::Open3 を使用:

use IPC::Open3;
my($wtr, $rdr, $err);
my $pid = open3($wtr, $rdr, $err,
                'some cmd and args', 'optarg', ...);

これにより、コマンドが実行され、$wtr、$rdr、および $err が標準入力、出力、およびエラー ストリームに関連付けられます。

あなたが望むことをする他の方法があります(Expect.pmRun3など)が、上記で十分だと思います。

于 2009-04-15T11:45:22.983 に答える
6

Perlは、外部プログラムを実行してその出力を収集するための多くのメソッドを提供します。tet.exeを見ると、open関数を使用し、正規表現を使用して出力をループして座標を見つけるのが最善の策だと思います。

open my $pdftext, "-|", "/path/to/tet.exe", "--text", $pdffile
    or die "could not open $pdffile using tet.exe: $!";

my ($x, $y);
while (my $line = <$pdftext>) {
    last if ($x, $y) = $line =~ /regex that matches the coords/;
}
die "file did not contain coordinates" unless defined $x;
于 2009-04-15T12:00:31.230 に答える
2

TET.EXE がコンソールに出力する場合、その出力を次のコマンドでキャプチャできます。

my $tetOutput = `tet.exe /myoptions`;

それについて読みたい場合は、「perl backtick」を検索してください

于 2009-04-15T11:37:22.520 に答える
2

質問がわかりませんが、次の可能性があります。

my $result = qx{TET.EXE some.pdf some params};
于 2009-04-15T11:41:22.760 に答える
1

別のアプローチを検討することもできます: Perl ライブラリを使用して座標を抽出します

于 2009-04-16T02:43:01.267 に答える
0

perlipcのドキュメントには、Perl から外部プロセスと対話する多くの方法が示されています。

多くの人がバッククォートを使用するように言いますが、オペレーティング システム固有の癖を処理することで、同じことを行うためのより堅牢な方法を提供するIPC::System::Simpleを確認することもできます。

于 2009-04-16T16:44:27.433 に答える