Frage

Ich muss einige PDF-Dateien in TXT konvertieren.Am Ende habe ich den Befehl „less“, weil pdftotext beispielsweise einige Probleme mit Tabellen in PDF hat.Das Problem besteht darin, dass die ausgewählte PDF-Datei eine Binärdatei und die Ergebnisdatei nur eine TXT-Datei mit PDF-Daten ist, wenn ich den Befehl über die Exec-Funktion (oder Shell_exec/system) ausführte, und nicht nur, um mir Informationen anzuzeigen.Aber wenn ich das Gleiche normal im Terminal mache, ist alles in Ordnung.Ich habe auch versucht, mich als www_data-Benutzer anzumelden und den Befehl als dieser Benutzer auszuführen, aber es gibt auch kein Problem.

Befehl:

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

PHP-Code:

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

Ergebnis von PHP exec:

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

Die Option „-f“ im Befehl exec ist vorhanden, da Sie dann nicht „y“ für „Ja, ich möchte es trotzdem sehen“ drücken müssen.

set | grep less Erträge:

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 () 
War es hilfreich?

Lösung

Nach dem, was ich gelesen habe, kann Ihre Konsole eine PDF-Datei mit anzeigen less weil Sie einen Eingabepräprozessor installiert haben, z lesspipe oder lessfile.Der Weg zum Machen less Verwenden Sie diesen Präprozessor, indem Sie eine Umgebungsvariable namens LESSOPEN lesen, die auf zeigt lesspipe Und lessfile Skript.

Möglicherweise kann Ihr Webserver mithilfe von Umgebungsvariablen und Shell-Befehlen dieses Verhalten reproduzieren, sodass Ihre Aufrufe zu less PDFs richtig analysieren.

Was ich vorschlagen würde, wäre, ein Bash-Skript aufzurufen, um die Konvertierung für Sie durchzuführen, anstatt es aufzurufen less direkt.Auf diese Weise wäre Ihr Bash-Skript in der Lage, die entsprechenden Umgebungsvariablen festzulegen und die entsprechenden Befehle auszuführen, um Ihre PDF-Dateien in eine lesbare Ausgabe zu konvertieren.

Hier ist ein Beispiel dafür:

#!/bin/bash

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

Rufen Sie dann in PHP das Skript wie folgt auf:

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

Wenn es nicht funktioniert, versuchen Sie es zu ändern eval $(lesspipe) Zu eval $(lessfile).

Andere Tipps

Zunächst einmal ist weniger ein interaktives Programm, um Textströme zu lesen.In diesem Zusammenhang sollten Sie stattdessen generasAdicetagcode verwenden.Dieser oder der Kurs funktioniert auch nicht, da PDF ein binäres Format ist, im Gegensatz zu Text basierend.

Warum verwenden Sie nicht ein PDF-Text-Konverter wie cat?

Wie wurde der PHP-Code ausgeführt?Auf der Befehlszeile über php file.php oder von einem Webserver, wenn Sie mit einem Browser darauf zugreifen http://servername/something/file.php?

Eine Vermutung ist, dass die less Sie ausführen, wenn Sie es in der Befehlszeile ausführen, ist nicht dasselbe less B. wenn der PHP-Code ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top