Skip to main content
patm266230
Participant
July 23, 2015
Question

XML: Too Many OLE Visio Objects Kills Performance

  • July 23, 2015
  • 1 reply
  • 316 views

The document source I have is DITA XML with links to 20-50 external Visio files.

When I open the XML file in Frame, it takes several minutes (up to 5 minutes) to load.

Is there an issue with invoking Visio in the background for each individual Visio filles?

When I use .fm/.mif as source, there is no performance issue.

This topic has been closed for replies.

1 reply

Arnis Gubins
Inspiring
July 27, 2015

The FM binary and MIF files store the rendered metafile format of the Visio drawing along with the link. When you use any XML version with a link, FM would have to render each link every time it is referenced [no rendered version gets stored in the XML file], so this is where you are most likely running into the long load times.

Creating PDFs [and then EPS files from those] from the Visio files and referencing those would speed things up as FM only reads and displays the preview component while working on the content.

Legend
July 28, 2015

I have also had great success with XML and the WMF format saved from Visio, for many years. Since you are using Visio within FM, it seems like you are not leaving the Windows environment, so maybe this is an option. I think that fonts are not saved, so any fonts in an image would need to be on that computer, but the same thing would be true for a Visio OLE object.

It is very simple to write a macro in Visio to automatically save as WMF. Here's one I use to save as both WMF and PNG:

Sub Save_as_PNG_WMF()

    Dim path As String

    Dim newpath As String

   

    Dim length As Integer

   

    ' Get the document path

    path = Application.ActiveWindow.Document.FullName

   

    ' get the length of the path, to be used for truncation

    length = Len(path)

   

    ' change our filename to have a wmf extension

    newpath = Left(path, length - 4)

    newpath = newpath + ".wmf"

    ' save the wmf

    Application.ActiveWindow.Page.Export newpath

    ' do the same for png

    newpath = Left(path, length - 4)

    newpath = newpath + ".png"

    Application.ActiveWindow.Page.Export newpath

End Sub

Russ

patm266230
Participant
July 28, 2015

thank you for the pointer. I will try this.