Adobe Acrobat Pro: Fußzeilen mit Javascript-Aktion erstellen

Wer im Besitz der kos­ten­pflich­ti­gen Voll­ver­si­on von Ado­be Acro­bat Pro ist, kann mit dem Akti­ons­as­sis­ten­ten etli­che Auf­ga­ben auto­ma­ti­sie­ren. Es gibt eini­ge vor­ge­fer­tig­te Tools, aber man kann auch per Java­script eige­ne Lösun­gen für spe­zi­el­le Auf­ga­ben ent­wi­ckeln, bei­spiels­wei­se um Fuß­zei­len in PDFs ein­zu­set­zen.

Als Bei­spiel grei­fe ich die Lösung aus dem Arti­kel „Ado­be Rea­der: Datei­na­men in PDF-Doku­men­ten auf jede Sei­te dru­cken“ aus, die ein Java­script vor­stellt, über das sich nach­träg­lich Text in ein PDF ein­bau­en lässt, etwa für eine Fuß­zei­le mit Datum, Datei­na­men und/oder Sei­ten­zah­len. Der Akti­ons­as­sis­tent von Ado­be Acro­bat Pro bie­tet von Haus aus bereits ein Tool für „Kopf- und Fuß­zei­len hin­zu­fü­gen“. Man kann belie­bi­gen Text sowie Sei­ten­zah­len und Datum ange­ben. Wei­te­re Infos, etwa Spei­cher­pfad oder Datei­na­me sind nicht vor­ge­se­hen.

Das Fuß­zei­len-Script für den Ado­be Rea­der hat den Nach­teil, dass man jede Datei, die man bear­bei­ten will, öff­nen und nach der Anpas­sung spei­chern muss. Der Ado­be Rea­der bie­tet kei­ne Mög­lich­keit, meh­re­re Datei­en zu öff­nen, zu bear­bei­ten und dann wie­der zu spei­chern. Mit dem Akti­ons­as­sis­ten­ten von Ado­be Acro­bat Pro ist jedoch auch eine Batch-Ver­ar­bei­tung mög­lich.

Eine alter­na­ti­ve Lösung ohne Ado­be Acro­bat Pro ist im Arti­kel „Fuß­zei­len in PDFs per Batch-Ver­ar­bei­tung erstel­len“ zu fin­den. Wer Fuß­zei­len über den kos­ten­lo­sen Acro­bat Rea­der in ein­zel­ne PDF-Datei­en ein­set­zen will, liest den Arti­kel „Ado­be Rea­der: Datei­na­men in PDF-Doku­men­ten auf jede Sei­te dru­cken“.

Aktion in Adobe Acrobat Pro erstellen

So erstel­len Sie eine Akti­on, die im Ado­be Acro­bat Pro per Java­script Fuß­zei­len in PDFs ein­baut:

Schritt 1: Kli­cken Sie in Ado­be Acro­bat Pro auf „Tools“ und ganz unten unter­halb von „Anpas­sen“ auf „Akti­ons­as­sis­tent“. In der neu­en Sym­bol­leis­te kli­cken Sie auf „Neue Akti­on“.

Schritt 2: Unter „Zu ver­ar­bei­ten­de Datei­en“ im rech­ten Teil des Fens­ters wäh­len Sie unter „Stan­dard­op­ti­on“ den Ein­trag „Ord­ner hin­zu­fü­gen“. Wenn Sie die Akti­on star­ten, kön­nen Sie dann einen Arbeits­ord­ner wäh­len, in dem die Datei­en lie­gen, die Sie mit Fuß­zei­len ver­sor­gen wol­len. Oder Sie kli­cken auf das Ord­ner­sym­bol über „Stan­dard­op­ti­on“ und wäh­len einen Stan­dard­ord­ner, aus dem Sie alle PDF-Datei­en ver­ar­bei­ten wol­len.

