Au travail, nous utilisons assez vaste de dessin Visio comme support pour la documentation. Malheureusement, les fichiers VSD ne jouent pas bien avec nos outils de wiki ou d'extraction de documents tels que javadoc, doxygen ou naturaldocs. Bien qu'il soit possible de convertir des fichiers Visio aux images manuellement, il est juste un souci de garder le courant de l'image et les fichiers d'image sont liés à sortir de ce jour. Et avouons-le:. Avoir les fichiers générés dans le contrôle de révision se sent si mal p>
Je suis à la recherche d'un outil de ligne de commande qui permet de convertir un fichier VSD à jpeg, png, gif ou une image qui peut être convertie en une image qu'un navigateur peut afficher. De préférence, il sera exécuté sous unix, mais les fenêtres n'est aussi très bien. Je peux gérer le reste de la chaîne d'automatisation, tâche cron, l'image à la conversion d'image et ssh, scp, plusieurs fichiers, etc. P>
Et voilà pourquoi je suis à vous tourner: Je ne peux pas trouver un tel outil. Je ne pense pas que je peux même payer pour un tel outil. Mon Google-fu complètement? Pouvez-vous me aider? P>
Je veux dire, il a obtenu d'être possible. Il doit y avoir un moyen de crochet dans Visio avec COM et l'obtenir pour enregistrer en tant qu'image. J'utilise Visio 2007 par la manière. P>
Il doit être un moyen de crochet dans Visio avec COM et l'obtenir pour enregistrer en tant qu'image. P>
blockQuote>
Pourquoi ne pas essayer d'écrire quelque chose vous-même, alors, si vous savez comment utiliser des trucs COM? Après tout, si vous ne trouvez rien déjà fait pour le faire, et vous savez que vous pouvez savoir comment faire vous-même, pourquoi ne pas quelque chose écrire à faire vous-même? P>
Et, bien sûr, vous voulez que le Python interprète lui-même: http: // python. org / télécharger / releases / 3.1 / (Notez que vous pouvez ajouter manuellement le répertoire Python à la variable d'environnement PATH après l'installation.) p>
Lorsque vous écrivez le script, vous pouvez probablement la syntaxe pour exécuter le script quelque chose comme « python visioexport.py [] code> »(en supposant que le fichier script est dans votre répertoire Python), avec le nouveau fichier par défaut à un fichier du même nom et dans le même dossier / répertoire que l'original (mais avec une extension différente, en fait, si vous le souhaitez, vous pouvez le configurer pour exporter vers des formats multiples, avec le format par défaut à celui de tout l'extension par défaut de votre choix et être spécifié par une extension autre vous spécifiez un dans le nom du fichier. de plus, vous pouvez probablement le mettre de sorte que si vous avez seulement le nouveau nom de fichier après le fichier source, aucun chemin d'accès spécifié, il va enregistrer avec ce nouveau nom de fichier dans le répertoire du fichier source. Et, bien sûr, si vous ne spécifiez pas de chemin pour la fichier source, juste un nom de fichier, vous pouvez le configurer pour obtenir le fichier du répertoire courant). p>
Sur le sujet des formats de fichiers: il me semble que la conversion en SVG pourrait être la meilleure chose à faire, car il serait plus efficace l'espace et refléterait mieux le statut des images originales en images vectorisées. D'autre part, la conversion d'un format Visio SVG est pas parfait (ou, au moins, il n'a pas été dans Visio 2003, je ne peux pas trouver une source d'information similaire à celui-ci pour Visio 2007), et comme on le voit
4 commentaires
juste passer le chemin du fichier de visio d'entrée, puis le chemin du fichier de sortie (exportations de visio basées sur l'extension de fichier) et éventuellement le numéro de page à l'exportation. p>
aussi est ici le code source je, si vous voulez mess avec elle ou le transformer en un VBScript ou quelque chose, il devrait fonctionner, mais vous auriez besoin pour terminer la conversion en code liaison tardive. p>
espoir qui aide, p>
Jon p>
Dim TheCmd As String
Const visOpenRO = 2
Const visOpenMinimized = 16
Const visOpenHidden = 64
Const visOpenMacrosDisabled = 128
Const visOpenNoWorkspace = 256
Sub Main()
' interpret command line arguments - separated by spaces outside of double quotes
TheCmd = Command
Dim TheCmds() As String
If SplitCommandArg(TheCmds) Then
If UBound(TheCmds) > 1 Then
Dim PageNum As Long
If UBound(TheCmds) >= 3 Then
PageNum = Val(TheCmds(3))
Else
PageNum = 1
End If
' if the input or output file doesn't contain a file path, then assume the same
If InStr(1, TheCmds(1), "\") = 0 Then
TheCmds(1) = App.Path & "\" & TheCmds(1)
End If
If InStr(1, TheCmds(2), "\") = 0 Then
TheCmds(2) = App.Path & "\" & TheCmds(2)
End If
ConvertVisToImg TheCmds(1), TheCmds(2), PageNum
Else
' no good - need an in and out file
End If
End If
End Sub
Function ConvertVisToImg(ByVal InVisPath As String, ByVal OutImgPath As String, PageNum As Long) As Boolean
ConvertVisToImg = True
On Error GoTo PROC_ERR
' create a new visio instance
Dim VisApp As Visio.Application
Set VisApp = CreateObject("Visio.Application")
' open invispath
Dim ConvDoc As Visio.Document
Set ConvDoc = VisApp.Documents.OpenEx(InVisPath, visOpenRO + visOpenMinimized + visOpenHidden + visOpenMacrosDisabled + visOpenNoWorkspace)
' export to outimgpath
If Not ConvDoc.Pages(PageNum) Is Nothing Then
ConvDoc.Pages(PageNum).Export OutImgPath
Else
MsgBox "Invalid export page"
ConvertVisToImg = False
GoTo PROC_END
End If
' close it off
PROC_END:
On Error Resume Next
VisApp.Quit
Set VisApp = Nothing
Exit Function
PROC_ERR:
MsgBox Err.Description & vbCr & "Num:" & Err.Number
GoTo PROC_END
End Function
Function SplitCommandArg(ByRef Commands() As String) As Boolean
SplitCommandArg = True
'read through command and break it into an array delimited by space characters only when we're not inside double quotes
Dim InDblQts As Boolean
Dim CmdToSplit As String
CmdToSplit = TheCmd 'for debugging command line parser
'CmdToSplit = Command
Dim CharIdx As Integer
ReDim Commands(1 To 1)
For CharIdx = 1 To Len(CmdToSplit)
Dim CurrChar As String
CurrChar = Mid(CmdToSplit, CharIdx, 1)
If CurrChar = " " And Not InDblQts Then
'add another element to the commands array if InDblQts is false
If Commands(UBound(Commands)) <> "" Then ReDim Preserve Commands(LBound(Commands) To UBound(Commands) + 1)
ElseIf CurrChar = Chr(34) Then
'set InDblQts = true
If Not InDblQts Then InDblQts = True Else InDblQts = False
Else
Commands(UBound(Commands)) = Commands(UBound(Commands)) & CurrChar
End If
Next CharIdx
End Function
3 commentaires
Je reçois un "Ce nom de fichier n'est pas valide." Num: -2032466859 Erreur lors de l'appel: "vis2img.exe dag.vsd dag.gif" de la ligne de commande. Ajout 0 ou 1 à la commande pour spécifier un numéro de page ne vous aide pas. Je vais regarder davantage quand je suis hors du travail. Merci pour un excellent point de départ au moins.
Oui, vous avez besoin le chemin complet de la façon dont cela est mis en place ... Vous pouvez ruser assez facilement à défaut juste app.path pour trouver le dossier pour un fichier, si un chemin complet n'est pas présent ...
Vis2img.exe " cygpath -w -a dag.vsd code>" " cygpath -w -a dag.gif code>" à la rescousse dans Cygwin Bash :). Merci Jon.
4 votes
F # 2.0 script:
//Description:
// Generates images for all Visio diagrams in folder were run according to pages names
//Tools:
// Visio 2010 32bit is needed to open diagrams (I also installed VisioSDK32bit.exe on my Windows 7 64bit)
#r "C:/Program Files (x86)/Microsoft Visual Studio 10.0/Visual Studio Tools for Office/PIA/Office14/Microsoft.Office.Interop.Visio.dll"
open System
open System.IO
open Microsoft.Office.Interop.Visio
let visOpenRO = 2
let visOpenMinimized = 16
let visOpenHidden = 64
let visOpenMacrosDisabled = 128
let visOpenNoWorkspace = 256
let baseDir = Environment.CurrentDirectory;
let getAllDiagramFiles = Directory.GetFiles(baseDir,"*.vsd")
let drawImage fullPathToDiagramFile =
let diagrammingApplication = new ApplicationClass()
let flags = Convert.ToInt16(visOpenRO + visOpenMinimized + visOpenHidden + visOpenMacrosDisabled + visOpenNoWorkspace)
let document = diagrammingApplication.Documents.OpenEx(fullPathToDiagramFile,flags)
for page in document.Pages do
let imagePath = Path.Combine(baseDir, page.Name + ".png")
page.Export (imagePath)
document.Close()
diagrammingApplication.Quit()
let doItAll =
Array.iter drawImage getAllDiagramFiles
doItAll
2 commentaires
Si quelqu'un doit en avoir besoin, j'ai créé une version du script Powershell qui est disponible
Pour configurer la qualité de sortie, ce blog décrit les propriétés utiles et des méthodes accessibles à partir diagrammingApplication.Settings: developer.microsoft.com/en-us/visio/blogs/...
-1 votes
Vous pouvez essayer le convertisseur "Visio to Image" P>