Un Script (petit)  (Lu 5948 fois) Partager ce sujet Imprimer

1 B


Crevette54  04 décembre 2016 : 22:31

Bonsoir,

je me permets de vous solliciter car ma spécialité est plutôt la programmation dans office.

Grace à la discussion sur developpez.com (j'ai donné le lien dans l'autre discussion) j'arrive à piloter Acrobat depuis du code vba.

Ma dernière idée est d’aplatir un formulaire pdf depuis du code vba, actuellement je lance un impression en pdf mais le rendu n'est pas très beau.

Il y a un code qui explique comment lancer un script depuis vba mais il faut que le script soit dans le répertoire des scripts d'acrobat.

Voilà mon besoin  :Ooops:, un fichier script qui aplatie...

Un grand merci pour votre aide.  :priere:

Crevette

IP archivée


bebarth  04 décembre 2016 : 23:03

bonsoir,
Pour aplatir toutes les pages d'un document, il faut lancer :
this.flattenPages();
@+
 :bonjour:

IP archivée


Merlin  05 décembre 2016 : 10:00

Bonjour.

Ma dernière idée est d’aplatir un formulaire pdf depuis du code vba, actuellement je lance un impression en pdf mais le rendu n'est pas très beau.

As-tu vérifié le résultat ?
Parce-que logiquement l'aplatissement ne devrait rien changer au rendu imprimé…  :doute:

IP archivée


Crevette54  06 décembre 2016 : 21:54

Bonsoir,

oui il y a une différence  voir image jointe avec à gauche la version aplatit et à droite la version imprimé en pdf.

Merci pour vos réponses, j'arrive à mettre un bouton sur le formulaire pour lancer la commande d'aplatissement, mais j'ai besoin de la mettre dans un fichier script pour pouvoir le lancer depuis access.

Merci par avance.

Crevette

IP archivée


bebarth  07 décembre 2016 : 18:13

Bonjour,
Veux-tu aplatir ton document sans l'ouvrir ? Est-ce possible ?  :Euuuh:
@+
 :bonjour:

IP archivée


Crevette54  07 décembre 2016 : 21:15

Bonsoir,

en fait depuis vba, j'utilise les bibliothèques d'acrobat pour pouvoir le piloter.
Cela permet facilement d'ouvrir un objet acrobat et de le manipuler comme enlever une page défini, remplir directement les champs d'un formulaire et aussi les lire, de lire dles commentaire lire et inserer des métadonnées, manipuler les signets...

Je mets un exemple de code qui permet d’insérer un pdf dans un autre :

'Insert les pages de NomSlave dans NomMaster.

Sub Fusion_PDF(NomMaster As String, NomSlave As String, ou_ As Integer, NbrePage As Integer)
Dim oPDDoc1 As Object
Dim oPDDoc2 As Object
Dim oPDDoc3 As Object
Dim Num As Long

Set oPDDoc1 = CreateObject("AcroExch.PDDoc")
Set oPDDoc2 = CreateObject("AcroExch.PDDoc")


oPDDoc1.Open (NomMaster)
oPDDoc2.Open (NomSlave)
   
   
'  Pour connaitre le nombre de pages
Num = oPDDoc2.GetNumPages()
'Debug.Print Num
'  Paramètres :
'   1 Page du document en cours après laquelle l'insertion sera faite. La 1ere page est 0.
'   2 Document contenant les pages à insérer.
'   3 La 1ere page à être insérée dans le document en cours à partir du Document contenant les pages à insérer.
'   4 Le nombre de pages à insérer.
'   5 Si nombre > 0 les bookmarks sont copiés, si 0 ils ne le sont pas.

oPDDoc1.InsertPages ou_, oPDDoc2, 0, Num, 0
oPDDoc1.Save 1, NomMaster


oPDDoc2.Close
oPDDoc1.Close


Set oPDDoc2 = Nothing
Set oPDDoc1 = Nothing

Kill (NomSlave)
   
End Sub

Dans le cas ou il n'y a pas ce qu'il faut on peut aussi envoyer des commandes 'sendkey'.

Bref, tout cela pour en revenir à mes moutons  :siffle:

Merci par avance.

Crevette

IP archivée


bebarth  07 décembre 2016 : 21:42

bonsoir,
Je crois que je ne comprends pas tout : que sont les commandes que tu peux envoyer via sendkey ? des commandes javascripts ?
J'ai trouvé ça sur le web, je ne sais pas si ça peut t'être utile...
http://www.planetpdf.com/forumarchive/155334.asp
@+
 :bonjour:

IP archivée


Crevette54  11 décembre 2016 : 00:02

Bonsoir,

Merci pour le lien, effectivement le code est la même pratique.
Je te mets le lien de la discussion sur developpez, tu pourras y jeter un coup d’œil.
Voici le lien du code que je veux utiliser pour lancer l'aplatissement d'un formulaire :
http://www.developpez.net/forums/d431662-2/logiciels/microsoft-office/excel/contribuez/excel-word-pdf-adobe-acrobat-pro-pdfcreator/#post6820394

Pour cela il me faut un fichier script avec la commande d'aplatissement qui fonctionne un peu comme la fonction rajoutée grace aux outils de abracadabrapdf.

Merci.
Crevette


IP archivée


bebarth  11 décembre 2016 : 23:07