Schritt 3: Im lin­ken Teil des Fens­ters gehen Sie auf „Wei­te­re Tools“ und kli­cken auf „Java­Script aus­füh­ren“. Über die Schalt­flä­che zwi­schen den bei­den Berei­chen des Fens­ters fügen Sie die Funk­ti­on als Akti­ons­schritt in die Lis­te ein. Kli­cken Sie auf „Ein­stel­lun­gen ange­ben“. Es öff­net sich ein Edi­tor in Ado­be Rea­der Pro, in den Sie das Script für Fuß­zei­len aus die­sem Arti­kel ein­fü­gen. Es ent­spricht dem aus dem Arti­kel „Ado­be Rea­der: Datei­na­men in PDF-Doku­men­ten auf jede Sei­te dru­cken“, es feh­len nur die Anwei­sun­gen, über die das Menü erstellt wird. Das Script star­tet, wenn die Akti­on aus­ge­führt wird. Die gewünsch­te Funk­ti­on steu­ern Sie über den Auf­ruf von „SetFooter(N)“. Set­zen Sie Kom­men­tar­zei­chen („//“) vor die Auf­ru­fe, die Sie nicht ver­wen­den wol­len und ent­fer­nen Sie das Kom­men­tar­zei­chen vor dem gewünsch­ten Auf­ruf im Bei­spiel „SetFooter(1)“.

Wenn Sie unter­schied­li­che Funk­tio­nen für bestimm­te Doku­men­te benö­ti­gen, erstel­len Sie dafür jeweils eine neue Akti­on und pas­sen das Script je nach Wunsch an. Kli­cken Sie auf „OK“, um das Script zu spei­chern.

Unter­halb von „Ein­stel­lun­gen ange­ben“ ent­fer­nen Sie das Häk­chen vor „Benut­zer­auf­for­de­rung“. Ist es gesetzt, fragt Ado­be Acro­bat Pro ansons­ten bei jedem Doku­ment nach, ob es gespei­chert wer­den soll.

Schritt 4: Gehen Sie im lin­ken Bereich des Fens­ters auf „Spei­chern und expor­tie­ren“ und fügen Sie „Spei­chern“ als Akti­ons­schritt hin­zu. Im rech­ten Teil des Fens­ters kli­cken Sie auf das Icon rechts neben „Spei­chern“ und wäh­len „In loka­lem Ord­ner spei­chern“. Danach wäh­len Sie einen Aus­ga­be­ord­ner, in dem Sie die geän­der­ten Doku­men­te able­gen wol­len. Nach einem Klick auf „Ein­stel­lun­gen abge­ben“ las­sen sich Optio­nen für die Datei­na­men ange­ben. Sie kön­nen bei­spiels­wei­se Text zum Datei­na­men hin­zu­fü­gen.

Im Bereich über den Aktio­nen steht „Unbe­nannt“. Wenn Sie möch­ten, ändern Sie die Beschrif­tung nach einem Klick dar­auf in „Fuß­zei­len“.

Zum Abschluss kli­cken Sie auf „Spei­chern“ und ver­ge­ben einen aus­sa­ge­kräf­ti­gen Namen für die Akti­on.

Bit­te beach­ten Sie: Es gibt kei­ne Opti­on, die vor dem Über­schrei­ben warnt, wenn eine Datei glei­chen Namens sich bereits im Aus­ga­be­ord­ner befin­det. Ver­wen­den Sie als Ziel daher immer einen lee­ren Ord­ner.

Wenn Sie die Akti­on star­ten möch­ten, rufen Sie unter „Tools“ den Akti­ons­as­sis­ten­ten auf und wäh­len die Akti­on unter „Akti­ons­lis­te“. Mit einem Klick auf „Anfang“ star­ten Sie die Akti­on.

/* Footnotes */
/* Dieses Script setzt Fußzeilen in PDF-Dokumente ein */
/* Starten Sie es als Aktion in Adobe Reader Pro */
console.println("Begin Job Code");
//Datum, Uhrzeit, Dateiname und Seitenzahl (Seite X/X)
SetFooter(1)
//Datum, Uhrzeit, Dateiname
//SetFooter(2)
//nur Seitenzahlen (Seite X/X)
//SetFooter(3)
//nur Dateiname ohne Erweiterung
//SetFooter(4)
//Dateiname nur erste Seite
//SetFooterFirstPage()

//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);
}

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)
}

[amazon_auto_links id="323980"]


Schlagwörter:


Kommentare

