Manchmal muss man wissen, wo die Datei zu einem ausgedruckten PDF-Dokument auf der Festplatte liegt. Wenn das Programm, mit dem Sie PDFs erstellen, den Dateinamen und Ablageordner nicht mit ausgeben kann, lässt sich das Problem mit einem Javascript lösen.
Auch Adobe Reader XI lässt sich mit Scripts erweitern. Diese müssen unter %appdata%\Adobe\Acrobat\Privileged\11.0\JavaScripts liegen. Bei Acrobat DC heißt der Pfad %appdata%\Adobe\Acrobat\Privileged\DC\JavaScripts. Scripts für alle Benutzer gehören in den Installationsordner, beispielsweise nach C:\Program Files (x86)\Adobe\Reader 11.0\Reader\Javascripts. Laden Sie die Datei PrintFooter herunter (aktualisierte Version 2.2, April 2014), entpacken Sie diese und kopieren Sie sie in das gewünschte Verzeichnis.
PrintFooter 2.2
Lizenz: GNU Lesser General Public License
Wichtig: Damit neuere Versionen des Adobe Acrobat Readers das Menü anzeigen, welches das vom Javascript erstellte Menü anzeigen, klicken Sie links oben auf „Menü“, wählen „Neue Acrobat Reader-Ansicht deaktivieren“ und starten das Programm neu.
Hinweis: Das Script funktioniert nur ab Adobe Reader XI und auch mit Acrobat Reader DC. In älteren Versionen lassen sich per Script keine Formularfelder einbauen.
Eine alternative Lösung für Besitzer von Adobe Acrobat Pro habe ich im Artikel „Adobe Acrobat Pro: Fußzeilen mit Javascript-Aktion erstellen“ vorgestellt. Eine Lösung ohne Adobe Acrobat Pro ist im Artikel „Fußzeilen in PDFs per Batch-Verarbeitung erstellen“ zu finden. Auf beiden Wegen lassen sich Fußzeilen auch in mehrere PDF-Dateien einfügen.
Starten Sie Adobe Reader neu und öffnen Sie eine PDF-Datei. Im Menü „Datei“ sehen Sie jetzt den neuen Menüpunkt „Fußzeile -> Setze Fußzeile“. Nach einem Klick darauf setzt das Script Datum und Uhrzeit, den Pfad der Datei und die Seitenzahl in alle Seiten des Dokuments ein. Sie können es dann ausdrucken oder mit den Zusatzinfos speichern. Mit „Fußzeile -> Entferne Fußzeile“ löschen Sie die Informationen wieder.
Über den Menüpunkt „Datei -> Fußzeile -> Dateiname nur erste Seite“ können Sie den Dateinamen mit Pfad nur in die erste Seite eines Dokuments einbauen.
Script anpassen
Welche Infos das Script im Dokument unterbringt, können Sie selbst festlegen. Öffnen Sie die JS-Datei in einem Texteditor (rechter Mausklick und „Öffnen mit -> Editor“). Drei Varianten sind bereits vorkonfiguriert. Ändern Sie hinter „app.addMenuItem“ beispielsweise „SetFooter(1)“ auf „SetFooter(2)“. Dann werden nur Datum, Uhrzeit und Dateiname eingesetzt. Ersetzen Sie „2“ durch „3“, um nur die Seitenzahlen in der Form „Seite X/X“ einzubauen. Nach Änderungen im Script müssen Sie Adobe Reader neu starten. „4“ baut den Dateinamen ohne Dateinamenserweiterung ein (ohne ‑pdf).
Wenn Sie möchten, können Sie den Varianten auch jeweils eigene Menüpunkte spendieren. Dazu führen Sie neuen Zeilen nach dem Muster „app.addSubMenu“ hinzu. Beispielsweise:
app.addMenuItem({ cName: "Setze Seitenzahlen", cParent: "Footer", cExec: "SetFooter(3)"});
app.addMenuItem({ cName: "Entferne Seitenzahlen", cParent: "Footer", cExec: "RemoveFooter()"});
Sie können auch nur den Dateinamen statt des kompletten Pfades einbauen. In diesem Fall ändern Sie die Zuweisung hinter „var FileNM“ auf „this.documentFileName“.
Wenn Sie das Datumsformat anpassen möchten, ändern Sie die Angaben hinter „AcDateFormat“. „dd.mm.yyyy HH:MM“ gibt Tag, Monat, Jahr, Stunden und Minuten aus, „yyyy/mm/dd“ dagegen Jahr, Monat und Tag ohne Uhrzeit.
Das Script wandelt die plattformunabhängigen Pfade (C/Ordner/Dateiname) in Windows-Pfade um (C:\Ordner\Dateiname). Wenn Sie das nicht wünschen, ändern Sie in der Funktion SetFooter() „var FileNM = PathToWinPath(pathArray);“ auf „var FileNM = this.path“ beziehungsweise in SetFooterFirstPage() „var sFilePath=PathToWinPath(pathArray);“ auf „var sFilePath=this.path“.
Die Funktion SetFooterFirstPage() baut den Dateinamen nur in die erste Seite eines Dokuments ein. Wenn Sie ihn nur auf der zweiten Seite wünschen, ändern Sie „var p = 0;“ in „var p = 1;“.
Hier das komplette Javascript (Download ZIP-Datei: PrintFooter)
//PrintFooter v2.2
//Thorsten Eggeling
//
//SetFooter(1) erstellt
//Datum, Uhrzeit, Dateiname und Seitenzahl (Seite X/X)
//SetFooter(2) erstellt
//Datum, Uhrzeit, Dateiname
//SetFooter(3) erstellt
//Seitenzahlen (Seite X/X)
//SetFooter(4) erstellt ein Dokument mit
//nur Dateiname ohne Erweiterung auf allen Seiten
//SetFooterFirstPage() erstellt ein Dokument mit
//Dateiname nur auf der ersten Seite
//RemoveFooter() entfernt die Fußzeilen von allen Seiten
app.addSubMenu({ cName: "Footer",cUser: "Fußzeile", cParent: "File", nPos: 20 });
app.addMenuItem({ cName: "Setze Fußzeile", cParent: "Footer", cExec: "SetFooter(1)"});
app.addMenuItem({ cName: "Fußzeile nur Dateiname", cParent: "Footer", cExec: "SetFooter(4)"});
app.addMenuItem({ cName: "Seitenzahlen einfügen", cParent: "Footer", cExec: "SetFooter(3)"});
app.addMenuItem({ cName: "Dateiname nur erste Seite", cParent: "Footer", cExec: "SetFooterFirstPage()"
});
app.addMenuItem({ cName: "-------------------------------", cParent: "Footer",cExec: "{}"});
app.addMenuItem({ cName: "Entferne Fußzeile(n)", cParent: "Footer", cExec: "RemoveFooter()"});
//Pfad in Windows-Pfad umwandeln
function PathToWinPath(pathArray)
{
var WinPath;
if (pathArray[1].length==1) {
//nur ein Zeichen? Also (hoffentlich) lokales Laufwerk
WinPath = pathArray[1]+":";
} else {
//für Netzwerklaufwerke \\Server\Freigabe
WinPath = "\\\\" + pathArray[1];
};
for (var i = 2; i < pathArray.length; i++)
{
WinPath = WinPath + "\\" + pathArray[i];
}
return WinPath;
}
//Pfad und Dateiname nur erste Seite setzen
function SetFooterFirstPage()
{
var pathArray = this.path.split("/");
var sFilePath=PathToWinPath(pathArray); //Pfad im Windows-Format
var p = 0; //0=erste Seite
var aRect = this.getPageBox("Crop",p); //Seitengröße
var TotWidth = aRect[2] - aRect[0]; //Breite der Seite
var fd=addTextField(this,sFilePath,p,TotWidth);
}
//Fußzeile setzen, alle Seiten
function SetFooter(ARG)
{
var pathArray = this.path.split("/");
//var FileNM = this.path //Dateiname mit Pfad plattformunabhängiges Format
//var FileNM = PathToWinPath(pathArray); //Pfad im Windows-Format
var FileNM =this.documentFileName //nur Dateiname
var FileNMNoExt = FileNM.substr(0,FileNM.lastIndexOf(".")); //nur Dateiname ohne Erweiterung (ohne .PDF)
var AcDate = new Date();
var AcDateFormat = "dd.mm.yyyy HH:MM"
//var AcDateFormat = "yyyy/mm/dd"
for (var p = 0; p < this.numPages; p++)
{
var aRect = this.getPageBox("Crop",p);
var TotWidth = aRect[2] - aRect[0]
//Datum, Uhrzeit, Dateiname und Seitenzahl (Seite X/X)
if (ARG==1)
{ var FieldValue="Datum: " + util.printd(AcDateFormat, AcDate) + " (" + FileNM +")";
FieldValue=FieldValue + "\nSeite: " + String(p+1)+ "/" + this.numPages; //Seitenzahlen
var fd=addTextField(this,FieldValue,p,TotWidth);
}
//Datum, Uhrzeit, Dateiname
if (ARG==2)
{ var FieldValue="Datum: " + util.printd(AcDateFormat, AcDate) + " (" + FileNM +")";
var fd=addTextField(this,FieldValue,p,TotWidth);
}
//nur Seitenzahlen (Seite X/X)
if (ARG==3)
{ var FieldValue="Seite: " + String(p+1)+ "/" + this.numPages; //Seitenzahlen
var fd=addTextField(this,FieldValue,p,TotWidth);
}
//nur Dateiname ohne Erweiterung
if (ARG==4)
{
var fd=addTextField(this,FileNMNoExt,p,TotWidth);
}
} //end for loop
}
//Textfeld in die Fußzeile einfügen
function addTextField(myDoc,myTextValue, myPageNum, myPageWidth)
{
var fd = myDoc.addField("xftDate"+myPageNum+1, "text", myPageNum, [30,15, myPageWidth-30,35]);
fd.multiline=true; //Zeilenumbruch erlauben, Seitenzahl zweite Zeile
fd.textSize=6; //Font-Größe
fd.readonly = true; //schreibgeschützt
fd.alignment="center"; //Ausrichtung zentriert
//fd.alignment="left"; //Ausrichtung links
//fd.alignment="right"; //Ausrichtung rechts
//fd.fillColor = color.yellow; //Hintergundfarbe für das Textfeld
//fd.textColor=color.red; // Textfarbe
fd.value=myTextValue;
return fd
//Anmerkungen zur Positionierung:
//addField: Parameters: cName, cFieldType, nPageNum, oCoords, Returns: object
//oCoords: upper-left x , upper-left y, lower-right x, lower-right y
//addField erstellt ein Text-Feld am unteren Seitenrand, bestimmt
//durch die angegebenen Koordinaten
//es hat einen Abstand von 30 Pixeln vom linken Seitenrand und 15 vom unteren Rand
//das Feld nimmt die gesamte Breite des Dokuments ein, mit einem Abstand von
//30 Pixeln links und rechts (myPageWidth-30).
//Es ist 20 Pixel hoch (35-15)
}
//Fußzeile(n) entfernen
function RemoveFooter()
{
for (var p = 0; p < this.numPages; p++)
{var x = this.removeField(String("xftDate"+p+1)); }
}
Schreibe einen Kommentar