• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Seitenanzahl von pdf Dokumenten mit JS auslesen

Genau wie kkapsner sagt. Du hast strawberry schon drauf. Und das Modul ist doch offensichtlich auch schon installiert, sonst hätte dein kleines script in der Konsole nicht funktioniert. Jetzt nur noch den Apache laden und die httpd.conf einstellen. Danach noch ein kleiner Registry Eintrag, falls die Shebang Probleme macht.
...
Ich empfehle Apache. Eine Beispiel Konfig und den Reg-Eintrag kann ich dir später noch raussuchen.
Strawberry drauf, Apache konfiguriert und fertig.
...

Hallo mikdoe,

also ich denke auch, dass für meine Zwecke
Apache und Strawberry völlig ausreichen sollten. Das andere "Zeug" von Xampp brauche ich alles nicht.
Wie gesagt, eigentlich geht es nur um eine automatisierte Präsentation in einem Intranet.
Für die Beispiel Konfig und den Reg-Eintrag nebst Handlungsanweisung;) wäre ich dir sehr dankbar, das mache ich ja schließlich zum ersten Mal.
Vielen Dank, auch an die Kommentatoren Kkapsner und "ein schlauer"
und viele Grüße vom Grünschnabel.
 
Das schon. Aber es kommt auch eine Menge anderes Zeug mit. Man kann den Apache auch solo laden und installieren.
Klar kann man. Die Frage ist aber, er HAT jetzt ein Perl und XAMPP, warum soll er das nicht nutzen?

Zumal er dann den Vorteil hat, zusätzlich PHP, mySQL schon fertig installiert zu haben. Ich hatte das immer von Hand gemacht und fand das nicht toll.


In die Apache Konfiguration (ich weiß nicht, wo XAMPP die platziert, aber die Datei heißt http.conf) müßte folgendes eingetragen werden:

ScriptInterpreterSource registry
Options ExecCGI
AddHandler cgi-script .pl

Nachtrag: und das strawberry Perl muss dann natürlich einen entsprechenden Eintrag in die Registry machen beim installieren - ActiveState tut das auf jeden Fall.

Nachtrag 2: und ich finde, das AS Perl Anfänger freundlicher ist. ppm hat mittlerweile ein grafisches Interface uind du brauchst nicht sowas unnützes (unter windows) wie einen Kompiler.
 
Zuletzt bearbeitet:
Von Active State Perl rate ich zumindest dringend ab. Hat keinen Compiler und manche Module müssen rein compiliert werden. Das macht mit AS einfach keinen Spaß.
und um das noch mal deutlich zu sagen, wenn es ActiveState nicht schafft ein Modul zu kompilieren, dann wird es HeinzX erst recht nicht schaffen (ich im übrigen auch nicht), dass nützt ihm also gar nichts.
Ausser, dass er deutlich mehr Aufwand betreiben muss, bei den Modulen, die unter AS leicht mit ppm zu installieren und upzudaten sind.
 
OK. Also.
Der Regkey ist nur notwendig, wenn die Shebang Zeile nicht beachtet werden soll. Ansonsten reicht es, in der Shebang den korrekten lokalen Pfad zur lokalen perl.exe eintragen. Derzeit hast du /user/bin/perl drin stehen, das dürfte auf einem Windows anders sein.
Falls noch notwendig:
Computer\HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command
Neuer Schlüssel Reg_sz mit dem Wert c:\\Strawberry\\perl\\bin\\perl.exe
Das ist übrigens der RegKey, von dem Schlauer auch spricht, den AS tatsächlich selbst setzt. Aber das halte ich für zumutbar. Deshalb allein würde ich nicht AS sondern trotzdem Strawberry nehmen.
Und wenn das Script ohnehin nur auf einem Windows laufen soll brauchst du den RegKey garnicht, dann setzt du im Script in der Shebang einfach den korrekten Pfad zur perl.exe

Apache Konfig:
Einfach unten einen solchen Abschnitt einfügen:
Code:
<VirtualHost www.meinelokaledomain.de>
ServerAdmin		webmaster@usw.
DocumentRoot		d:/meinpfad_zu_meinen_scripten/public_html
ErrorLog		d:/meinpfad_zu_meinen_scripten/logs/error.log
ScriptAlias		/cgi-bin/		d:/mein_pfad_zu_meinen_scripten/cgi-bin/
</VirtualHost>
Das müsste dann eigentlich schon reichen. Und natürlich die Sachen von Schlauer, die müssen auch rein.
Nach Änderung der httpd.conf muss der Apache restartet werden!!!
 
