8000 GitHub - kakwa/libvisio2svg: Library/Tools to convert Microsoft (MS) Visio documents (VSS and VSD) to SVG
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Library/Tools to convert Microsoft (MS) Visio documents (VSS and VSD) to SVG

License

Notifications You must be signed in to change notification settings

kakwa/libvisio2svg

{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":51251036,"defaultBranch":"master","name":"libvisio2svg","ownerLogin":"kakwa","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-02-07T14:47:51.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/3058109?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"master","listCacheKey":"v0:1742162835.0","canEdit":false,"refType":"branch","currentOid":"df880a91b3f71d3a3d4165ba9e782e75723fd153"},"tree":{"items":[{"name":"cmake","path":"cmake","contentType":"directory"},{"name":"deps","path":"deps","contentType":"directory"},{"name":"goodies","path":"goodies","contentType":"directory"},{"name":"inc","path":"inc","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".travis.yml","path":".travis.yml","contentType":"file"},{"name":"CMakeLists.txt","path":"CMakeLists.txt","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":11,"showBranchInfobar":false},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/kakwa/libvisio2svg/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/kakwa/libvisio2svg.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone kakwa/libvisio2svg","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2Fkakwa%2Flibvisio2svg","zipballUrl":"/kakwa/libvisio2svg/archive/refs/heads/master.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=51251036"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"161","overviewFiles":[{"displayName":"README.md","repoName":"libvisio2svg","refName":"master","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLibvisio2svg\u003c/h1\u003e\u003ca id=\"user-content-libvisio2svg\" class=\"anchor\" aria-label=\"Permalink: Libvisio2svg\" href=\"#libvisio2svg\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://travis-ci.org/kakwa/libvisio2svg\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/8a7f008443f12062485ab5b72e1cfe8a576dde4575f300e4f56f6faffb6119e2/68747470733a2f2f7472617669732d63692e6f72672f6b616b77612f6c6962766973696f327376672e7376673f6272616e63683d6d6173746572\" alt=\"Build Status\" data-canonical-src=\"https://travis-ci.org/kakwa/libvisio2svg.svg?branch=master\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLibrary/Utilities to convert Microsoft (MS) Visio Documents and Stencils (VSS and VSD) to SVG.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eMotivation\u003c/h1\u003e\u003ca id=\"user-content-motivation\" class=\"anchor\" aria-label=\"Permalink: Motivation\" href=\"#motivation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThere are tons of publicly available MS Visio stencils, for example\n\u003ca href=\"http://www.cisco.com/c/en/us/products/visio-stencil-listing.html\" rel=\"nofollow\"\u003ethe Cisco ones\u003c/a\u003e\nor the stencils from \u003ca href=\"http://www.visiocafe.com/\" rel=\"nofollow\"\u003eVisioCafe\u003c/a\u003e.\nThis library and utilities were created to be able to convert these stencils to SVG\nand reuse them outside of Microsoft Visio, in programs like\n\u003ca href=\"https://www.yworks.com/products/yed\" rel=\"nofollow\"\u003eyEd\u003c/a\u003e, \u003ca href=\"https://inkscape.org\" rel=\"nofollow\"\u003eInkscape\u003c/a\u003e,\n\u003ca href=\"http://dia-installer.de/\" rel=\"nofollow\"\u003eDia\u003c/a\u003e, \u003ca href=\"https://www.calligra.org/flow/\" rel=\"nofollow\"\u003eCalligra Flow\u003c/a\u003e...\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis library is mainly the glue between \u003ca href=\"http://sourceforge.net/p/libwpd/wiki/librevenge/\" rel=\"nofollow\"\u003elibrevenge\u003c/a\u003e/\u003ca href=\"https://github.com/LibreOffice/libvisio\"\u003elibvisio\u003c/a\u003e, \u003ca href=\"https://github.com/kakwa/libemf2svg\"\u003elibemf2svg\u003c/a\u003e and \u003ca href=\"http://wvware.sourceforge.net/libwmf.html\" rel=\"nofollow\"\u003elibwmf\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAbout libemf2svg\u003c/h2\u003e\u003ca id=\"user-content-about-libemf2svg\" class=\"anchor\" aria-label=\"Permalink: About libemf2svg\" href=\"#about-libemf2svg\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/kakwa/libemf2svg\"\u003elibemf2svg\u003c/a\u003e is another library of mine.\nIt was developed to handle MS EMF (Enhanced Metafile) blobs which constitute most of Visio VSS shapes.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLibrevenge/Libvisio would otherwise only dump the EMF blob as base64 in an \u0026lt;image\u0026gt; SVG tag, which most viewer/editor/browser\nwould be unable to display.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLicense\u003c/h1\u003e\u003ca id=\"user-content-license\" class=\"anchor\" aria-label=\"Permalink: License\" href=\"#license\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eLibvisio2svg is licensed under GPLv2.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDependencies\u003c/h1\u003e\u003ca id=\"user-content-dependencies\" class=\"anchor\" aria-label=\"Permalink: Dependencies\" href=\"#dependencies\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://sourceforge.net/p/libwpd/wiki/librevenge/\" rel=\"nofollow\"\u003elibrevenge\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/LibreOffice/libvisio\"\u003elibvisio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kakwa/libemf2svg\"\u003elibemf2svg\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.xmlsoft.org/\" rel=\"nofollow\"\u003elibxml2\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://wvware.sourceforge.net/libwmf.html\" rel=\"nofollow\"\u003elibwmf\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ghostscript.com/\" rel=\"nofollow\"\u003efonts from the ghostscript project\u003c/a\u003e (libwmf requirement, usually the distribution package is named \u003ccode\u003egsfonts\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBuilding\u003c/h1\u003e\u003ca id=\"user-content-building\" class=\"anchor\" aria-label=\"Permalink: Building\" href=\"#building\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCommands to build this project:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# CMAKE_INSTALL_PREFIX is optional, default is /usr/local/\n$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/\n\n# compilation\n$ make\n\n# installation\n$ make install\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e CMAKE_INSTALL_PREFIX is optional, default is /usr/local/\u003c/span\u003e\n$ cmake \u003cspan class=\"pl-c1\"\u003e.\u003c/span\u003e -DCMAKE_INSTALL_PREFIX=/usr/\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e compilation\u003c/span\u003e\n$ make\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e installation\u003c/span\u003e\n$ make install\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRegex\u003c/h2\u003e\u003ca id=\"user-content-regex\" class=\"anchor\" aria-label=\"Permalink: Regex\" href=\"#regex\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe vss2svg and vsd2svg utilities rely on regular expressions to construct safe file names from stencils/sheets names.\nIt will replace anything that is not matching \u003cstrong\u003e[A-Za-z0-9-]\u003c/strong\u003e by an underscore.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis functionality relies on regexp from libstdc++ (c++11 standard), but older libraries doesn't support regex.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eYet you can compile without this file name sanitization:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"$ cmake . -DUNSAFE_FILENAME=ON\n$ make\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e$ cmake . -DUNSAFE_FILENAME=ON\n$ make\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eHowever, be cautious with the stencil/sheet names, otherwise some files might be written outside the output directory.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUsage\u003c/h1\u003e\u003ca id=\"user-content-usage\" class=\"anchor\" aria-label=\"Permalink: Usage\" href=\"#usage\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCommand Line\u003c/h2\u003e\u003ca id=\"user-content-command-line\" class=\"anchor\" aria-label=\"Permalink: Command Line\" href=\"#command-line\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eConvert VSS:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# conversion\n$ vss2svg-conv -i ./2960CX.vss -o ./out/ -s 4.5\n\n$ ls out/\n'Cisco R42610 Front.svg' 'WS-C2960CX-8PC-L Rear.svg' 'WS-C2960CX-8TC-L Rear.svg'\n'WS-C2960CX-8PC-L Front.svg' 'WS-C2960CX-8TC-L Front.svg'\n\n# help\n$ vss2svg-conv --help\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e conversion\u003c/span\u003e\n$ vss2svg-conv -i ./2960CX.vss -o ./out/ -s 4.5\n\n$ ls out/\n\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003eCisco R42610 Front.svg\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003eWS-C2960CX-8PC-L Rear.svg\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003eWS-C2960CX-8TC-L Rear.svg\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003eWS-C2960CX-8PC-L Front.svg\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003eWS-C2960CX-8TC-L Front.svg\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e help\u003c/span\u003e\n$ vss2svg-conv --help\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eConvert VSD:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# conversion\n$ vsd2svg-conv -i ./my.VSD -o ./out/ -s 7\n\n$ ls out/\nPage-1.svg Page-2.svg Page-3.svg Page-4.svg\n\n# help\n$ vsd2svg-conv --help\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e conversion\u003c/span\u003e\n$ vsd2svg-conv -i ./my.VSD -o ./out/ -s 7\n\n$ ls out/\nPage-1.svg Page-2.svg Page-3.svg Page-4.svg\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e help\u003c/span\u003e\n$ vsd2svg-conv --help\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLibrary\u003c/h1\u003e\u003ca id=\"user-content-library\" class=\"anchor\" aria-label=\"Permalink: Library\" href=\"#library\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConvert Visio Documents\u003c/h2\u003e\u003ca id=\"user-content-convert-visio-documents\" class=\"anchor\" aria-label=\"Permalink: Convert Visio Documents\" href=\"#convert-visio-documents\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eexample:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"#include \u0026lt;fstream\u0026gt;\n#include \u0026lt;iostream\u0026gt;\n#include \u0026lt;unordered_map\u0026gt;\n#include \u0026lt;visio2svg/Visio2Svg.h\u0026gt;\n\nint main(int argc, char **argv) {\n // Put visio file in an std::string\n // (no error checking, should be done in actual code)\n std::ifstream stin(argv[1]);\n\n std::string visio_in((std::istreambuf_iterator\u0026lt;char\u0026gt;(stin)),\n std::istreambuf_iterator\u0026lt;char\u0026gt;());\n\n // Initialize converter and output map\n visio2svg::Visio2Svg converter;\n std::unordered_map\u0026lt;std::string, std::string\u0026gt; out;\n\n // return code\n int ret = 0;\n\n // Pick one of the following\n\n // Convert vsd documents\n ret = converter.vsd2svg(visio_in, out);\n\n // Convert vss (Stencils) documents\n ret = converter.vss2svg(visio_in, out);\n\n // or with rescaling\n ret = converter.vsd2svg(visio_in, out, 4.5);\n ret = converter.vss2svg(visio_in, out, 4.5);\n\n if (ret)\n std::cerr \u0026lt;\u0026lt; \u0026quot;Conversion errors occured\u0026quot;\n \u0026lt;\u0026lt; \u0026quot;\\n\u0026quot;;\n\n // Do something with the output\n for (const auto \u0026amp;rule_pair : out) {\n std::cout \u0026lt;\u0026lt; \u0026quot;Sheet Title: \u0026quot; \u0026lt;\u0026lt; rule_pair.first \u0026lt;\u0026lt; std::endl;\n std::cout \u0026lt;\u0026lt; rule_pair.second \u0026lt;\u0026lt; std::endl;\n }\n}\"\u003e\u003cpre\u003e#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003efstream\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003eiostream\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003eunordered_map\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003evisio2svg/Visio2Svg.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e argc, \u003cspan class=\"pl-k\"\u003echar\u003c/span\u003e **argv) {\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Put visio file in an std::string\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e (no error checking, should be done in actual code)\u003c/span\u003e\n std::ifstream \u003cspan class=\"pl-smi\"\u003estin\u003c/span\u003e(argv[\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]);\n\n std::string \u003cspan class=\"pl-smi\"\u003evisio_in\u003c/span\u003e((std::istreambuf_iterator\u0026lt;\u003cspan class=\"pl-k\"\u003echar\u003c/span\u003e\u0026gt;(stin)),\n std::istreambuf_iterator\u0026lt;\u003cspan class=\"pl-k\"\u003echar\u003c/span\u003e\u0026gt;());\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Initialize converter and output map\u003c/span\u003e\n visio2svg::Visio2Svg converter;\n std::unordered_map\u0026lt;std::string, std::string\u0026gt; out;\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e return code\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e ret = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e;\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Pick one of the following\u003c/span\u003e\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Convert vsd documents\u003c/span\u003e\n ret = converter.\u003cspan class=\"pl-c1\"\u003evsd2svg\u003c/span\u003e(visio_in, out);\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Convert vss (Stencils) documents\u003c/span\u003e\n ret = converter.\u003cspan class=\"pl-c1\"\u003evss2svg\u003c/span\u003e(visio_in, out);\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e or with rescaling\u003c/span\u003e\n ret = converter.\u003cspan class=\"pl-c1\"\u003evsd2svg\u003c/span\u003e(visio_in, out, \u003cspan class=\"pl-c1\"\u003e4.5\u003c/span\u003e);\n ret = converter.\u003cspan class=\"pl-c1\"\u003evss2svg\u003c/span\u003e(visio_in, out, \u003cspan class=\"pl-c1\"\u003e4.5\u003c/span\u003e);\n\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (ret)\n std::cerr \u0026lt;\u0026lt; \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eConversion errors occured\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n \u0026lt;\u0026lt; \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-cce\"\u003e\\n\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e;\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Do something with the output\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eauto\u003c/span\u003e \u0026amp;rule_pair : out) {\n std::cout \u0026lt;\u0026lt; \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eSheet Title: \u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e \u0026lt;\u0026lt; rule_pair.\u003cspan class=\"pl-smi\"\u003efirst\u003c/span\u003e \u0026lt;\u0026lt; std::endl;\n std::cout \u0026lt;\u0026lt; rule_pair.\u003cspan class=\"pl-smi\"\u003esecond\u003c/span\u003e \u0026lt;\u0026lt; std::endl;\n }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRecover symbol titles\u003c/h2\u003e\u003ca id=\"user-content-recover-symbol-titles\" class=\"anchor\" aria-label=\"Permalink: Recover symbol titles\" href=\"#recover-symbol-titles\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis library also comes with a RVNG generator to recover symbol titles:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"#include \u0026lt;iostream\u0026gt;\n#include \u0026lt;librevenge-generators/librevenge-generators.h\u0026gt;\n#include \u0026lt;librevenge-stream/librevenge-stream.h\u0026gt;\n#include \u0026lt;librevenge/librevenge.h\u0026gt;\n#include \u0026lt;libvisio/libvisio.h\u0026gt;\n#include \u0026lt;visio2svg/TitleGenerator.h\u0026gt;\n\nint main(int argc, char **argv) {\n // put the Visio document in an RVNGFileStream \n // (no error checking, should be done in actual code)\n librevenge::RVNGFileStream input(argv[1]);\n\n /* String stream version (need to be set)\n librevenge::RVNGStringStream input;\n */\n\n // Recover Titles of each sheets\n librevenge::RVNGStringVector output_names;\n visio2svg::TitleGenerator generator_names(output_names);\n\n bool ret = libvisio::VisioDocument::parseStencils(\u0026amp;input, \u0026amp;generator_names);\n /* or this for vsd\n ret = libvisio::VisioDocument::parse(\u0026amp;input, \u0026amp;generator_names);\n */\n\n if (!ret || output_names.empty()) {\n std::cerr \u0026lt;\u0026lt; \u0026quot;ERROR: Failed to recover sheets titles failed!\u0026quot;\n \u0026lt;\u0026lt; std::endl;\n return 1;\n }\n\n // do something with the names\n for (unsigned k = 0; k \u0026lt; output_names.size(); ++k) {\n std::cout \u0026lt;\u0026lt; \u0026quot;Title of stencil \u0026quot; \u0026lt;\u0026lt; std::to_string(k) \u0026lt;\u0026lt; std::endl;\n if (output_names[k].empty()) {\n std::cout \u0026lt;\u0026lt; \u0026quot;no title set in stencil number \u0026quot; \u0026lt;\u0026lt; std::to_string(k)\n \u0026lt;\u0026lt; std::endl;\n } else {\n std::cout \u0026lt;\u0026lt; output_names[k].cstr() \u0026lt;\u0026lt; std::endl;\n }\n }\n}\"\u003e\u003cpre\u003e#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003eiostream\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003elibrevenge-generators/librevenge-generators.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003elibrevenge-stream/librevenge-stream.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003elibrevenge/libreve 8000 nge.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003elibvisio/libvisio.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n#\u003cspan class=\"pl-k\"\u003einclude\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\u0026lt;\u003c/span\u003evisio2svg/TitleGenerator.h\u003cspan class=\"pl-pds\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e argc, \u003cspan class=\"pl-k\"\u003echar\u003c/span\u003e **argv) {\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e put the Visio document in an RVNGFileStream \u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e (no error checking, should be done in actual code)\u003c/span\u003e\n librevenge::RVNGFileStream \u003cspan class=\"pl-smi\"\u003einput\u003c/span\u003e(argv[\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]);\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e/*\u003c/span\u003e String stream version (need to be set)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e librevenge::RVNGStringStream input;\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e \u003cspan class=\"pl-c\"\u003e*/\u003c/span\u003e\u003c/span\u003e\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e Recover Titles of each sheets\u003c/span\u003e\n librevenge::RVNGStringVector output_names;\n visio2svg::TitleGenerator \u003cspan class=\"pl-smi\"\u003egenerator_names\u003c/span\u003e(output_names);\n\n \u003cspan class=\"pl-k\"\u003ebool\u003c/span\u003e ret = \u003cspan class=\"pl-c1\"\u003elibvisio::VisioDocument::parseStencils\u003c/span\u003e(\u0026amp;input, \u0026amp;generator_names);\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e/*\u003c/span\u003e or this for vsd\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e ret = libvisio::VisioDocument::parse(\u0026amp;input, \u0026amp;generator_names);\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e \u003cspan class=\"pl-c\"\u003e*/\u003c/span\u003e\u003c/span\u003e\n\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (!ret || output_names.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e()) {\n std::cerr \u0026lt;\u0026lt; \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eERROR: Failed to recover sheets titles failed!\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n \u0026lt;\u0026lt; std::endl;\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e;\n }\n\n \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e do something with the names\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eunsigned\u003c/span\u003e k = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; k \u0026lt; output_names.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e(); ++k) {\n std::cout \u0026lt;\u0026lt; \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eTitle of stencil \u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e \u0026lt;\u0026lt; \u003cspan class=\"pl-c1\"\u003estd::to_string\u003c/span\u003e(k) \u0026lt;\u0026lt; std::endl;\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (output_names[k].\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e()) {\n std::cout \u0026lt;\u0026lt; \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eno title set in stencil number \u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e \u0026lt;\u0026lt; \u003cspan class=\"pl-c1\"\u003estd::to_string\u003c/span\u003e(k)\n \u0026lt;\u0026lt; std::endl;\n } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n std::cout \u0026lt;\u0026lt; output_names[k].\u003cspan class=\"pl-c1\"\u003ecstr\u003c/span\u003e() \u0026lt;\u0026lt; std::endl;\n }\n }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChangelog\u003c/h1\u003e\u003ca id=\"user-content-changelog\" class=\"anchor\" aria-label=\"Permalink: Changelog\" href=\"#changelog\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.5.5\u003c/h2\u003e\u003ca id=\"user-content-055\" class=\"anchor\" aria-label=\"Permalink: 0.5.5\" href=\"#055\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eadd LIB_INSTALL_DIR variable in cmake\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.5.4\u003c/h2\u003e\u003ca id=\"user-content-054\" class=\"anchor\" aria-label=\"Permalink: 0.5.4\" href=\"#054\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efix freetype discovery in cmake\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.5.3\u003c/h2\u003e\u003ca id=\"user-content-053\" class=\"anchor\" aria-label=\"Permalink: 0.5.3\" href=\"#053\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efix segfault if shape doesn't contain title\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.5.2\u003c/h2\u003e\u003ca id=\"user-content-052\" class=\"anchor\" aria-label=\"Permalink: 0.5.2\" href=\"#052\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efix error in setting title field with titles containing \"\u0026amp;\"\u003c/li\u003e\n\u003cli\u003eadd XML_PARSE_HUGE in xml parsing to allow big image blobs.\u003c/li\u003e\n\u003cli\u003ebetter precision for image dimensions (keep 10 decimals)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.5.1\u003c/h2\u003e\u003ca id=\"user-content-051\" class=\"anchor\" aria-label=\"Permalink: 0.5.1\" href=\"#051\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eadd support for OSX\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.5.0\u003c/h2\u003e\u003ca id=\"user-content-050\" class=\"anchor\" aria-label=\"Permalink: 0.5.0\" href=\"#050\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eadding support to convert wmf blob (using libwmf)\u003c/li\u003e\n\u003cli\u003erequires new libraries as dependencies: libwmf and freetype)\u003c/li\u003e\n\u003cli\u003erequires libemf2svg version \u0026gt;= 1.0.0\u003c/li\u003e\n\u003cli\u003ecleaner and more explicit dependencies resolving in cmake\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.4.1\u003c/h2\u003e\u003ca id=\"user-content-041\" class=\"anchor\" aria-label=\"Permalink: 0.4.1\" href=\"#041\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eadding safeguard regarding unsafe output file paths\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.3.0\u003c/h2\u003e\u003ca id=\"user-content-030\" class=\"anchor\" aria-label=\"Permalink: 0.3.0\" href=\"#030\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ebetter error handling\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.2.0\u003c/h2\u003e\u003ca id=\"user-content-020\" class=\"anchor\" aria-label=\"Permalink: 0.2.0\" href=\"#020\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eadd rescaling option + title\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.1.0\u003c/h2\u003e\u003ca id=\"user-content-010\" class=\"anchor\" aria-label=\"Permalink: 0.1.0\" href=\"#010\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efirst release\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":1,"text":"Libvisio2svg","anchor":"libvisio2svg","htmlText":"Libvisio2svg"},{"level":1,"text":"Motivation","anchor":"motivation","htmlText":"Motivation"},{"level":2,"text":"About libemf2svg","anchor":"about-libemf2svg","htmlText":"About libemf2svg"},{"level":1,"text":"License","anchor":"license","htmlText":"License"},{"level":1,"text":"Dependencies","anchor":"dependencies","htmlText":"Dependencies"},{"level":1,"text":"Building","anchor":"building","htmlText":"Building"},{"level":2,"text":"Regex","anchor":"regex","htmlText":"Regex"},{"level":1,"text":"Usage","anchor":"usage","htmlText":"Usage"},{"level":2,"text":"Command Line","anchor":"command-line","htmlText":"Command Line"},{"level":1,"text":"Library","anchor":"library","htmlText":"Library"},{"level":2,"text":"Convert Visio Documents","anchor":"convert-visio-documents","htmlText":"Convert Visio Documents"},{"level":2,"text":"Recover symbol titles","anchor":"recover-symbol-titles","htmlText":"Recover symbol titles"},{"level":1,"text":"Changelog","anchor":"changelog","htmlText":"Changelog"},{"level":2,"text":"0.5.5","anchor":"055","htmlText":"0.5.5"},{"level":2,"text":"0.5.4","anchor":"054","htmlText":"0.5.4"},{"level":2,"text":"0.5.3","anchor":"053","htmlText":"0.5.3"},{"level":2,"text":"0.5.2","anchor":"052","htmlText":"0.5.2"},{"level":2,"text":"0.5.1","anchor":"051","htmlText":"0.5.1"},{"level":2,"text":"0.5.0","anchor":"050","htmlText":"0.5.0"},{"level":2,"text":"0.4.1","anchor":"041","htmlText":"0.4.1"},{"level":2,"text":"0.3.0","anchor":"030","htmlText":"0.3.0"},{"level":2,"text":"0.2.0","anchor":"020","htmlText":"0.2.0"},{"level":2,"text":"0.1.0","anchor":"010","htmlText":"0.1.0"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fkakwa%2Flibvisio2svg"}},{"displayName":"LICENSE","repoName":"libvisio2svg","refName":"master","path":"LICENSE","preferredFileType":"license","tabName":"GPL-2.0","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fkakwa%2Flibvisio2svg"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-708ec8ade250.js","githubDevUrl":null,"enabled_features":{"copilot_workspace":null,"code_nav_ui_events":false,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}}

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Libvisio2svg

Build Status

Library/Utilities to convert Microsoft (MS) Visio Documents and Stencils (VSS and VSD) to SVG.

Motivation

There are tons of publicly available MS Visio stencils, for example the Cisco ones or the stencils from VisioCafe. This library and utilities were created to be able to convert these stencils to SVG and reuse them outside of Microsoft Visio, in programs like yEd, Inkscape, Dia, Calligra Flow...

This library is mainly the glue between librevenge/libvisio, libemf2svg and libwmf.

About libemf2svg

libemf2svg is another library of mine. It was developed to handle MS EMF (Enhanced Metafile) blobs which constitute most of Visio VSS shapes.

Librevenge/Libvisio would otherwise only dump the EMF blob as base64 in an <image> SVG tag, which most viewer/editor/browser would be unable to display.

License

Libvisio2svg is licensed under GPLv2.

Dependencies

Building

Commands to build this project:

# CMAKE_INSTALL_PREFIX is optional, default is /usr/local/
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/

# compilation
$ make

# installation
$ make install

Regex

The vss2svg and vsd2svg utilities rely on regular expressions to construct safe file names from stencils/sheets names. It will replace anything that is not matching [A-Za-z0-9-] by an underscore.

This functionality relies on regexp from libstdc++ (c++11 standard), but older libraries doesn't support regex.

Yet you can compile without this file name sanitization:

$ cmake . -DUNSAFE_FILENAME=ON
$ make

However, be cautious with the stencil/sheet names, otherwise some files might be written outside the output directory.

Usage

Command Line

Convert VSS:

# conversion
$ vss2svg-conv -i ./2960CX.vss -o ./out/ -s 4.5

$ ls out/
'Cisco R42610 Front.svg'      'WS-C2960CX-8PC-L Rear.svg'   'WS-C2960CX-8TC-L Rear.svg'
'WS-C2960CX-8PC-L Front.svg'  'WS-C2960CX-8TC-L Front.svg'

# help
$ vss2svg-conv --help

Convert VSD:

# conversion
$ vsd2svg-conv -i ./my.VSD -o ./out/ -s 7

$ ls out/
Page-1.svg  Page-2.svg  Page-3.svg  Page-4.svg

# help
$ vsd2svg-conv --help

Library

Convert Visio Documents

example:

#include <fstream>
#include <iostream>
#include <unordered_map>
#include <visio2svg/Visio2Svg.h>

int main(int argc, char **argv) {
    // Put visio file in an std::string
    // (no error checking, should be done in actual code)
    std::ifstream stin(argv[1]);

    std::string visio_in((std::istreambuf_iterator<char>(stin)),
                         std::istreambuf_iterator<char>());

    // Initialize converter and output map
    visio2svg::Visio2Svg converter;
    std::unordered_map<std::string, std::string> out;

    // return code
    int ret = 0;

    // Pick one of the following

    // Convert vsd documents
    ret = converter.vsd2svg(visio_in, out);

    // Convert vss (Stencils) documents
    ret = converter.vss2svg(visio_in, out);

    // or with rescaling
    ret = converter.vsd2svg(visio_in, out, 4.5);
    ret = converter.vss2svg(visio_in, out, 4.5);

    if (ret)
        std::cerr << "Conversion errors occured"
                  << "\n";

    // Do something with the output
    for (const auto &rule_pair : out) {
        std::cout << "Sheet Title: " << rule_pair.first << std::endl;
        std::cout << rule_pair.second << std::endl;
    }
}

Recover symbol titles

This library also comes with a RVNG generator to recover symbol titles:

#include <iostream>
#include <librevenge-generators/librevenge-generators.h>
#include <librevenge-stream/librevenge-stream.h>
#include <librevenge/librevenge.h>
#include <libvisio/libvisio.h>
#include <visio2svg/TitleGenerator.h>

int main(int argc, char **argv) {
    // put the Visio document in an RVNGFileStream 
    // (no error checking, should be done in actual code)
    librevenge::RVNGFileStream input(argv[1]);

    /* String stream version (need to be set)
    librevenge::RVNGStringStream input;
    */

    // Recover Titles of each sheets
    librevenge::RVNGStringVector output_names;
    visio2svg::TitleGenerator generator_names(output_names);

    bool ret = libvisio::VisioDocument::parseStencils(&input, &generator_names);
    /* or this for vsd
    ret = libvisio::VisioDocument::parse(&input, &generator_names);
    */

    if (!ret || output_names.empty()) {
        std::cerr << "ERROR: Failed to recover sheets titles failed!"
                  << std::endl;
        return 1;
    }

    // do something with the names
    for (unsigned k = 0; k < output_names.size(); ++k) {
        std::cout << "Title of stencil " << std::to_string(k) << std::endl;
        if (output_names[k].empty()) {
            std::cout << "no title set in stencil number " << std::to_string(k)
                      << std::endl;
        } else {
            std::cout << output_names[k].cstr() << std::endl;
        }
    }
}

Changelog

0.5.5

  • add LIB_INSTALL_DIR variable in cmake

0.5.4

  • fix freetype discovery in cmake

0.5.3

  • fix segfault if shape doesn't contain title

0.5.2

  • fix error in setting title field with titles containing "&"
  • add XML_PARSE_HUGE in xml parsing to allow big image blobs.
  • better precision for image dimensions (keep 10 decimals)

0.5.1

  • add support for OSX

0.5.0

  • adding support to convert wmf blob (using libwmf)
  • requires new libraries as dependencies: libwmf and freetype)
  • requires libemf2svg version >= 1.0.0
  • cleaner and more explicit dependencies resolving in cmake

0.4.1

  • adding safeguard regarding unsafe output file paths

0.3.0

  • better error handling

0.2.0

  • add rescaling option + title

0.1.0

  • first release
0