bonsoir,
Ci-joint le fichier .js à placer dans le dossier JavaScripts d'Adobe Acrobat (à décompresser avant !!!).
Puis tu appelles la fonction avec ...Aplatir(), donc si j'ai compris :
Debug.Print JSO.Aplatir()
Tu me diras !
@+
 :bonjour:

IP archivée


Crevette54  13 décembre 2016 : 22:38

Bonsoir,

Cela ne fonctionne pas !!!  :mur:

Bon, bizarrement ou pas en fait vu que je ne connais pas les rouages d'Acrobat, il faut que le fichier soit ouvert pour que cela fonctionne.

Normalement, lors de l'ouverture des objets Acrobat, il s'ouvre en arrière plan, mais ce soir avec mes essais cela ne veut pas.

Donc avant une intégration fonctionnelle dans Access, voici le code fonctionnel sans avoir pousser plus loin :

Sub Tst_JScript()
Dim PDDoc As Object
Dim JSO As Object
Dim sFichier As String
 

    Set PDDoc = CreateObject("AcroExch.PDDoc")
 
    sFichier = "C:\Users\jerome\Documents\FI_BD_FO.pdf"
   
    ShellExec ("C:\Users\jerome\Documents\FI_BD_FO.pdf")
   
    If PDDoc.Open(sFichier) Then
        Set JSO = PDDoc.GetJSObject
        Debug.Print JSO.Aplatir()
        PDDoc.Close
        Set JSO = Nothing
    End If
 
    Set PDDoc = Nothing
   
End Sub

 Encore merci à tous et surtout à bebarth.

 :bonjour:

IP archivée


Chnoirhomme  14 décembre 2020 : 13:47

Bonjour,


J'ai vu dans cette conversation qu'il existait un code pour enlever des pages d'un formulaire PDF via un codage VBA Excel.


Merci pour votre aide

IP archivée


Merlin  14 décembre 2020 : 16:11

Bonjour

Je te conseille le lien ci-dessus vers le forum developpez.com car ici on parle PDF et JavaScript.
VBA Excel c'est un autre monde.
 :joker:

IP archivée


Chnoirhomme  14 décembre 2020 : 16:36

Oui, je sais et c'est pour cela, comme pour le publipostage de valeur valeur via Excel, je voulais savoir si je pouvais supprimer des page d'un PDF.
Cela pourrais aussi me convenir par un code JAVASCRIT qui suivant la valeur d'une cellule supprimerais les pages X, XY, ou encore XYZ ou plus encore.


Merci pour votre aide.

IP archivée


Merlin  14 décembre 2020 : 18:53


IP archivée


Chnoirhomme  14 décembre 2020 : 19:15

Merci Merlin pour le support,
J'ai trouvé et adapté un code qui a l'air de marcher.

Une petite contribution pour les autres, j'ai déjà eu énormément du site, merci :

Les pages doivent être incriminées dans le sens opposé la dernière en premier et la première en dernier.
Bonne soirée

Sub DeletePDFPages()
Dim strSourceFullPath As String, strDestinationFullPath As String
Dim iStartPage As Long, iNumPages As Long
Dim PDDocSource As Object, PDDocTarget As Object
Dim Cell As Range, Cell1 As Range, Rng As Range
Application.ScreenUpdating = False
    Set PDDocSource = CreateObject("AcroExch.PDDoc")
    Set PDDocTarget = CreateObject("AcroExch.PDDoc")




    Set Rng = Range("a1", ActiveSheet.Range("a" & ActiveSheet.Rows.Count).End(xlUp)) ' Selection
   
    strSourceFullPath = Application.GetOpenFilename("PDF Files (*.pdf), *.pdf")
    strDestinationFullPath = StripFilename(strSourceFullPath) & InputBox("Output FileName") & ".pdf"
       
     ' Create a new PDDoc
   If PDDocTarget.Create <> True Then
        MsgBox "Unable to create a new PDF"
        Exit Sub
    End If
   
        ' Open the PDF source file (the file we are going to take pages from)
    If PDDocSource.Open(strSourceFullPath) <> True Then
        MsgBox "Unable to open the source PDF"
        Exit Sub
    End If
       
    For Each Cell In Rng




    ' Set the page range you wish to delete
    ' Don't forget that this is zero based
    iStartPage = Cell - 1
 
    ' Set the number of pages you wish to delete
    iNumPages = 0
       
        ' Insert the pages from the source PDF file to the target PDF
   If PDDocSource.DeletePages(iStartPage, iStartPage) <> True Then
       MsgBox "Unable to Delete"
       Exit Sub
   End If
     
   




    Next Cell
   
        ' Save the new file
    If PDDocSource.Save(&H1, strDestinationFullPath) <> True Then
        MsgBox "Unable to save the pdf"
        Exit Sub
    End If
   
    'Close the PDF files
    PDDocSource.Close
    PDDocTarget.Close
     
    ' Clean up
    Set PDDocSource = Nothing
    Set PDDocTarget = Nothing
    Application.ScreenUpdating = True
   MsgBox "File Saved to " & strDestinationFullPath
End Sub
Function StripFilename(sPathFile As String) As String
'given a full path and file, strip the filename off the end and return the path
Dim filesystem As Object




Set filesystem = CreateObject("Scripting.FilesystemObject")




StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"




Exit Function




End Function

IP archivée


Merlin  14 décembre 2020 : 19:37

Merci

IP archivée