@inbridge/oif-ts
Version:
TypeScript integration for the Open Invoice Format (OIF) schema. Easily create OIF-compliant PDFs and parse/validate JSON.
178 lines (124 loc) • 5.52 kB
Markdown
<p align="center">
<img src="https://avatars.githubusercontent.com/u/189235068?s=200" width="200px" align="center" alt="OIF logo" />
<h1 align="center"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Typescript_logo_2020.svg/1200px-Typescript_logo_2020.svg.png" width="25"> OIF Integration</h1>
<p align="center">
This library is the TypeScript integration of the Open Invoice Format (OIF) schema.<br>
Create PDFs in OIF Format with ease and parse/validate JSON back and forth.
</p>
</p>
## What is the Open Invoice Format
An open-source, JSON-based schema for invoices. This project is designed to offer a simple and reliable alternative to complex standards like **ZUGFeRD** and **XRechnung**. Built on [JSON schema](https://json-schema.org), it ensures easy validation and parsing across all programming languages.
Have a look at the [Open Invoice Format GitHub Repository](https://github.com/inbridgeio/open-invoice-format)
---
## Table of Contents
1. [Schema Details](#schema-details)
- [How to use inside a PDF](#how-to-use-inside-a-pdf)
2. [Getting Started](#getting-started)
- [How to set specific Schema version](#how-to-set-specific-schema-version)
- [Parsing JSON](#parsing-json)
- [OIF JSON to Obj](#oif-json-to-obj)
- [Obj to OIF JSON](#obj-to-oif-json)
- [Handling OIF PDFs](#handling-oif-pdfs)
- [How to extract the OIF JSON from a PDF](#how-to-extract-the-oif-json-from-a-pdf)
- [How to add the OIF JSON to a PDF](#how-to-add-the-oif-json-to-a-pdf)
3. [More Integration Libraries](#more-integration-libraries)
4. [Contributing](#contributing)
5. [Questions or Feedback?](#questions-or-feedback)
---
## Schema details
### How to use inside a PDF:
To use the open invoice format like ZugFeRD inside a PDF. Your JSON should be attached as `inbridge-oif.json` to the PDF.
By using one of our [integration libraries](#integration-libraries) you can work with OIF as easy as pie!
For the full schema, check out the [OIF GitHub Repository](https://github.com/inbridgeio/open-invoice-format)
---
## Getting Started
The library loads based on your input the schema out of the OIF GitHub Repository to validate it.
### How to set specific Schema version
You can set a specific version of the schema by passing the version as a string. Autocomplete for the versions is available.
Additionally, you can use `latest` as version, to get the latest schema from main Branch of the [OIF GitHub Repository](https://github.com/inbridgeio/open-invoice-format).
```typescript
import {SchemaProvider} from "./schema-provider";
(async () => {
try {
await SchemaProvider.setVersion('latest');
} catch (e) {
console.error(e);
}
})()
```
---
```typescript
import {SchemaProvider} from "./schema-provider";
const oifJson = /* your OIF JSON String */;
(async () => {
try {
const obj = await SchemaProvicer.parse<T>(oifJson);
console.log(obj);
} catch (e) {
console.error(e);
}
})()
```
You can pass `T` for example as DefaultInvoice to predefine the output type for auto complete. Or if you need then dont.
```typescript
import {SchemaProvider} from "./schema-provider";
const oifJson = /* your OIF JSON String */;
(async () => {
try {
const obj = await SchemaProvicer.stringify(oifJson);
console.log(obj);
} catch (e) {
console.error(e);
}
})()
```
---
To handle PDFs containing the OIF JSON we use [pdf-lib](https://github.com/Hopding/pdf-lib).
```typescript
import {getOIFFromPdf} from "@inbridgeio/oif/pdf-manipulator";
import {readFileSync} from "fs";
import {join} from "path";
const file = readFileSync(join(__dirname, '..', 'test-files','oif.pdf'));
(async () => {
console.log(await getOIFFromPdf(file));
})()
```
As file, you can use a `Buffer` or a `UInt8Array`. Here the variable `file` is a Buffer.
It will return the parsed Invoice Obj or throw an `InvalidOIFException` if the JSON is invalid.
If you generated a PDF out of your invoice, you can easily add the JSON and if its valid it will get added to the PDF. Otherwise it throws an `InvalidOIFException`.
```typescript
import {addOIFToPdf} from "@inbridgeio/oif/pdf-manipulator";
import {writeFileSync} from "fs";
const invoiceObj = /* your OIF Object */;
(async () => {
try {
const pdf = await addOIFToPdf(invoiceObj);
// Do something with the pdf
writeFileSync('invoice.pdf', pdf);
} catch (e) {
console.error(e);
}
})()
```
[`@inbridgeio/oif-ts`](https://github.com/inbridgeio/oif-ts): Work with OIF in TypeScript and JavaScript
[`Java`](
[`PHP`](
[`Python`](
[](
---
We welcome contributions! Feel free to submit pull requests or open issues for feature requests or bugs.
[](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project)
---
This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
---
Create an issue or reach out via [GitHub Discussions](https://github.com/inbridgeio/open-invoice-format/discussions).