示例#1
0
文件: visio.py 项目: xcke/visiopy
    def from_file(cls, filename):
        # unzip vsdx file to temp. folder
        directory = './{}'.format(filename.rsplit('.', 1)[0])
        with zipfile.ZipFile(filename, "r") as zip_ref:
            zip_ref.extractall(directory)

        # Read [Content_Types].xml
        content_types = ContentTypes.from_xml(directory +
                                              '/[Content_Types].xml')

        # Read relationships
        package_rels = Relationship.from_xml(
            '{}/_rels/.rels'.format(directory))
        document_rels = Relationship.from_xml(
            '{}/visio/_rels/document.xml.rels'.format(directory))

        # Read pages and relationships
        page_collection = PageCollection.from_xml(directory, content_types)

        # Remove extracted folder again
        shutil.rmtree(directory)
        return cls(page_collection=page_collection,
                   package_rels=package_rels,
                   document_rels=document_rels,
                   content_types=content_types)
示例#2
0
文件: pages.py 项目: xcke/visiopy
    def from_xml(cls, dir, content_types):
        """Generate PageCollection from files

        :param dir: The directory of the extracted visio package
        :param content_types: Instance of :class:`ContentType`
        """

        rel_dir = '{}/visio/pages/_rels/'.format(dir)
        page_dir = '{}/visio/pages/'.format(dir)
        pages = []

        rels = Relationship.from_xml(rel_dir + 'pages.xml.rels')

        # Parse pages.xml for page info
        tree = ET.parse(page_dir + 'pages.xml')
        root = tree.getroot()

        for child in root:
            name = child.attrib.get('Name', '')
            id = child.attrib['ID']
            # TODO Parse these namespaces properly
            rel_id = child[1].attrib[
                '{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id']
            pages.append(
                Page.from_xml(page_dir + rels.rels[rel_id][0], name, id,
                              rel_id))

        return cls(content_types, rels=rels, pages=pages)