[R] Convertir un fichier PDF en fichier .DOC avec _Word_DocSaveAs

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

[R] Convertir un fichier PDF en fichier .DOC avec _Word_DocSaveAs  

#1

Message par franco »

Salut à tous.

Je me suis mis dans l'idée de créer plusieurs scripts pour convertir tel document vers un autre format... Dans le cas où je dois envoyer un mail avec un fichier en pièce-jointe...

Combien de fois la personne me répond ceci :
désolé, je n'arrive pas à ouvrir le fichier, pouvez-vous l'enregistrer dans un autre format ?

Dans cet état d'esprit, je me créé donc un script qui me permet donc de "convertir" un fichier PDF au format .doc...

Le script en lui-même fonctionne, mais le résultat n'est pas vraiment "conforme"...


Disons qu'en plus de convertir, il met des pages blanches entre chaque page "pas blanche". :mrgreen:

Résultat : un fichier de 23 pages (PDF) devient un fichier de 46 pages (.doc)... :evil:


Voici le code en question :
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>

_pdftoword()

Func _pdftoword()
   $pdf = @ScriptDir & "\Bomb-Defusal-Manual_1.pdf"
   $doc = @ScriptDir & "\Bomb-Defusal-Manual_1.doc"

   While 1
      If ProcessExists("Winword.exe") Then
         If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
         $iMsgBoxAnswer = MsgBox(68, "Processus Word toujours actif !", "Attention : Microsoft Word est toujours actif..." & @CRLF & @CRLF & "Enregistrez vos travaux avant de continuer." & @CRLF & "En effet, pour pouvoir convertir ce PDF au format .doc, Microsoft Word sera fermé." & @CRLF & @CRLF & "Voulez-vous continuer ?" & @CRLF & "Si OUI : Microsoft Word sera fermé et la conversion se fera automatiquement." & @CRLF & "Si NON : A vous de fermer Microsoft Word et de réitérer l'opération.")
         Select
            Case $iMsgBoxAnswer = 6 ;Yes
               ProcessClose("winword.exe")
               ProcessClose("winword.exe")
            Case $iMsgBoxAnswer = 7 ;No
               ExitLoop
         EndSelect
      EndIf

      Local $oWord = _Word_Create(False, True)
      If @error Then ExitLoop

      ; Open the test document
      Local $oDoc = _Word_DocOpen($oWord, $pdf)
      If @error Then ExitLoop

      ; *****************************************************************************
      ; Save the document as _Word_Test2.doc
      ; *****************************************************************************
      ; Insert text at the beginning
      Local $oRange = _Word_DocRangeSet($oDoc, 0)
;~       $oRange.Text = "Bold text at the beginning. "
;~       $oRange.Bold = True
      ; Save document
      _Word_DocSaveAs($oDoc, $doc)
      If @error Then ExitLoop

      _Word_Quit($oWord)
      ShellExecute($doc)

      ExitLoop
   WEnd
EndFunc   ;==>_pdftoword
J'ai travaillé sur ce fichier : http://www.bombmanual.com/manual/1/pdf/ ... nual_1.pdf ( Attention, c'est lié à un jeu steam ^^ pas taper => Jeu )

Je dois donc avoir ceci en première page du fichier converti (.doc) : http://i.imgur.com/57mpvFI.png
Mais j'ai ceci : http://i.imgur.com/TucwM2T.png


Bref, pouvez-vous m'aider à y voir plus clair.
Car là ( et non pas Clara lol) : je sèche...



Merci à tous.
Bonne fin de dimanche. :)
Modifié en dernier par franco le lun. 27 févr. 2017 22:53, modifié 1 fois.
L'entraide, c'est mon dada ;)
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Convertir un fichier PDF en fichier .DOC avec _Word_DocSaveAs

#2

Message par franco »

Yo.

Bon, j'ai procédé autrement et j'ai résolu le souci... Le sujet même.

Autrement
car... le souci de la première page mal "converti" est un souci interne à Word... Et pas AutoIt donc...

Pour le souci des pages en double, étant donné que rien n'a fonctionné, et que le souci cité précédemment n'avait rien à avoir avec le script, j'ai procédé d'une autre façon.

Voici ce que j'ai fait :
- J'ai utilisé l'outil en ligne de commande pdftopng (de XPDF) pour convertir chaque page du PDF au format PNG dans un dossier unique (qui ne contient donc que ces fichiers).
- J'ai ensuite listé ces fichiers images et est utilisé la fonction _Word_DocPictureAdd pour les ajouter au fichier .doc.

Trêve de blabla, voici le code :
► Afficher le texte
Bref, il est surement optimisable, mais bon : il fait ce que j'avais en tête...

Le seul hic (mais là je chipote), c'est que l'image ajoutée ne prend pas toute la page du doc. :P



@+ :)
L'entraide, c'est mon dada ;)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Convertir un fichier PDF en fichier .DOC avec _Word_DocSaveAs

#3

Message par walkson »

A titre indicatif, il y a ça aussi
RunWait("LibreOfficePortable --headless --invisible --convert-to doc FF.pdf --outdir dossier ")
Le PDF est converti en Doc directement mais il y a des inconvénients:
le PDF doit avoir une page
Si le PDF possède trop d'images, le résultat n'est pas terrible
Word crie à la "corruption" et crée un nouveau document corrigé (Word 2007) (ça doit pouvoir se résoudre)
L'avantage est que le PDF converti peut être entièrement modifié (position, texte, chiffres, images etc...) et le format est (en principe) conservé.
C'est une bonne solution pour un PDF simple comme une facture, un tableau...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [R] Convertir un fichier PDF en fichier .DOC avec _Word_DocSaveAs

#4

Message par franco »

Coucou.

D'accord avec toi Walkson : un pdf éditable, c'est mieux.

Comme faisait le premier script...

Si je trouve un moyen que la première page soit correctement convertie et un moyen de supprimer les pages blanches, ça serait le must

Pour la première page... Pourquoi ne pas la convertir comme je l'ai fait, et l'insérer.

Puis utiliser les fonctions _word...

Je pense que je vais tenter cela :)


Comme cela : seule la première page ne sera pas éditable...


Restera donc le fameux problème des pages blanches....


Je continue mon script. Et de cogiter lol.


Si j'y arrive, je reviendrai...


@++
L'entraide, c'est mon dada ;)
Répondre