2015-03-16 2 views
0

Je suis en train de faire la chose suivante à partir d'Excel vba:Ajout des numéros de page en pdf par VBA et Acrobat IAC

  1. Export certaines feuilles de pdf
  2. prenez un document PDF existant et l'insérer dans la nouvelle pdf généré à un endroit précis (pas nécessairement à la fin ou au début)
  3. numéroter les pages du pdf fusionné, en omettant deux pages de titre

je l'ai déjà compris la première étape. Pour la deuxième et troisième étape, j'ai Adobe Acrobat XI Pro à ma disposition. Puisque je veux le faire en une fois depuis vba, j'ai téléchargé Acrobat SDK. De quelques recherches rapides, je pense que je devrais être capable de comprendre la deuxième étape maintenant, en utilisant l'IAC, mais la troisième étape (curieusement) semble la plus difficile. Toute suggestion serait la bienvenue.

Best, NiH

Répondre

1

En attendant, je l'ai trouvé une solution pour ajouter des numéros de page. Pour ceux qui pourraient être intéressés, voici un exemple de la façon dont il peut être fait:

Sub addPageNumbers() 

    Dim acroApp As Acrobat.acroApp 
    Dim myDocument As Acrobat.AcroPDDoc 
    Dim jso As Object 

    Dim strPath As String 
    Dim strFileName As String 
    Dim intPages As Integer 
    Dim i As Integer 

    Set acroApp = CreateObject("AcroExch.App") 
    Set myDocument = CreateObject("AcroExch.PDDOc") 

    strPath = "C:\" 
    strFileName = "myDoc.pdf" 

    'Open file and load JSObject 
    Set myDocument = CreateObject("AcroExch.PDDOc") 
    myDocument.Open (strPath & strFileName) 
    Set jso = myDocument.GetJSObject 

    ' get number of pages 
    intPages = myDocument.GetNumPages 

    'Write page numbers to all pages 
    For i = 1 To intPages 
     jso.addWatermarkFromText _ 
      cText:=Str(i) & " ", _ 
      nTextAlign:=1, _ 
      nHorizAlign:=2, _ 
      nVertAlign:=4, _ 
      nStart:=i - 1, _ 
      nEnd:=i - 1 
    Next i 

    'Save document 
    Call myDocument.Save(1, strPath & strFileName) 

    'Clean up 
    Set jso = Nothing 
    Call acroApp.CloseAllDocs 
    Set myDocument = Nothing 
    Call acroApp.Exit 
    Set acroApp = Nothing 

End Sub 

Gardez à l'esprit que vous devez avoir Acrobat (non seulement le lecteur) installé sur votre ordinateur, et la référence à Acrobat a être activé dans l'éditeur vba.

Je n'ai pas ajouté de gestion des erreurs; De toute évidence, vous devriez.

Plus d'informations sur la méthode addwatermarkFromText se trouve here

Meilleures salutations,

NiH

0

Voici une autre méthode pour le faire. J'utilise la méthode du champ add d'acrobat js. La méthode "ExecuteThisJavaScript" a l'avantage de pouvoir utiliser js sans traduction dans js-object.

L'exemple suivant - J'ai publié quelque part déjà - ajouter Date, nom de fichier et pageNo comme pied de page à un pdf. Il est écrit en VBS mais peut aussi être utilisé comme vba sans changement.

Meilleures salutations, Reinhard

File = "D:\Test.pdf" 

Set App = CreateObject("Acroexch.app")  '//start acrobat 
app.show         '//show Acrobat or comment out for hidden mode 
Set AVDoc = CreateObject("AcroExch.AVDoc") 
Set AForm = CreateObject("AFormAut.App") '//get AFormAPI to execute js later 

If AVDoc.Open(File,"") Then 
    '//write JS-Code on a variable 
    Ex = " // set Date, filename and PageNo as footer "&vbLF _ 
     & " var Box2Width = 50 "&vbLF _ 
     & " for (var p = 0; p < this.numPages; p++) "&vbLF _ 
     & " { "&vbLF _ 
     & " var aRect = this.getPageBox(""Crop"",p); "&vbLF _ 
     & " var TotWidth = aRect[2] - aRect[0] "&vbLF _ 
     & "  { var bStart=(TotWidth/2)-(Box2Width/2) "&vbLF _ 
     & "   var bEnd=((TotWidth/2)+(Box2Width/2)) "&vbLF _ 
     & "   var fp = this.addField(String(""xftPage""+p+1), ""text"", p, [bStart,30,bEnd,15]); "&vbLF _ 
     & "   fp.value = ""Page: "" + String(p+1)+ ""/"" + this.numPages; "&vbLF _ 
     & "   fp.textSize=6; fp.readonly = true; "&vbLF _ 
     & "   fp.alignment=""center""; "&vbLF _ 
     & "  } "&vbLF _ 
     & " } " 
    '//Execute JS-Code 
     AForm.Fields.ExecuteThisJavaScript Ex 
    msgBox("Done") 
end if 

Set AVDoc = Nothing 
Set APP = Nothing