Visio для обработки изображений преобразования командной строки

Никакие аргументы в ОТДЕЛЕНИЯХ не способствуют от меня.

я сказал бы: Если обувь соответствует, носите ее.

стоит отметить, что это трудно, если не невозможный найти хороший метод DIV+CSS рендеринга содержания в двух или трех столбцах, который последователен на всех браузерах, и все еще смотрит просто способ, которым я предназначил.

Это склоняет чашу весов немного к таблицам в большинстве моих разметок, и хотя я чувствую себя виновным в использовании их (dunny, почему, люди просто говорят, что это плохо, таким образом, я пытаюсь слушать их), в конце, прагматическое представление, это просто легче и быстрее для меня для использования ТАБЛИЦ. Мне не платят по часам, таким образом, таблицы являются более дешевыми для меня.

7
задан Peter Monsson 17 July 2009 в 19:38
поделиться

2 ответа

Я быстро собрал кое-что вместе с помощью 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
7
ответ дан 7 December 2019 в 07:49
поделиться

Должен быть способ подключиться к Visio с помощью COM и сохранить его как изображение.

Почему бы не попробовать написать что-нибудь самостоятельно, тогда, если вы знаете, как использовать материалы COM ? В конце концов, если вы не можете найти что-либо, что уже сделано для этого, и знаете, что можете выяснить, как это сделать самостоятельно, почему бы не написать что-нибудь, чтобы сделать это самостоятельно?

РЕДАКТИРОВАТЬ: Немного проработав то, что я сказал в моем комментарии: написание какого-либо скрипта кажется вашим лучшим вариантом в этой ситуации, и Python, по крайней мере, был бы весьма полезен для этого, используя библиотеку comtypes, найденную здесь: http: // starship. python.net/crew/theller/comtypes/ Конечно, как я уже сказал, если вы предпочитаете использовать другой язык сценариев, вы можете попробовать его; дело в том, что на данный момент я действительно использовал COM только с VBA и Python (в стороне, при этом формат по умолчанию соответствует любому выбранному вами расширению по умолчанию и указывается альтернативным расширением, указанным вами в имени файла. Кроме того, вы, вероятно, могли бы настроить его так, чтобы, если у вас есть только новое имя файла после исходного файла, без указания пути, он будет сохраняться с этим новым именем файла в каталог исходного файла. И, конечно, если вы не укажете путь к исходному файлу, а только имя файла, вы можете настроить его для получения файла из текущего каталога).

Что касается форматов файлов: кажется Для меня преобразование в SVG могло бы быть лучшим решением, так как это было бы более компактным и лучше отражало бы статус исходных изображений как векторных изображений. С другой стороны, преобразование из формата Visio в SVG не идеально (или, по крайней мере, этого не было в Visio 2003; я могу '' t найти источник информации, похожий на этот для Visio 2007), и, как видно здесь , вам, возможно, придется изменить полученный XML-файл (хотя это можно сделать с помощью сценария , после экспорта файла с помощью частей стандартной библиотеки Python). Если вы не возражаете против дополнительного размера файлов растровых изображений и не хотите включать дополнительный код для исправления результирующих файлов SVG, тогда вам, вероятно, следует просто использовать формат растровых изображений, например PNG.

-2
ответ дан 7 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: