Herbert Kleebauer
2011-10-27 20:00:26 UTC
Von einem "halbwegs aufgeklärter PC-Benutzer" erwarte ich eigentlich,
Umso besser, dann lies. Ich hab's Dir in der Jpg-Pdf.bat in<http://pixelfragment.de/software/jpg2pdf.zip> kommentiert.
Problem wenn ich deinen Text hier zitiere um meine Anmerkungen
zu machen. Es ist zwar inzwischen off-topic aber in einer alt-Gruppe
muß das schon mal erlaubt sein, zumal ein paar batch-Kenntnisse auch
für einen Digitalfotografen nützlich sein können.
Konnte mir auch einen Crosspost nach de.comp.os.msdos nicht
verkneifen. Die Leute dort können sicher auch von deiner
Anleitung zum korrekten batch-programmieren profitieren.
@echo off
REM --------------------------------------------------------REM Quellvermerk
REM --------------------------------------------------------
REM | Newsgroups: de.alt.rec.digitalfotografie
REM | Subject: pdf Diashow
REM | Date: Sun, 23 Oct 2011 20:12:04 +0200
REM | Habe mir gerade eine kleien batch-Datei geschrieben...
REM | http://www.bitlib.de/jpg2pdf.zip
REM --------------------------------------------------------
Setlocal
wenn man später zum augenblicklichen Stand der Umgebungsvariblen
zurückkehren will. Nach Beendigung diese Batch schließt sich das CMD
Fenster und alle Änderungen sind sowieso weg.
Echo.
REM *Schlamperei*: Prüfung, ob überhaupt JPEGs in diesem Verzeichnis
REM *Schlamperei*: existieren, hat gefehlt. Wer will schon eine Dia-Show ohne
REM *Schlamperei*: Dias?
Mit welchem Recht willst du dem Anwender vorschreiben wie viele BilderREM *Schlamperei*: Prüfung, ob überhaupt JPEGs in diesem Verzeichnis
REM *Schlamperei*: existieren, hat gefehlt. Wer will schon eine Dia-Show ohne
REM *Schlamperei*: Dias?
er in seiner Diashow haben will? Wenn er 100 will, bekommt er 100. Wenn
er nur eins will bekommt er eins und wenn er keines will, bekommt er
eben eine Diashow mit keinem Bild. Hast du die Batch mal in einem
Ordner ohne *.jpgs gestartet? Es entsteht sehr wohl eine gültige
pdf-Datei, eben mit null Bildern.
If not exist .\*.jpg (
Echo In diesem Verzeichnis wurden keine JPEGs gefunden.
Echo.
Pause
Goto :Ende
)
REM *Schlamperei*: ist, einer PDF-Datei zu erlauben, darüber zu bestimmen, wie
REM *Schlamperei*: sich das anzeigende Programm zu verhalten hat. Ein halbwegs
REM *Schlamperei*: aufgeklärter Anwender wird das nicht zulassen, sondern
REM *Schlamperei*: *selbstverständlich* seinen PDF-Viewer so einstellen, wie er
REM *Schlamperei*: es *selber* für richtig hält. Dann darf bezweifelt werden,
REM *Schlamperei*: daß sich eine Datei die Frechheit herausnehmen darf, zu
REM *Schlamperei*: bestimmen, ob z. B. Symbolleisten ausgeblendet werden oder
REM *Schlamperei*: in Vollbild-Ansicht umgeschaltet wird. Aufgeklärte Anwender
REM *Schlamperei*: legen sowas selber fest.
Nein, das stimmt immer. Der Benutzer kann dem Acrobat Reader untersagen die Diashow imEcho In diesem Verzeichnis wurden keine JPEGs gefunden.
Echo.
Pause
Goto :Ende
)
:: Erzeugt aus jpeg-Datein eine pdf-Diashow
REM *Schlamperei*: Das stimmt nur unter der Maßgabe, daß der Anwender so blödREM *Schlamperei*: ist, einer PDF-Datei zu erlauben, darüber zu bestimmen, wie
REM *Schlamperei*: sich das anzeigende Programm zu verhalten hat. Ein halbwegs
REM *Schlamperei*: aufgeklärter Anwender wird das nicht zulassen, sondern
REM *Schlamperei*: *selbstverständlich* seinen PDF-Viewer so einstellen, wie er
REM *Schlamperei*: es *selber* für richtig hält. Dann darf bezweifelt werden,
REM *Schlamperei*: daß sich eine Datei die Frechheit herausnehmen darf, zu
REM *Schlamperei*: bestimmen, ob z. B. Symbolleisten ausgeblendet werden oder
REM *Schlamperei*: in Vollbild-Ansicht umgeschaltet wird. Aufgeklärte Anwender
REM *Schlamperei*: legen sowas selber fest.
Vollbildmodus abzuspielen, daß ändert aber nichts daran, daß die pdf-Datei eine Diashow
enthält. Genauso kann sich der Benutzer dazu entscheiden, eine normale Text-pdf-Datei
im Vollbildmodus automatisch abspielen zu lassen. Aber das macht die Text-pdf-Datei
nicht zu einer Diashow, es kommt eben auf den Inhalt der Seiten an.
:: Alle Bilder (Namen ohne Leerzeichen!), diese batch-Datei und mpdf2.exe
:: in einen Ordner kopieren und dann diese Batch ausführen.
REM *Schlamperei*: *Selbstverständlich* sind Leerzeichen überhaupt kein:: in einen Ordner kopieren und dann diese Batch ausführen.
REM *Schlamperei*: Problem, wenn man es richtig[tm] macht.
makepdf2.exe weigern, solche jpg-Dateien zu akzeptieren. Im übrigen machen
Dateinamen mit Leerzeichen sehr wohl häufig Probleme in Batch-Programmen.
Auch in menschlichen Namen gibt es kein Leerzeichen (Hans-Michael ist ein
Vorname, Hans Michael dagegen sind zwei getrennte Vornamen). In der nächsten
Programmiersprache dürfen dann vermutlich auch Variablennamen Leerzeichen
enthalten (gleiches Recht für alle).
REM *Schlamperei*: *Selbstverständlich* kann man diese Geschichte auch so
REM *Schlamperei*: regeln, daß kein Anwender gezwungen ist, seine
REM *Schlamperei*: Datenverzeichnisse mit Programmen zu versauen. Sowas
REM *Schlamperei*: verstößt eklatant gegen grundlegende Richtlinien der
REM *Schlamperei*: Datenhaltung, nämlich die Trennung von Daten und Code.
Selbstverständlich kann man die Bedienung der Batch umständlich machen indem manREM *Schlamperei*: regeln, daß kein Anwender gezwungen ist, seine
REM *Schlamperei*: Datenverzeichnisse mit Programmen zu versauen. Sowas
REM *Schlamperei*: verstößt eklatant gegen grundlegende Richtlinien der
REM *Schlamperei*: Datenhaltung, nämlich die Trennung von Daten und Code.
jedesmal Qell- und Zielordner (und die restlichen Parameter) abfragt. Man kann es
aber auch benutzerfreundlich machen, so daß ein Dopelclick auf die Batch ausreicht.
:: Groesse des Albums in cm
REM *Schlamperei*: Was'n das für'n Krampf? Auf welchem Monitor wird dieREM *Schlamperei*: Auflösung in cm angegeben? Und wo ist die Erklärung dafür,
REM *Schlamperei*: warum das angeblich nötig sein soll bzw. angeblich nicht
REM *Schlamperei*: anders geht? Und wo steht der *einleitende* Hinweis, daß der
REM *Schlamperei*: Anwender erst mal seinen Monitor vermessen muß?
REM *Schlamperei*: Und warum kann das nicht (wahlweise) in Pixeln angegeben
REM *Schlamperei*: werden, wenn doch anscheinend das Batch aus derselben Quelle
REM *Schlamperei*: stammt, nämlich von "Herbert Kleebauer" (falls er denn
REM *Schlamperei*: tatsächlich so heißt)?
werden nicht in Pixeln sondern in cm bzw. inch angegeben (zu finden unter
File->Properties->Description). Warum sollte der Anwender seinen Monitor vermessen
sollen? Die Größe des Monitors spielt überhaupt keine Rolle. Es ist allerdings
sinnvoll, das Seitenverhältnis der pdf-Datei entsprechend dem Seitenverhältnis
des Monitors zu wählen, weil dann die Monitorfläche optimal ausgenutzt wird.
:: sollte am Besten dem Seitemverhaeltnis des Monitors entsprechen
:: d.h. fuer eien 16:9 Monitor z.B. 32 cmm x 18 cm
set x=32
set y=18
REM *Schlamperei*: Wieso geht das nicht anders, wenn doch das Batch offenbar:: d.h. fuer eien 16:9 Monitor z.B. 32 cmm x 18 cm
set x=32
set y=18
REM *Schlamperei*: aus derselben Quelle wie die damit promotete makepdf2.exe
REM *Schlamperei*: stammt?
ein DIN A0 Plakat haben will, wenn er es nicht auf irgend eine Weise mitteilt?
:: Hintergrundfarbe rot/gruen/blau (0..1)
::set color=.333 .333 .333
REM *Schlamperei*: Wo ist die Kommentierung für dieses Beispiel?::set color=.333 .333 .333
und ist wohl selbsterklärend.
REM *Schlamperei*: Warum kein Beispiel, etwa für Schwarz?
REM set color=0 0 0
REM *Schlamperei*: Warum kein Beispiel, etwa für Mittelgrau?
REM set color=.5 .5 .5
Was ist an diesen Beispielen besser als an dem benutzten Grau und Dunkelbraun?REM set color=0 0 0
REM *Schlamperei*: Warum kein Beispiel, etwa für Mittelgrau?
REM set color=.5 .5 .5
Oder erwartest du in einer ASCII Batch-Datei ein Farbbild mit der Zuordnung
von rgb-Werten zu Farben?
set color=.2 .1 0
REM *Schlamperei*: Wer will den Hintergrund für seine Bilder dermaßenREM *Schlamperei*: ... äh ... /strange/? Und wo ist die Erklärung dafür?
Wie du vermutlich bemerkt hast, habe ich es zuerst mit dem gleichen Grau
(.333 .333 .333) versucht, das auch der Acrobat Reader anzeigt, war damit
aber nicht zufrieden.
:: Anzeigedauer pro Bild, 0 fuer unendlich
REM *Schlamperei*: Anzeigedauer in welcher Einheit? In Sternzeit?ergibt sie sich ja auch klar aus dem Kontext. Wenn du mit Tempo 80 in der
Stadt geblitzt wirst, dann sind das auch keine Meilen/h oder m/s sondern km/h
ohne daß das extra erwähnt werden muß.
REM *Schlamperei*: Anzeigedauer unter welchen Bedingungen?
Ganz klar unter der Bedingung, daß du dem Reader erlaubst die Diashow auchabzuspielen. Aber auch das sollte doch wohl klar sein.
set dur=2
set /a x=x*7200/254
REM *Schlamperei*: Wo ist die Kommentierung dafür?set /a x=x*7200/254
teile das Ergebnis durch 254 und speichere dieses Ergebnis in der
Variablen x" erklären als durch "set /a x=x*7200/254" ?
set /a y=y*7200/254
REM *Schlamperei*: Wo ist die Kommentierung dafür?set /a x2=x/2
REM *Schlamperei*: Wo ist die Kommentierung dafür?set /a y2=y/2
REM *Schlamperei*: Wo ist die Kommentierung dafür?set n=0
REM *Schlamperei*: Wo ist die Kommentierung dafür?set nl=
REM *Schlamperei*: Wo ist die Kommentierung dafür?weiß daß das die Variable nl löscht und jemand anderer wird
die Batch wohl gar nicht ansehen.
set k=1
REM *Schlamperei*: Wo ist die Kommentierung dafür?tmp.pex echo ^<paper %x% %y% fullscreen %dur%
for /f "tokens=*" %%i in ('dir /b *.jpg') do (
set /a n=n+1
REM *Schlamperei*: Wo ist die Kommentierung für diesen Block?set /a n=n+1
tmp.pex call echo jpg+ %%n%% %%i)
tmp.pex echo ^>
tmp.pex echo ^>
for /l %%i in (1,1,%n%) do call :sub %%i
REM *Schlamperei*: Wo ist die Kommentierung dafür?if exist tmp.pdf del tmp.pdf
REM *Schlamperei*: Wo ist die Kommentierung dafür? Und was passiert, wenn dasREM *Schlamperei*: Batch wiederholt gestartet wird, die Datei aber noch
REM *Schlamperei*: geöffnet ist? Wo ist die Fehlerprüfung bzw. die korrekte
REM *Schlamperei*: Implementierung?
Nun, was passiert, wenn du eine Textdatei löschst während sie in einem Editor nochREM *Schlamperei*: geöffnet ist? Wo ist die Fehlerprüfung bzw. die korrekte
REM *Schlamperei*: Implementierung?
bearbeitest wird? Was ist die korrekte Implementierung?
:: http://www.bitlib.de/pub/pdf/makepdf.zip
REM *Schlamperei*: Warum wird das nirgends erwähnt, daß die ganze Nummer mitREM *Schlamperei*: dem Batch offenbar eine Promotion-Sache für dieses Programm
REM *Schlamperei*: ist?
REM *Schlamperei*: Was ist für ein Krampf, daß diese makepdf2.exe noch nicht
REM *Schlamperei*: einmal den üblichen Parameter '/?' versteht?
Das ist ein 15 Jahre altes, triviales C Programm (gerade mal 1000 Zeilen incl. Leerzeilen)
das nichts macht als eine Eingabedatei in eine Ausgabedatei umzukopieren, die Möglichkeit
bietet pdf-Kommandos einzufügen und am Schluß die xref-Tabelle hinzufügt. Es kann auch keine
jpegs dekodieren, sonder kopiert sie unverändert (incl. aller Header) in die pdf-Datei.
Der einzige Zweck war die pdf-Spezifikation anhand von kleinen selbst gemachten
pdf-Dateien zu verstehen (habe mich damals sehr geärgert, daß im Netz immer mehr
(ASCII-)PS- durch (binäre) pdf-Dateien ersetzt wurden und wollte daher das Format
näher kennenlernen). Immerhin hat es dazu geführt, daß Adobe Version 3.01 nachreichen
mußte, weil bis 3.0, ganz der Spezifikation entsprechend, vom Benutzer unbemerkt beliebiger
Code auf dem Rechner ausgeführt werden konnte.
makepdf2 tmp.pex tmp.pdf
REM *Schlamperei*: Wo ist die Kommentierung dafür?http://www.bitlib.de/pub/pdf/makepdf.zip
if exist tmp.pex del tmp.pex
REM *Schlamperei*: Wo ist die Kommentierung dafür?start tmp.pdf
goto :eof
REM goto :eofgoto :eof
REM *Schlamperei*: Dies kann mißverstanden werden. Warum wird nicht einfach
REM *Schlamperei*: explizit zu den Aufräumarbeiten gesprungen, obwohl doch
Goto :Ende
:sub
set /a j=%k%-(!(%1 %% 10))
REM *Schlamperei*: Wo ist die Kommentierung dafür?set /a j=%k%-(!(%1 %% 10))
tmp.pex echo %nl%{%color% rg 0 0 m %x% 0 l %x% %y% l 0 %y% l h f}
Wer eine pdf-Diashow will, sollte unbedingt diese 1300 Seiten gelesen haben!
tmp.pex echo ^<outline %j% [Seite %1] pict+ %1 -%x2% -%y2% -%x% -%y%^>
set nl=\f
REM *Schlamperei*: Wo ist die Kommentierung dafür?set k=2
REM *Schlamperei*: Wo ist die Kommentierung dafür?Goto :Eof
s.o.:Ende
Endlocal
"setlocal /?" sollte dir erklären warum das keinen Sinn macht.Endlocal
REM Echo.
REM Pause
Zwei wichtige Kommentare zum Schluß?????REM Pause
Echo.
Da braucht man schon ein sehr schnelles Auge um diese Leerzeile zusehen bevor das CMD-Fenster geschlossen wird (vom Sinn der Leerzeile
ganz abgesehen)