PDFio is a simple C library for reading and writing PDF files

Overview

pdfio - PDF Read/Write Library

Version Apache 2.0 Build Coverity Scan Status LGTM Grade LGTM Alerts

PDFio is a simple C library for reading and writing PDF files. The primary goals of PDFio are:

  • Read and write any version of PDF file
  • Provide access to pages, objects, and streams within a PDF file
  • Support reading encrypted PDF files
  • Support writing PDF files with digital signatures
  • Extract or embed useful metadata (author, creator, page information, etc.)
  • "Filter" PDF files, for example to extract a range of pages or to embed fonts that are missing from a PDF
  • Provide access to objects used for each page

PDFio is not concerned with rendering or viewing a PDF file, although a PDF RIP or viewer could be written using it.

Requirements

PDFio requires the following to build the software:

  • A C99 compiler such as Clang, GCC, or MS Visual C
  • A POSIX-compliant make program
  • ZLIB (https://www.zlib.net) 1.0 or higher

IDE files for Xcode (macOS/iOS) and Visual Studio (Windows) are also provided.

Documentation

Note: Documentation is under active development...

See the man page (pdfio.3), frequently ask questions (FAQ.md), and full HTML documentation (pdfio.html) for information on using PDFio.

Installing pdfio

PDFio comes with a portable makefile that will work on any POSIX-compliant system with ZLIB installed. To make it, run:

make all

To test it, run:

make test

To install it, run:

make install

If you want a shared library, run:

make all-shared
make install-shared

The default installation location is "/usr/local". Pass the prefix variable to make to install it to another location:

make install prefix=/some/other/directory

The makefile installs the pdfio header to "${prefix}/include", the library to "${prefix}/lib", the pkg-config file to "${prefix}/lib/pkgconfig", the man page to "${prefix}/share/man/man3", and the documentation to "${prefix}/share/doc/pdfio".

The makefile supports the following variables that can be specified in the make command or as environment variables:

  • AR: the library archiver (default "ar")
  • ARFLAGS: options for the library archiver (default "cr")
  • CC: the C compiler (default "cc")
  • CFLAGS: options for the C compiler (default "")
  • CODESIGN_IDENTITY: the identity to use when code signing the shared library on macOS (default "Developer ID")
  • COMMONFLAGS: options for the C compiler and linker (typically architecture and optimization options, default is "-Os -g")
  • CPPFLAGS: options for the C preprocessor (default "")
  • DESTDIR" and "DSTROOT: specifies a root directory when installing (default is "", specify only one)
  • DSOFLAGS: options for the C compiler when linking the shared library (default "")
  • LDFLAGS: options for the C compiler when linking the test programs (default "")
  • LIBS: library options when linking the test programs (default "-lz")
  • RANLIB: program that generates a table-of-contents in a library (default "ranlib")
  • prefix: specifies the installation directory (default "/usr/local")

Visual Studio Project

The Visual Studio solution ("pdfio.sln") is provided for Windows developers and generates both a static library and DLL.

Xcode Project

There is also an Xcode project ("pdfio.xcodeproj") you can use on macOS which generates a static library that will be installed under "/usr/local" with:

sudo xcodebuild install

You can reproduce this with the makefile using:

sudo make 'COMMONFLAGS="-Os -mmacosx-version-min=10.14 -arch x86_64 -arch arm64"' install

Legal Stuff

PDFio is Copyright © 2021 by Michael R Sweet.

This software is licensed under the Apache License Version 2.0 with an (optional) exception to allow linking against GPL2/LGPL2 software. See the files "LICENSE" and "NOTICE" for more information.

Issues
  • pdf reader can't open created pdf file

    pdf reader can't open created pdf file

    after run testpdfio it create a sample pdf file named testpdfio-out.pdf. this file can't open with acrobat reader.

    use current nightly source code. build it with visual studio run testpdfio executable. this create the testpdfio-out.pdf open this file with pdf reader.

    • OS: Windows 10
    • Visual Studion 2019 v16.9.6
    • Adode Acrobat Read v2020.013.20074
    • Chrome Browser
    bug platform-issue priority-high 
    opened by JimmyO-GH 6
  • Modifying PDFs

    Modifying PDFs

    Is your feature request related to a problem? Please describe. I have been looking for a PDF manipulation library in C but PDFio seems to be the only one that can be built without errors and is up-to-date. However, the lack of the ability to edit existing PDF files held me back. Looking at documentation, there doesn't seem to be any avenue of editing PDFs with it, only read/write.

    Describe the solution you'd like Implement the feature of editing given PDFs.

    Describe alternatives you've considered VersyPDF but the entire thing doesn't build at all and is quite old with virtually no examples in the doc.

    Additional context NULL

    investigating 
    opened by B83C 4
  • make all-shared Makefile errors

    make all-shared Makefile errors

    when running make all-shared, make fails with several errors

    • lines 72,112: else is missing trailing backslash

    • line 128: soname should be -soname

    • making a shared object requires -fPIC

    Thanks for the project, it has been extremely useful.

    bug priority-medium 
    opened by zacii7 4
  • API call to get the keys from a dict object?

    API call to get the keys from a dict object?

    Hey Micheal, I've had some success using experimenting with you code package. I might be missing something but I can't seem to find an api call to return a list of keys from a dict object. What am I missing? Thanks -- Jay

    enhancement priority-high 
    opened by JayHiserote 3
  • Generate streaming output (vs. file output)

    Generate streaming output (vs. file output)

    Follow-up from OpenPrinting micro-conference on Linux Plumbers 2021

    cups-filters uses QPDF a lot for most of its non-rendering/rasterizing PDF handling tasks. Disadvantage of this is that QPDF is C++ (ugly, harder to understand/maintain/port). Filters (filter functions) using it are pdftopdf(), pclmtoraster(), rastertopdf(), pdftops(), ghostscript(), bannertopdf(). If one could replace QPDF by pdfio here, one could get rid oc C++ altogether in cups-filters.

    Unfortunately, pdfio does not support all the functionality needed for cups-filters (QPDF only has it as QPDF author Jay Berkenbilt implemented my feature requests, together with some GSoC students). So after freeing cups-filters from use of undocumented Poppler APIs with the help of QPDF the next step is eliminating C++ with the help of pdfio.

    Another missing feature is to generate streaming PCLm output from raster (or perhaps even general PDF) input. PCLm is a raster-only sub-set of PDF and was probably primarily created as a standardized job format for cheaper raster-only printers without the computing power for a full-fledged PDF renderer. PCLm is also displayed by standard PDF viewers and printed by standard PDF printers. As it is a sub-set of PDF we use QPDF for it in cups-filters. Jay Berkenbilt and a GSoC student have added support for it to QPDF.

    First, one could think that PCLm is not that important, as practically all PCLm-supporting printers also support Apple Raster (manufacturers want their printers to work with iPhones), but PCLM has also another use. As it is streaming-capable (in contrary to general PDF, so that cheap printers which cannot hold a whole job in memory can print it), so we could use it when we create a Printer Application supporting PDF printers with PAPPL. For raster input we convert the raster into a PCLm stream so the Printer Application itself is streaming and could even run on some low-resource system, and if subsequent filters or the printer allow streaming (for example a PDF printer which also supports PCLm explicitly) we can stream the whole job through. Note that the PCLm output of QPDF is not streaming, data comes only out when the job is completed.

    So my feature request is to add support for streaming PCLm output to pdfio, to allow for a streaming, C++-free rastertopdf() filter function (this one also outputs PCLm) in cups-filters and also to allow streaming raster-to-PDF/PClm processing in PAPPL-based Printer Applications.

    enhancement priority-high 
    opened by tillkamppeter 3
  • TrueType/OpenType font support

    TrueType/OpenType font support

    Implement pdfioFileCreateFontObjFromFile for TrueType/OpenType font files.

    Need to also determine how best to support multiple typefaces from ttc/otc (collection) files, since a single font stream object could potentially be referenced by multiple font descriptors (one file contains multiple styles).

    enhancement priority-high 
    opened by michaelrsweet 3
  • Use floating-point arguments in pdfioContentSetDashPattern

    Use floating-point arguments in pdfioContentSetDashPattern

    In the function bool pdfioContentSetDashPattern(pdfio_stream_t *st, int phase, int on, int off);,

    There is no reason to restrict the phase, on and off parameters to int; all 3 parameters should accept double as input

    enhancement priority-medium 
    opened by zacii7 2
  • Add `pdfioFileCreateImageObjFromData` API

    Add `pdfioFileCreateImageObjFromData` API

    Add a function to create an image object from data, e.g.:

    pdfio_obj_t *pdfioFileCreateImageObjFromData(pdfio_file_t *pdf, size_t width, size_t height, size_t bits, size_t num_colors, bool alpha, pdfio_array_t *cs, const unsigned char *data);
    

    The function should handle creating an image mask if 'alpha' is true - num_colors is 1 to 5 and includes the alpha channel (to allow up to CMYK + A). Data order is fixed and 16-bit input is native byte order.

    enhancement priority-high 
    opened by michaelrsweet 2
  • pdfioFileCreateTemporary function

    pdfioFileCreateTemporary function

    Would be useful to have a function to create a temporary PDF file:

    pdfio_file_t *pdfioFileCreateTemporary(char *buffer, size_t bufsize, const char *version, pdfio_rect_t *media_box, pdfio_rect_t *crop_box, pdfio_error_cb_t error_cb, void *error_data);
    
    enhancement priority-medium 
    opened by michaelrsweet 1
  • memory leak in functions pdfioObjCreateStream and pdfioFileClose

    memory leak in functions pdfioObjCreateStream and pdfioFileClose

    the following program consumes 2,5G of RAM

    ↪ cat pdfio.c 
    #include <pdfio.h>
    #include <pdfio-content.h>
    
    int main() {
      int i,p;
      pdfio_file_t *pdf;
      pdfio_dict_t *dict;
      pdfio_stream_t *st;
      pdfio_rect_t media_box = { 0.0, 0.0, 612.0, 792.0 };
    
      for (i=0;i<1000;i++) {
        pdf = pdfioFileCreate("out.pdf", NULL, &media_box, NULL, NULL, NULL);
    
        for (p=0;p<10;p++) {
          dict = pdfioDictCreate(pdf);
          st = pdfioFileCreatePage(pdf, dict);
          pdfioStreamClose(st);
        }
        pdfioFileClose(pdf);
      }
      return 0;
    }
    
    ↪ gcc pdf.c  -lpdfio -lz -lm
    ↪ valgrind --tool=memcheck --leak-check=yes ./a.out
    ==7198== Memcheck, a memory error detector
    ==7198== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
    ==7198== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
    ==7198== Command: ./a.out
    ==7198== 
    ==7198== 
    ==7198== HEAP SUMMARY:
    ==7198==     in use at exit: 2,680,992,000 bytes in 52,000 blocks
    ==7198==   total heap usage: 217,010 allocs, 165,010 frees, 2,834,786,732 bytes allocated
    ==7198== 
    ==7198== 16,000 bytes in 1,000 blocks are definitely lost in loss record 1 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x487F873: pdfioArrayAppendBinary (pdfio-array.c:69)
    ==7198==    by 0x488469D: write_trailer (pdfio-file.c:1814)
    ==7198==    by 0x488469D: pdfioFileClose (pdfio-file.c:129)
    ==7198==    by 0x109233: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== 16,000 bytes in 1,000 blocks are definitely lost in loss record 2 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x487F873: pdfioArrayAppendBinary (pdfio-array.c:69)
    ==7198==    by 0x48846B1: write_trailer (pdfio-file.c:1815)
    ==7198==    by 0x48846B1: pdfioFileClose (pdfio-file.c:129)
    ==7198==    by 0x109233: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== 196,608 bytes in 3 blocks are possibly lost in loss record 3 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x489B307: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x489B48D: deflateInit_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x488714A: _pdfioStreamCreate (pdfio-stream.c:243)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:196)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:142)
    ==7198==    by 0x10920D: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== 327,680 bytes in 5 blocks are possibly lost in loss record 4 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x489B2F1: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x489B48D: deflateInit_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x488714A: _pdfioStreamCreate (pdfio-stream.c:243)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:196)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:142)
    ==7198==    by 0x10920D: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== 393,216 bytes in 6 blocks are possibly lost in loss record 5 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x489B336: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x489B48D: deflateInit_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x488714A: _pdfioStreamCreate (pdfio-stream.c:243)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:196)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:142)
    ==7198==    by 0x10920D: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== 786,432 bytes in 12 blocks are possibly lost in loss record 6 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x489B2DE: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x489B48D: deflateInit_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x488714A: _pdfioStreamCreate (pdfio-stream.c:243)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:196)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:142)
    ==7198==    by 0x10920D: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== 2,679,256,064 (57,186,816 direct, 2,622,069,248 indirect) bytes in 9,608 blocks are definitely lost in loss record 12 of 12
    ==7198==    at 0x483679D: malloc (vg_replace_malloc.c:380)
    ==7198==    by 0x489B254: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x489B48D: deflateInit_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
    ==7198==    by 0x488714A: _pdfioStreamCreate (pdfio-stream.c:243)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:196)
    ==7198==    by 0x488628E: pdfioObjCreateStream (pdfio-object.c:142)
    ==7198==    by 0x10920D: main (in /home/isaac/z/pdfio/a.out)
    ==7198== 
    ==7198== LEAK SUMMARY:
    ==7198==    definitely lost: 57,218,816 bytes in 11,608 blocks
    ==7198==    indirectly lost: 2,622,069,248 bytes in 40,366 blocks
    ==7198==      possibly lost: 1,703,936 bytes in 26 blocks
    ==7198==    still reachable: 0 bytes in 0 blocks
    ==7198==         suppressed: 0 bytes in 0 blocks
    ==7198== 
    ==7198== For lists of detected and suppressed errors, rerun with: -s
    ==7198== ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)
    

    some cursory research suggests deflateEnd() needs to be called in there somewhere

    bug performance priority-high 
    opened by zacii7 1
  • Fix `install-shared` Make task

    Fix `install-shared` Make task

    Issue before fix

    if test `uname` = Darwin; then \
    	make DSONAME="libpdfio.1.dylib" - install; \
    else
    /bin/sh: -c: line 4: syntax error: unexpected end of file
    make: *** [Makefile:121: install-shared] Error 2
    

    Which was caused by the missing \ on line 123

    Adding that in fixed it and allowed me to install correctly

    bug platform-issue priority-medium 
    opened by ire4ever1190 0
  • Add multiple page content stream APIs

    Add multiple page content stream APIs

    Currently the PDF write API only supports a single page content stream, while the read API supports an arbitrary number of streams, as supported by the PDF format.

    Proposed API:

    extern pdfio_obj_t *pdfioFileCreatePageObj(pdfio_file_t *pdf, pdfio_dict_t *dict) _PDFIO_PUBLIC;
    
    extern pdfio_stream_t *pdfioPageCreateStream(pdfio_obj_t *page, pdfio_filter_t compression) _PDFIO_PUBLIC;
    

    Usage:

    pdfio_file_t *pdf; // PDF file
    pdfio_obj_t *page; // Page object
    pdfio_dict_t *dict; // Page dictionary
    
    page = pdfioFileCreatePageObj(pdf, dict);
    
    pdfio_stream_t *st1, *st2;
    
    st1 = pdfioPageCreateStream(page, PDFIO_FILTER_FLATE);
    // write some page content commands to the stream
    pdfioStreamClose(st1);
    
    st2 = pdfioPageCreateStream(page, PDFIO_FILTER_NONE);
    // write some page content commands to the stream
    pdfioStreamClose(st2);
    
    // Close the page object to write it out...
    pdfioObjClose(page);
    
    enhancement priority-high 
    opened by michaelrsweet 0
  • Enable AES-256 support

    Enable AES-256 support

    Currently PDFio only supports RC4-40/128 and AES-128, need to also add AES-256 from PDF 2.0. Most of the supporting code is already there (including the PDFIO_ENCRYPTION_AES_256 enumeration), just need to hook the last bits up and test.

    enhancement priority-medium 
    opened by michaelrsweet 0
  • Implement pdf text quote operators (' and

    Implement pdf text quote operators (' and ")

    Single- and double quote operators are currently missing in pdfio

    as per pdf specs,

    (sometext)' is equivalent to T* (sometext)Tj

    and

    2 1 (sometext)" is equivalent to 2 Tw 1 Tc (sometext)'

    enhancement priority-medium 
    opened by zacii7 2
  • Flattening filled forms and annotations in PDF files

    Flattening filled forms and annotations in PDF files

    Follow-up from OpenPrinting micro-conference on Linux Plumbers 2021

    cups-filters uses QPDF a lot for most of its non-rendering/rasterizing PDF handling tasks. Disadvantage of this is that QPDF is C++ (ugly, harder to understand/maintain/port). Filters (filter functions) using it are pdftopdf(), pclmtoraster(), rastertopdf(), pdftops(), ghostscript(), bannertopdf(). If one could replace QPDF by pdfio here, one could get rid oc C++ altogether in cups-filters.

    Unfortunately, pdfio does not support all the functionality needed for cups-filters (QPDF only has it as QPDF author Jay Berkenbilt implemented my feature requests, together with some GSoC students). So after freeing cups-filters from use of undocumented Poppler APIs with the help of QPDF the next step is eliminating C++ with the help of pdfio.

    One of the missing features is flattening filled PDF forms and also annotations, to make the filled/annotaded text being moved from obscure, separate data structures right into the graphical content of the PDF itself, to have a static PDF where the filled/annotated text is integral part of. Only this way one can reliably apply the page management functionality of pdftopdf(): number-up, print-scaling, page-ranges, page-set, ...

    Currently pdftopdf() flattens the forms with QPDF before it does its page management work, also using QPDF. To convert it to only used pdfio, pdfio will need form/annotation-flattening capabilities.

    enhancement priority-low 
    opened by tillkamppeter 4
  • Non English letters in File paths will fail on Windows

    Non English letters in File paths will fail on Windows

    Non English letters will fail in File paths for Windows _open cannot carry UTF8 on Windows.

    Only solution I know is to use:

    #ifdef _WIN32 if ((fd = _wopen((const wchar_t*)filename, O_RDONLY | O_BINARY)) < 0) #else if ((fd = open(filename, O_RDONLY | O_BINARY)) < 0) #endif

    Or alternative if you want to keep your API using UTF8 then take it in as UTF8 and convert to UTF16 before calling _wopen.

    bug platform-issue priority-low 
    opened by gabrielaexile 2
  • String measure routines.

    String measure routines.

    Will there be string measure routines like in libharu ?

    And thank you for starting this project, there has been a lot of need for such after libharu went stale.

    enhancement priority-low 
    opened by gabrielaexile 2
Releases(v1.0.1)
Owner
Michael R Sweet
CTO of Lakeside Robotics, I am the creator of CUPS, HTMLDOC, and many other open source projects, author of many standards, and helped create AirPrint.
Michael R Sweet
All-in-one library and application for processing and rendering PDF documents.

All-in-one library and application for processing and rendering PDF documents. Contains document viewer/editor application, application for splitting/merging PDF documents and page manipulation, application for comparison of similar PDF documents.

Jakub Melka 18 Jun 6, 2022
libharu - free PDF library

# # URL http://libharu.org/ # # Copyright 2000-2006 (c) Takeshi Kanno # Copyright 2007-2009 (c) Antony Dovgal et al. # See INSTALL for instruction

libharu 1.3k Jun 27, 2022
Convert HTML to PDF using Webkit (QtWebKit)

wkhtmltopdf and wkhtmltoimage wkhtmltopdf and wkhtmltoimage are command line tools to render HTML into PDF and various image formats using the QT Webk

wkhtmltopdf 12.3k Jun 22, 2022
A simple C++ library for reading and writing audio files.

AudioFile A simple header-only C++ library for reading and writing audio files. Current supported formats: WAV AIFF Author AudioFile is written and ma

Adam Stark 596 Jun 18, 2022
libnpy is a simple C++ library for reading and writing of numpy's .npy files.

C++ library for reading and writing of numpy's .npy files

Leon Merten Lohse 142 Jun 21, 2022
A modern C++ library for reading, writing, and analyzing CSV (and similar) files.

Vince's CSV Parser Motivation Documentation Integration C++ Version Single Header CMake Instructions Features & Examples Reading an Arbitrarily Large

Vincent La 566 Jun 16, 2022
libspng is a C library for reading and writing PNG format files with a focus on security and ease of use.

libspng (simple png) is a C library for reading and writing Portable Network Graphics (PNG) format files with a focus on security and ease of use.

Randy 508 Jun 22, 2022
A C library for reading and writing sound files containing sampled audio data.

libsndfile libsndfile is a C library for reading and writing files containing sampled audio data. Authors The libsndfile project was originally develo

null 1k Jun 21, 2022
LibMEI is a C++ library for reading and writing MEI files

C++ library and Python bindings for the Music Encoding Initiative format

Distributed Digital Music Archives and Libraries Lab 54 May 31, 2022
Sioyek is a PDF viewer designed for reading research papers and technical books.

Sioyek is a PDF viewer designed for reading research papers and technical books.

null 2.6k Jun 28, 2022
A high performance C++14 library for effortlessly reading and writing UBJSON

UbjsonCpp A high performance C++14 library for effortlessly reading and writing UBJSON This library implements UBJSON Draft 12 and Value semmantics Ab

Ibrahim Timothy Onogu 21 Nov 10, 2021
C++ (with python bindings) library for easily reading/writing/manipulating common animation particle formats such as PDB, BGEO, PTC. See the discussion group @ http://groups.google.com/group/partio-discuss

Partio - A library for particle IO and manipulation This is the initial source code release of partio a tool we used for particle reading/writing. It

Walt Disney Animation Studios 400 Jun 20, 2022
High performance library for creating, modiyfing and parsing PDF files in C++

Welcome to PDF-Writer. A Fast and Free C++ Library for Creating, Parsing an Manipulating PDF Files and Streams. Documentation is available here. Proje

gal kahana 642 Jun 24, 2022
Reading, writing, and processing images in a wide variety of file formats, using a format-agnostic API, aimed at VFX applications.

README for OpenImageIO Introduction The primary target audience for OIIO is VFX studios and developers of tools such as renderers, compositors, viewer

OpenImageIO 1.5k Jun 29, 2022
a cpp lib for csv reading and writing

CSV Reader and Writer Author : csl E-Mail : [email protected] OverView Comma separated values (CSV, sometimes called character separated values, becau

null 0 Apr 3, 2022
An area to test reading in ATLAS xAOD format and writing out to Parquet

xaod_to_parquet An area to test reading in ATLAS xAOD format and writing out to Parquet Getting the Code Clone the repository with the --recursive fla

Daniel Antrim 2 Nov 19, 2021
flashrom is a utility for detecting, reading, writing, verifying and erasing flash chips

flashrom is a utility for detecting, reading, writing, verifying and erasing flash chips

null 554 Jun 26, 2022
FCracker is a command line tool designed to brute force encrypted files like zip, 7z, rar, pdf etc.

FCrack is a command-line tool designed to brute force encrypted files like zip, 7z, rar, pdf, gpg etc.

null 17 Apr 27, 2022
A single-class C++ library for reading animated GIF files

EasyGifReader EasyGifReader is a single-class C++ library that aims to simplify reading an animated GIF file. It is built on top of and depends on gif

Viktor Chlumský 5 Feb 7, 2022
All-in-one library and application for processing and rendering PDF documents.

All-in-one library and application for processing and rendering PDF documents. Contains document viewer/editor application, application for splitting/merging PDF documents and page manipulation, application for comparison of similar PDF documents.

Jakub Melka 18 Jun 6, 2022
libharu - free PDF library

# # URL http://libharu.org/ # # Copyright 2000-2006 (c) Takeshi Kanno # Copyright 2007-2009 (c) Antony Dovgal et al. # See INSTALL for instruction

libharu 1.3k Jun 27, 2022
Pdfmm - A C++ PDF manipulation library forked from PoDoFo

pdfmm What is pdfmm? Requirements String encoding API Stability TODO Licensing No warranty Contributions Authors What is pdfmm? pdfmm is a s a free po

null 22 Jun 22, 2022
Xournal++ is a handwriting notetaking software with PDF annotation support. Written in C++ with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. Supports pen input from devices such as Wacom Tablets.

Xournal++ is a hand note taking software written in C++ with the target of flexibility, functionality and speed. Stroke recognizer and other parts are based on Xournal Code

Xournalpp 6.7k Jun 20, 2022
Contribute your handwritten PDF notes and help other students ✌ #DecodersCommunity 🖤

Contribute your handwritten PDF notes and help other students ✌ #DecodersCommunity ??

Decoders Community 29 Jun 12, 2022
OpenScan is an open-source document scanner app that enables users to scan hard copies of documents or notes and convert it into a PDF file. No ads. No data collection. We respect your privacy.

OpenScan An open source app that enables users to scan hardcopies of documents or notes and convert it to a PDF file. No ads. No data collection. We r

Ethereal Developers Inc 1.1k Jun 25, 2022
Fix ToUnicode CMap in PDF

A tool to fix ToUnicod CMap in PDF to prevent extracted text from being garbled [ English / 日本語 (Japanese) ] When copying and pasting text from a PDF

Masamichi Hosoda 20 Jun 3, 2022
Generate a PDF Planner for the Remarkable Platform

Planner PDF This will generate a PDF File that can be used as a planner on the remarkable platform. It uses the libharu library to generate the PDF an

null 43 Jun 14, 2022
Xournal++ is a handwriting notetaking software with PDF annotation support

Xournal++ is a handwriting notetaking software with PDF annotation support. Written in C++ with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. Supports pen input from devices such as Wacom Tablets.

Xournalpp 6.7k Jun 26, 2022
Convert HTML to PDF using Webkit (QtWebKit)

wkhtmltopdf and wkhtmltoimage wkhtmltopdf and wkhtmltoimage are command line tools to render HTML into PDF and various image formats using the QT Webk

wkhtmltopdf 12.3k Jun 22, 2022