9

仕事では、ドキュメントのサポートとしてVisioの描画をかなり広範囲に使用しています。残念ながら、vsdファイルは、ウィキやjavadoc、doxygen、naturaldocsなどのドキュメント抽出ツールではうまく機能しません。Visioファイルを手動で画像に変換することは可能ですが、画像を最新の状態に保つのは面倒であり、画像ファイルは古くなります。そしてそれに直面しましょう:リビジョン管理でファイルを生成したことはとても間違っていると感じます。

そこで、vsdファイルをjpeg、png、gif、またはブラウザで表示できる画像に変換できる任意の画像に変換できるコマンドラインツールを探しています。できればUNIXで実行できますが、Windowsだけでも問題ありません。自動化チェーンの残りの部分、cronジョブ、画像から画像への変換、ssh、scp、複数のファイルなどを処理できます。

そしてそれが私があなたに目を向ける理由です:私はそのようなツールを見つけることができません。私はそのようなツールにお金を払うことさえできないと思います。私のGoogle-fuは完全にオフになっていますか?手伝って頂けますか?

つまり、それは可能でなければなりません。COMを使用してVisioに接続し、画像として保存する方法が必要です。ちなみにVisio2007を使用しています。

前もって感謝します。

4

4 に答える 4

7

私はVB6を使用して何かをすばやく一緒に叩きました、そしてあなたはそれをダウンロードすることができます:http: //fournier.jonathan.googlepages.com/Vis2Img.exe

入力visioファイルパス、出力ファイルパス(ファイル拡張子に基づいてvisioエクスポート)、およびオプションでエクスポートするページ番号を渡すだけです。

また、私が使用したソースコードもあります。これをいじったり、VBScriptなどに変換したりする場合は、動作するはずですが、レイトバウンドコードへの変換を完了する必要があります。

お役に立てば幸いです。

ジョン

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
于 2009-07-20T16:03:57.240 に答える
4

F#2.0スクリプト:

//説明:
//ページ名に従って実行されたフォルダ内のすべてのVisioダイアグラムの画像を生成します
//ツール:
//ダイアグラムを開くにはVisio201032ビットが必要です(Windows 7 64ビットにもVisioSDK32bit.exeをインストールしました)

#r "C:/ Program Files(x86)/ Microsoft Visual Studio 10.0 / Visual Studio Tools for Office / PIA / Office14 /Microsoft.Office.Interop.Visio.dll"

オープンシステム
System.IOを開きます

Microsoft.Office.Interop.Visioを開きます

visOpenRO=2とします
visOpenMinimized=16とします
visOpenHidden=64とします
visOpenMacrosDisabled=128とします
visOpenNoWorkspace=256とします

baseDir = Environment.CurrentDirectory;

getAllDiagramFiles = Directory.GetFiles(baseDir、 "*。vsd")

drawImage fullPathToDiagramFile =
    DiagrammingApplication = new ApplicationClass()とします
    let flags = Convert.ToInt16(visOpenRO + visOpenMinimized + visOpenHidden + visOpenMacrosDisabled + visOpenNoWorkspace)
    ドキュメント=diagrammingApplication.Documents.OpenEx(fullPathToDiagramFile、flags)
    ドキュメント内のページの場合。
        imagePath = Path.Combine(baseDir、page.Name + ".png")
        page.Export(imagePath)
    document.Close()
    DiagrammingApplication.Quit()   

doItAll =     
    Array.iter drawImage getAllDiagramFiles

doItAll
于 2011-05-25T11:06:15.860 に答える
-1

「Visioから画像へ」のコンバーターを試すことができます

http://soft.postpdm.com/visio2image.html

MSVisio2007および2010でテスト済み

于 2016-01-11T14:59:25.153 に答える
-2

COMを使用してVisioに接続し、画像として保存する方法が必要です。

それなら、COMのものの使い方を知っているなら、自分で何かを書いてみませんか?結局のところ、それを行うためにすでに作られたものが見つからず、自分でそれを行う方法を理解できることがわかっている場合は、自分でそれを行うための何かを書いてみませんか?

編集:私のコメントで述べたことについて少し詳しく説明します:この状況では、ある種のスクリプトを書くことが最善の選択肢のようです。少なくとも、ここにあるcomtypesライブラリを使用すると、Pythonは非常に役立ちます。http://starship.python.net/crew/theller/comtypes/もちろん、私が言ったように、別のスクリプト言語を使用したい場合は、それを使用してみることができます。実は、私は現時点でVBAとPythonでCOMを実際に使用しているだけです(余談ですが、Microsoftは最近、COMを具体的に参照するのではなく、「自動化」を参照する傾向があります)。これはインタプリタ言語であるため、使用しているさまざまなOSのインタプリタのバージョンと、Windows、OSX、Linux、Unixなどのバージョンが必要です。一方、COMを非で使用できるとは思えません。 -なんらかのハックのないWindowsシステムなので、ソースファイルのデータを直接解析する必要があるかもしれません(Visioのデフォルト形式は何らかの形式のXMLを使用しているように見えますが、おそらくMicrosoftが愛しているように見える独自の形式の1つです)。

これまでにPythonを使用したことがない場合は、Pythonのドキュメントに人々が始めるための優れたチュートリアルがあります:http://docs.python.org/3.1/tutorial/index.html

そしてもちろん、Pythonインタープリター自体が必要になります:http://python.org/download/releases/3.1/(インストール後にPythonディレクトリをPATH環境変数に手動で追加する必要がある場合があることに注意してください。)

スクリプトを作成するときは、スクリプトを実行するための構文を「」のようにすることができます。python visioexport.py <source/original file[ with path]>[ <new file[ with path]>]"(スクリプトファイルがPythonディレクトリにあると仮定)、新しいファイルはデフォルトで元のファイルと同じ名前で同じフォルダ/ディレクトリにあります(拡張子は異なりますが、実際には、必要に応じて複数の形式にエクスポートするように設定できます。形式はデフォルトで選択したデフォルトの拡張子の形式になり、別の拡張子で指定されます。ファイル名に1つ指定します。また、次のように設定することもできます。ソースファイルの後に新しいファイル名があり、パスが指定されていない場合は、その新しいファイル名でソースファイルのディレクトリに保存されます。もちろん、ソースファイルのパスを指定しない場合は、ファイル名。現在のディレクトリからファイルを取得するように設定できます)。

ファイル形式のトピックについては、SVGに変換するのが最善の方法であるように思われます。これは、スペース効率が高く、元の画像のステータスをベクトル化された画像としてより適切に反映するためです。一方、Visio形式からSVGへの変換は完全ではありません(または、少なくとも、Visio2003ではありませんでした。Visio2007の場合と同様の情報源が見つかりませんここに表示されているように、結果のXMLファイルを変更する必要がある場合があります(ただし、ファイルがエクスポートされた後、Python標準ライブラリの一部を介してスクリプトを使用して変更できます)。ビットマップの追加のファイルサイズを気にせず、結果のSVGファイルを修正するために追加のコードを含める必要がない場合は、おそらくPNGなどのビットマップ形式を使用する必要があります。

于 2009-07-17T20:34:50.513 に答える