4 Antworten zu „Adobe Acrobat Pro: Fußzeilen mit Javascript-Aktion erstellen“

  1. Avatar von Herman Zwijnenberg
    Herman Zwijnenberg

    Herz­li­chen Dank „te“!

    Ich habe es aus­pro­biert und es funk­tio­niert per­fekt!.

    Aber jetzt, wo ich damit arbei­te, möch­te ich noch mehr. (Ist das der rich­ti­ge Begriff auf Deutsch, und klingt das nicht zu direkt?). Wäre es auch mög­lich:
    (1) Dies auf der aktu­el­len Sei­te („Cur­rent page“) aus­zu­füh­ren?
    (2) Nicht die aktu­el­le Zeit (AcDa­te) zu ver­wen­den, son­dern die Datei-Zeit (wie im Explo­rer unter „Ände­rungs­da­tum“ oder „Date modi­fied“)?

    Ich ver­wen­de den Datei­na­men sowie Datum und Uhr­zeit als Refe­renz, wenn ich die Datei an ande­re wei­ter­lei­te – auch nach Ände­run­gen. So kann ich mich in der Kom­mu­ni­ka­ti­on immer dar­auf bezie­hen.

    Vie­len Dank im Vor­aus für dei­ne Hil­fe!

    Her­man

    1. Cur­rent page and date from docu­ment pro­per­ties. Yes. You can use this script func­tion:

      //Dateiname und Datum nur aktuelle Seite setzen
      //File name and date current page only
      function SetFooterCurrentPage()
      {
      var pathArray = this.path.split("/");
      var sFilePath=PathToWinPath(pathArray); //Pfad im Windows-Format
      var p = this.pageNum //current page
      var aRect = this.getPageBox("Crop",p); //page size
      var TotWidth = aRect[2] - aRect[0]; //page width
      if (this.info.hasOwnProperty('ModDate')) //check property exists (maybe)
      {
       var AcDate = this.info.ModDate; //modified date
       var DateString=' Modified date: ';
      } else {
       if (this.info.hasOwnProperty('CreationDate')) //check property exists, should exist
       {
        var AcDate = this.info.CreationDate; //creation date
        var DateString=' Creation date: ';
       }
      }
      var AcDateFormat = "dd.mm.yyyy HH:MM" //time format string
      var FileNM =this.documentFileName //file name only
      var FieldValue="(" + FileNM +")" + DateString + util.printd(AcDateFormat, AcDate)
      var fd=addTextField(this,FieldValue,p,TotWidth);
      }
      

      „this.info.CreationDate“ should always be pre­sent, „this.info.ModDate“ not. So it is bet­ter to check which of them exists.

      Use this func­tion in a new action with the curr­ent­ly ope­ned docu­ment only. This is not pos­si­ble in batch pro­ces­sing.

  2. Avatar von Herman Zwijnenberg
    Herman Zwijnenberg

    Das Skript funk­tio­niert genau wie ange­ge­ben. Ich habe jedoch eine Fra­ge:
    Da ich meh­re­re PDF-Datei­en zu einer neu­en Datei zusam­men­fü­ge, ist es für die Ver­si­ons­kon­trol­le wich­tig, dass nur auf der zwei­ten Sei­te der neu­en PDF-Datei der Datei­na­me und das Micro­soft-Datum der Datei ein­ge­fügt wer­den.
    Könn­te das Skript so ange­passt wer­den, dass der Name und das Datum nur auf Sei­te 2 hin­zu­ge­fügt wer­den?

    Mein Deutsch ist nicht so gut (ich bin Nie­der­län­der), daher habe ich die­sen Text von ChatGPT gene­rie­ren las­sen. Ent­schul­di­gung, falls etwas unklar ist.
    Ich bin sehr an der Posi­ti­on inter­es­siert und wür­de, wenn mög­lich, ger­ne auf Eng­lisch mit Ihnen kom­mu­ni­zie­ren.

    Her­man Zwi­j­nen­berg
    Apel­doorn
    Die Nie­der­lan­den

    1. Goe­de dag meneer;-)
      This is not a big pro­blem.
      You have to crea­te a func­tion like this simi­lar to „Set­Foo­ter­First­Pa­ge()“:

      //Dateinamen und Datum nur zweite Seite / second page only
      function SetFooterSecondPage()
      {
      var pathArray = this.path.split("/");
      var sFilePath=PathToWinPath(pathArray); //path in Windows format
      var p = 1; //1=second page
      var aRect = this.getPageBox("Crop",p); //page size
      var TotWidth = aRect[2] - aRect[0]; //page width
      var AcDate = new Date(); //cur date 
      var AcDateFormat = "dd.mm.yyyy HH:MM" //time format string
      var FileNM =this.documentFileName //file name only
      var FieldValue="(" + FileNM +")" + " Datum: " + util.printd(AcDateFormat, AcDate)
      var fd=addTextField(this,FieldValue,p,TotWidth);
      }
      

      It inserts file name and date:
      (file_name.pdf) Datum: 08.03.2025 00:40

      Call it at script start with
      SetFooterSecondPage()

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Partner-Links

[amazon_auto_links id="323997"]

Neueste Kommentare


Die Website durchsuchen