Преобразование рисунка Microsoft Visio (vsd) в PDF автоматически - PullRequest
6 голосов
/ 24 декабря 2010

Проект с открытым исходным кодом, над которым я работаю, использует чертежи Visio для документации, которая проверяется в системе контроля версий.Для тех, кто работает над проектом и не владеет Visio, мы конвертировали файлы vsd в PDF-файлы, чтобы они по-прежнему могли их просматривать.При внесении изменений в документацию не слишком сложно сохранить копию в формате PDF, но нам нужен автоматизированный способ сделать это преобразование, чтобы мы могли настроить его как сценарий предварительной проверки в клиенте SVN.Если кто-нибудь знает способ сделать это, используя что-то встроенное в Visio, или с помощью внешнего скрипта или инструмента командной строки, мы будем признательны.

Редактировать: БлагодаряВ приведенном ниже предложении я нашел Visio Viewer 2010 .Это будет полезно для наших участников, использующих Windows.Мы все еще хотели бы иметь возможность создавать PDF-файлы, поскольку в каждой основной операционной системе есть программы чтения, и наши участники не будут использовать только Windows.

Ответы [ 4 ]

4 голосов
/ 05 октября 2011

Я нашел этот хороший скрипт VBS и адаптировал его к Visio. Его можно вызывать через Cygwin (работает для всех видов Office)

 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
2 голосов
/ 07 сентября 2012

Вы можете использовать vsd2svg и svg2pdf для процесса конвертации - если вы хотите сделать это в командной строке.Или базовые библиотеки.

http://dia -installer.de / vsd2svg

http://cgit.freedesktop.org/~cworth/svg2pdf/

0 голосов
/ 24 ноября 2018

Этот проект действительно крут: https://github.com/cognidox/OfficeToPDF

Очень легко интегрировать в процессную задачу Python. Предоставлена ​​скомпилированная версия (OfficeToPDF.exe).

0 голосов
/ 29 декабря 2010

Visio 2007 добавил метод ExportAsFixedFormat к API Visio, который позволит программно создавать PDF-файл в Visio.

Сложная часть заключается в развертывании кода таким образом, который имеет смысл для вашего проекта. Вы можете создать трафарет, который будет действовать как дополнение, и прикрепить этот трафарет ко всем документам Visio в вашем проекте. Код в шаблоне просто следит за объектом приложения Visio на наличие событий DocumentSaved и сохраняет PDF-документ в той же папке.

...