Zuletzt bearbeitet:
und um das noch mal deutlich zu sagen, wenn es ActiveState nicht schafft ein Modul zu kompilieren, dann wird es HeinzX erst recht nicht schaffen (ich im übrigen auch nicht), dass nützt ihm also gar nichts.
Nicht alle Module müssen kompiliert werden. Sein PDF Modul z.B. muss es nicht. Aber wenn man mal Spaß dran gefunden hat wird man später weitere Module haben wollen und spätestens dann wird AS zu einem Ärgernis.
Ausser, dass er deutlich mehr Aufwand betreiben muss, bei den Modulen, die unter AS leicht mit ppm zu installieren und upzudaten sind.
Mit Aufwand allein ist es nicht getan, man müsste dafür einen separaten Compiler installieren und das ist definitv für Anfänger absolut ungeeignet. Bei Strawberry läuft das alles über die Konsole mit dem CPAN Modul ab.
 
Ich kann nicht sagen, dass AS ein Ärgernis ist.
Ich habe ppm um ein zwei repositories erweitert und bisher alle Pakete die ich gesucht habe gefunden.

Und wie gesagt, du brauchst keinen Kompiler, da fängt doch schon das Ärgernis bei strawberry an. Für Entwickler ist das kein Problem und unter Linuix Standard, für den 08/15 user ein grosse Hürde.

Nützlicher als einen Kompiler finde ich z.b. die genannte Installation von PHP und mysql.

Nachtrag, weil ich den letzten Satz nicht richtig gelesen habe: Nein, du brauchst unter AS keinen Kompiler, alle Module sind fertig kompiliert, im gegensatz zu Strawberry.
 
Nachtrag, weil ich den letzten Satz nicht richtig gelesen habe: Nein, du brauchst unter AS keinen Kompiler, alle Module sind fertig kompiliert, im gegensatz zu Strawberry.
Das ist Quatsch. Ob Module kompiliert sind oder nicht hängt nicht vom installierten Perl sondern vom Modul ab und wo man es her bezieht.
Image::Magick ist ein schönes Beispiel. Versuch das mal auf AS Perl zu installieren. Viel Spaß :)
 
Das ist Quatsch. Ob Module kompiliert sind oder nicht hängt nicht vom installierten Perl sondern vom Modul ab und wo man es her bezieht.
Image::Magick ist ein schönes Beispiel. Versuch das mal auf AS Perl zu installieren. Viel Spaß :)
Nein, du erzählst Quatsch.
AS Module sind für Windows vorkompiliert. Du brauchst definitiv keinen Kompiler unter AS, es sei denn du musst etwas exotischere Module installieren.

Für Image Magick gibt es einen flexibleren Wrapper http://code.activestate.com/ppm/Image-Mate/ Aber letztlich wäre die Installation nicht viel anders als unter Strawberry.

Nachtrag: AS Module sind für alle System vorkompiliert.

Nachtrag 2: Ich habe gerade das gefunden http://www.dylanbeattie.net/magick/downloads.html
NOTE: As of ImageMagick 5.4.8, the official ImageMagick windows installer includes PerlMagick for ActivePerl. Hence I will no longer be providing new binaries of PerlMagick from this site. The official distribution is available from http://www.imagemagick.org/www/windows.html
Du kannst also auch ImageMagick mit ppm installieren. Dann sind es zwei klicks, also durchaus viel Spaß.
 
Zuletzt bearbeitet:
OK, das Thema Compiler ist hier OT. Fragesteller hat Strawberry schon drauf und das kann er nehmen. Tut er ja anscheinend auch.
 
Hallo, hier geht es ja zur Sache!:grin:

Ich wollte eigentlich keine Grundsatzdiskussion vom Zaun brechen. Sicherlich schwört jeder auf den Weg , der für ihn am besten zu gehen ist.
Ich habe in der Zwischenzeit etwas herumgepielt und einfach in die erste Kommandozeile den Strawberrypfad eingetragen und den Apache von Xampp benutzt. Läuft !:cool:
Ich glaube das hatte "ein Schlauer" auch in der Zwischenzeit vorgeschlagen. Dennoch wäre ich ohne mikdoe und Strawberry heute noch nicht soweit. Ich hoffe ihr seid zufrieden mit mir. :rolleyes:
Probiere jetzt mal die Variable der Seitenzahl von Perl an JS zu übergeben und wenn es nicht klappt gibts ja hier eine Menge Leute mit Ahnung.;)
Ich melde mich, wenn es läuft (oder auch nicht). Vielen Dank für eure Hilfe.

Grüße vom Grünschnabel HeinzX
 
Hallo, hier ist wieder mal der Grünschnabel.

Habe ein paar Tage mit dem Lama-Buch von Perl verbracht, bin aber mit meinem Problem noch nicht viel weiter. Vielleicht hier zunächst mal mein Code:

#!"C:\strawberry\perl\bin\perl.exe"

use strict;
use warnings;
use CAM::pDF; # Name of the Perl Module

my $file_name ="S2.pdf"; # Name of the pdf-file
my $pdf = CAM::pDF->new($file_name);
my $pagenum = $pdf->numPages(); # Number of pages pdf-file

