Преобразование Microsoft Visio Drawing (vsd) в PDF автоматически
проект с открытым исходным кодом, над которым я работаю, использует чертежи Visio для документации, которые проверяются в системе управления версиями. Для тех, кто работает над проектом, у кого нет Visio, мы конвертируем файлы vsd в PDF-файлы, чтобы они могли их просматривать. Не слишком сложно сохранить копию в формате PDF при внесении изменений в документацию, но мы хотели бы автоматизированный способ сделать это преобразование, чтобы мы могли настроить его как сценарий предварительной проверки в SVN-клиенте. Если кто-нибудь знает способ сделать это, либо используя что-то встроенное в Visio, либо с помощью внешнего скрипта или инструмента командной строки, мы были бы признательны.
Edit: благодаря предложению ниже, я нашел Visio Viewer 2010. Это будет полезно для наших участников, использующих Windows. Мы по-прежнему хотели бы иметь возможность создавать PDF-файлы, хотя, поскольку есть читатели, доступные в каждой основной операционной системе, и наши участники не будут использовать только Окна.
3 ответов
Я нашел этот хороший скрипт vbs и адаптировал его к visio.Его можно назвать через cygwin (работает для всех видов офисных вещей)
Option Explicit
Main()
Sub Main()
If WScript.Arguments.Count > 0 Then
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim i
For i = 0 to wscript.arguments.count - 1
Dim strFilePath : strFilePath = WScript.Arguments.Item(i)
Dim dirPath : dirPath = objFSO.GetParentFolderName(strFilePath)
Dim fileBaseName : fileBaseName = objFSO.GetBaseName(strFilePath)
'WScript.Echo strFilePath
Dim strNewFileName : strNewFileName = dirPath & "\" & fileBaseName & ".pdf"
'WScript.Echo strNewFileName
Dim strFileExt : strFileExt = UCase(objFSO.GetExtensionName(strFilePath))
Select Case strFileExt
Case "DOC"
DOC2PDF strFilePath, strNewFileName
Case "XLS"
XLS2PDF strFilePath, strNewFileName
Case "PPT"
PPT2PDF strFilePath, strNewFileName
Case "VSD"
VSD2PDF strFilePath, strNewFileName
Case Else
WScript.Echo "Extension Type: " & strFileExt
End Select
Next
Else
msgbox("Sie muessen eine Datei zum konvertieren auswählen.")
End If
End Sub
Sub PPT2PDF(strSourceFile, strDestFile)
Const ppWindowMinimized = 2
Const ppWindowNormal = 1
Const ppSaveAsPDF = 32
Dim objPPT : Set objPPT = CreateObject("PowerPoint.Application")
objPPT.Visible = True
objPPT.WindowState = ppWindowMinimized
objPPT.Presentations.Open strSourceFile
objPPT.ActivePresentation.SaveAs strDestFile, ppSaveAsPDF
objPPT.Quit()
End Sub
Sub DOC2PDF(strSourceFile, strDestFile)
Const wdExportAllDocument = 0
Const wdExportOptimizeForPrint = 0
Const wdExportDocumentContent = 0
Const wdExportFormatPDF = 17
Const wdExportCreateHeadingBookmarks = 1
Dim objWord : Set objWord = CreateObject("Word.Application")
Dim objDoc : Set objDoc = objWord.Documents.Open(strSourceFile,,TRUE)
objWord.ActiveDocument.ExportAsFixedFormat strDestFile, wdExportFormatPDF, False, _
wdExportOptimizeForPrint, wdExportAllDocument,,, _
wdExportDocumentContent, False, True, wdExportCreateHeadingBookmarks
objWord.Quit()
End Sub
Sub XLS2PDF(strSourceFile, strDestFile)
Const xlTypePDF = 0
Dim objExcel : Set objExcel = CreateObject("Excel.Application")
Dim objeDoc : Set objeDoc = objExcel.Workbooks.Open(strSourceFile,,TRUE)
objExcel.ActiveWorkbook.ExportAsFixedFormat xlTypePDF, strDestFile
objExcel.ActiveWorkbook.Close(False)
objExcel.Quit
End Sub
Sub VSD2PDF(strSourceFile, strDestFile)
Const xlTypePDF = 1
Const visOpenRO = 2
Const visOpenMinimized = 16
Const visOpenHidden = 64
Const visOpenMacrosDisabled = 128
Const visOpenNoWorkspace = 256
Dim objVisio : Set objVisio = CreateObject("Visio.Application")
Dim objeDoc : Set objeDoc = objVisio.Documents.OpenEx(strSourceFile, visOpenRO + visOpenMinimized + visOpenHidden + visOpenMacrosDisabled + visOpenNoWorkspace)
objeDoc.ExportAsFixedFormat xlTypePDF, strDestFile, 1, 0
objeDoc.Close
objVisio.Quit
End Sub
вы можете использовать vsd2svg и svg2pdf для процесса преобразования - если вы хотите сделать это в командной строке. Или базовые библиотеки.
Visio 2007 добавил метод ExportAsFixedFormat в API Visio, который позволит вам программно создать PDF-файл в Visio.
самая сложная часть-это развертывание кода таким образом, что имеет смысл для вашего проекта. Вы можете создать трафарет, который просто действует как аддон, и прикрепить этот трафарет ко всем документам Visio в вашем проекте. Код в трафарете будет просто наблюдать за объектом приложения Visio для событий DocumentSaved и сохранять pdf-файл документа в та же папка.