This project is read-only.

Mission Statement

We believe that a successful standard needs good implementations. We want libopc to complement the OOXML ecosystem with a cross-platform, open source, standard C-based implementation of Part II (OPC) and Part III (MCE) of the ISO/IEC 29500 specification.

Furthermore we believe that the unique features of ISO/IEC 29500 Part II (OPC) and Part III (MCE) like
  • interleaved read
  • MCE preprocessing
  • explicit connection of parts by relations
  • explicit characterization of parts by types
together with unique libopc features like
  • high level API for manipulation of types, parts and relations in an OPC package
provide essential functionality for a large variety of applications and are important for the adoption of the ISO/IEC 29500 standard.

The design of the API is driven by the goals to
  • be similar to System.IO.Packaging, so that .NETs developers are familiar with the API,
  • be wrapper friendly, so that libopc can be used in other languages like C++, Mono, PHP and Java,
  • be portable, so that libopc can be used on embedded systems as well as on servers.

In the first version of libopc we focus on use cases for
  • creation/modification OPC packages like .docx, .xlsx and .pptx documents and
  • consumption of OPC packages like .docx, .xlsx and .pptx documents.
The use cases include template-based report creation, mail-merge scenarios as well as content extraction for e.g. search.
Additionally we offer two command-line tools
  • opc (similar to the command-line “zip/unzip” tools for zip files), and
  • mcepp (MCE PreProcessing; useful for e.g. validation of Office 2010 documents with Office-O-Tron etc.)
which demonstrate the features of libopc and make them available to end users.

Feature Overview

Libopc will have the following features:
  • Platform independent C code conforming to ISO C99.
  • Read and write ZIP-based OPC Packages conforming to ISO/IEC 29500 Part 2 (OPC) and Part 3 (MCE).
  • Read and write ZIP-based OPC Packages as produced by Microsoft Office 2007 and Microsoft Office 2010.
  • Comparable to .NETs System.IO.Packing Package, -PackagePart, -PackageProperties and -PackageRelationship.
  • High level API for the management of types, parts and relationships.
  • READ-ONLY, WRITE-ONLY access to ZIP-based OPC Packages without the creation of temporary files.
  • TEMPLATE and TRANSITION modes to support popular use-cases.
  • MCE-aware XML Reader based on xmlTextReader from the popular libxml2 library.
  • MCE-aware XML Writer based on xmlTextWriter from the popular libxml2 library.
  • Standalone command-line “opc” tool similar to the “zip” tool.
  • Standalone command-line “mcepp” tool useful for preprocessing XML files for e.g. validation.
We have also identified the following optional features. They are not needed in the first release of the library, but may be implemented when community resources/volunteers are available:
  • Optional support for streaming-based access to OPC-container.
  • Optional support validation of OPC packages.
  • Optional support for digital signatures.
  • Optional wrapper for C++, Mono and PHP.
  • Optional wrapper for Java in javax.opc and submission of libopc and wrapper to openJDK.
  • interleaved write
  • READ/WRITE access to OPC packages without the need for temporary files,
  • OPC interleaving support.

Third party libraries

Libopc depends on the following third party libraries:
Library Description License
zlib Needed for ZIP’s DEFLATE compression method. BSD license
libxml2 Library to handle XML. MIT license

The use of further libraries as “minizip” or “libzip” has been evaluated. However they cannot be used because of the feature requirement of libopc like concurrent read etc.

Last edited Feb 14, 2011 at 11:12 AM by flr, version 1


No comments yet.