Page 1 sur 1

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

Posté : dim. 26 févr. 2017 18:51
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. :)

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

Posté : lun. 27 févr. 2017 21:42
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



@+ :)

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

Posté : mer. 01 mars 2017 00:08
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...

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

Posté : mer. 01 mars 2017 10:35
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...


@++