print "Content-type: text/html\n\n";
# Begin of html/Js-code
print qq(

<html>
<head>
<script type="text/JavaScript">
<!--
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
}
-->
</script>
</head>
<body onload="JavaScript:timedRefresh(30000);">
<script type="text/JavaScript">
pdfDatei= "$file_name";
MaxAnz=$pagenum;
pdfSeite = new Array(MaxAnz);
Parameter ="<embed src="+pdfDatei+"#pagemode=none&toolbar=0&scrollbar=0&statusbar=0&navpanes=0&zoom='100%'&view=FitV&page="; /*parameter pdf-Pugin Firefox*/
for (i=1;i<=MaxAnz;i++) {
if (MaxAnz==1) {pdfSeite=Parameter+i+" width='100%' height='100%'>"};
if (MaxAnz==2) {pdfSeite=Parameter+i+" width='50%' height='100%'>"};
if (MaxAnz==3) {pdfSeite=Parameter+i+" width='33%' height='78%'>"};
document.write( pdfSeite);
}
</script>
</body>
</html>
); # End of html/js-code
exit;

Nach wie vor soll das Programm erkennen, wie viele Seiten die S2.pdf hat und anschließend eine, zwei oder alle drei Seiten nebeneinander möglichst groß und zentriert auf dem Bildschirm darstellen.
Der Perlcode ermittelt zunächst die Seitenzahl, das klappt auch.
Der eingebettete Html/JS-Code läuft ohne die Einbettung in Perl ebenfalls, wenn ich die Seitenzahl vorher fest als Konstante in das Script eintrage. Die Übergabe der Variablen von Perl an das JS sollten ebenfalls funktionieren. Es ist z.B. kein Problem ein "Alert-Fenster" in die Ausgabe zu schreiben, welches mir die Seitenzahl anzeigt. Aber leider bekomme ich ohne mein "Alert-Fenster" nur einen weißen Bildschirm, der sich wie wie gewollt alle 30 Sekunden aktualisiert. :(
Ist vielleicht eher eine Frage für ein Perl-Forum, aber kann es sein, das ich noch Module außer CAM:pDF benötige? Vielleicht kann ja mikdoe helfen.
Das Perlscript habe ich als Datei.cgi abgelegt und rufe es auch so im Webbrowser auf. Fehlen mir vielleicht CGI_Module, wenn ja welche ?

Also vielen Dank für eure Hilfe, Heinz

PS: Ich hoffe der Code eines Anfängers lässt die Profis nicht zu sehr schmunzeln, die Variablen pdfDatei & MaxAnz sind natürliche überflüssig sidn ein Relikt aus der kopiertern JS-Datei. :)
 
Also bei mir funktioniert dein Script. Weitere Module sind nicht erforderlich.
Zwar werden die Seiten bei mir untereinander angezeigt aber das kann vielleicht an meiner Auflösung liegen.
Der vom Script generierte HTML Code sieht so aus (ich habe mit einem zweiseitigen PDF getestet, die 2 wird sauber eingesetzt, an Perl liegt das nicht).

Code:
<html>                                   
   <head>
      <script type="text/JavaScript">
      <!--
         function timedRefresh(timeoutPeriod) {
           setTimeout("location.reload(true);",timeoutPeriod);
         }
      -->
      </script>
   </head>
   <body onload="JavaScript:timedRefresh(30000);">
     <script type="text/JavaScript">
       pdfDatei= "s2.pdf";         
       MaxAnz=2;
       pdfSeite = new Array(MaxAnz);
       Parameter ="<embed src="+pdfDatei+"#pagemode=none&toolbar=0&scrollbar=0&statusbar=0&navpanes=0&zoom='100%'&view=FitV&page="; /*parameter pdf-Pugin Firefox*/
       for (i=1;i<=MaxAnz;i++) {
         if (MaxAnz==1) {pdfSeite[i]=Parameter+i+" width='100%' height='100%'>"};
         if (MaxAnz==2) {pdfSeite[i]=Parameter+i+" width='50%' height='100%'>"};
         if (MaxAnz==3) {pdfSeite[i]=Parameter+i+" width='33%' height='78%'>"};
         document.write( pdfSeite[i]);
       }
     </script>
   </body>
</html>

Aber leider bekomme ich ohne mein "Alert-Fenster" nur einen weißen Bildschirm, der sich wie wie gewollt alle 30 Sekunden aktualisiert. :(
Das liegt daran, dass dein PDF entweder nicht S2.pdf heißt (Groß- und Kleinschreibung ist bei Perl wichtig!) oder nicht im selben Ordner wie das Script liegt (Pfadangabe fehlt).
Sollte im error.log des Apache eigentlich ersichtlich sein -> liegt in dem Ordner, den du in der httpd.conf definiert hast
Ergänzung: Groß-/Kleinschreibung kann es eigentlich nicht sein, da ja die Seitenzahl bei dir korrekt eingefügt wird. Und die Pfadangabe eigentlich auch nicht, sonst hätte das Perlscript die Datei auch nicht gefunden. Laut deinem Script liegt das PDF im selben Ordner wie das Script selbst, sonst würde das nicht klappen. Kann nur sein, dass dein Apache noch nicht korrekt konfiguriert ist.
Versuch doch mal bitte, das PDF direkt über deinen lokalen Apache anzusprechen ohne das Perlscript. Vielleicht stimmt auch was nicht mit dem PDF Plugin deines Browsers?
 
Zuletzt bearbeitet:
Habe ein paar Tage mit dem Lama-Buch von Perl verbracht, bin aber mit meinem Problem noch nicht viel weiter. Vielleicht hier zunächst mal mein Code:
was mich wundert, wozu machst du diesen refresh?

Ich sehe hier auch kein Perlproblem mehr, es wäre wichtig zu sehen, wie der HTML Code der im Browser ankommt aussieht
 
Hallo alle zusammen,

also vielen Dank mikdoe, das du mein script ausprobiert hast. Da fält mir ja schon einmal ein Stein vom Herzen, dass es bei dir läuft. Ich werde vielleicht den Apache noch mal neu installieren, das sollte ich noch hinbekommen. Mir hilft die Information, dass nichts mehr am Programm falsch ist, enorm weiter.
Also nochmals vielen Dank euch allen, eure Hilfe war großartig.

Viele Grüße Heinz (Jetzt schon Jungspund!)

PS: Der Refresh ist dazu gedacht, dass das pdf-Dokument im laufenden Betrieb durch ein anderes pdf-Dokument gleichen Namens ersetzt werden kann, sich also die angezeigten Informationen aktualisieren.
 
das pdf-Dokument im laufenden Betrieb durch ein anderes pdf-Dokument gleichen Namens ersetzt werden kann, sich also die angezeigten Informationen aktualisieren.
Das kannst du später dann auch wunderbar mit einem Perlscript regeln. Frag einfach, wenn es soweit ist, wir helfen dir.
 
Hallo alle zusammen,

da bin ich wieder, und leider keinen Meter weiter.

Also hier ist der Quelltext, der vom Webbrowser (Firefox) angezeigt wird, unterscheidet sich wahrscheinlich nicht von dem was mikdoe schon vor Tagen hier hochgeladen hat:

<html>
<head>
<script type="text/JavaScript">
<!--
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
}
-->
</script>
</head>
<body onload="JavaScript:timedRefresh(30000);">
<script type="text/JavaScript">
pdfDatei= "S2.pdf";
MaxAnz=2;
pdfSeite = new Array(MaxAnz);
Parameter ="<embed src="+pdfDatei+"#pagemode=none&toolbar=0&scrollbar=0&statusbar=0&navpanes=0&zoom=100%&view=FitV&page="; /*parameter pdf-Pugin Firefox*/
for (i=1;i<=MaxAnz;i++) {
if (MaxAnz==1) {pdfSeite=Parameter+i+" width=100% height=100%>"};
if (MaxAnz==2) {pdfSeite=Parameter+i+" width=50% height=100%>"};
if (MaxAnz==3) {pdfSeite=Parameter+i+" width=33% height=78%>"};
document.write( pdfSeite);
}
</script>
</body>
</html>

Leider immer noch alles weiß!:icon8: (Zumindest die angezeigte Website)


Die Logdateien + Fehler sehen z.B. so aus:

[22:03:09.617] GET http://127.0.0.1/cgi-bin/vp5.cgi [HTTP/1.1 200 OK 265ms]
[22:03:10.147] GET http://127.0.0.1/cgi-bin/S2.pdf#pag...usbar=0&navpanes=0&zoom=100%&view=FitV&page=1 [HTTP/1.1 500 Internal Server Error 0ms]
[22:03:10.171] GET http://127.0.0.1/cgi-bin/S2.pdf#pag...usbar=0&navpanes=0&zoom=100%&view=FitV&page=2 [HTTP/1.1 500 Internal Server Error 0ms]

Ich habe keine Ahnung, was ich noch versuchen soll!:(

Ansonsten hätte ich noch eine Frage zum Refresh, wäre es besser diesen im Perlscript anstelle in JS zu programmieren?

Viele Grüße vom Heinz

PS: Ich habe Xampp neu installiert, kann es vielleicht immer noch an fehlerhaften Einstellungen des apache liegen?
 
Der Internal Server Error lässt darauf schließen, dass etwas mit einem Server-Script nicht so läuft, wie es soll. Was genau wird bei /cgi-bin/S2.pdf aufgerufen?
 
Zurück
Oben