-
Notifications
You must be signed in to change notification settings - Fork 1
pts/pdfconcat
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is the official repository for pdfconcat, a simple PDF document concatenator written in standard C (C89). pdfconcat: simple PDF document concatenator written in C89 pdfconcat is a small and fast command-line utility written in C89 (ANSI C) that can concatenate (merge) several PDF files into a long PDF document. External libraries are not required, only ANSI C functions are used. Several features of the output file are taken from the first input file only. For example, outlines (also known as hierarchical bookmarks) in subsequent input files are ignored. pdfconcat compresses its input a little bit by removing whitespace and unused file parts. pdfconcat has been tested on various huge PDFs downloaded from the Adobe web site, plus an 1200-pages long mathematics manual typeset by LaTeX, emitted by pdflatex, dvipdfm and `gs -sDEVICE=pdfwrite', totalling 5981 pages in a single PDF file. Usage: $ ./pdfconcat -o output.pdf in1.pdf in2.pdf in3.pdf Features: * uses few memory (only the xref table is loaded into memory) * is fast, because of the low level ANSI C usage * compresses input PDFs by removing whitespace and unused objects Limitations: * does not support cross-reference streams and objects streams in the input PDF * keeps outlines (bookmarks, hierarchical table of contents) of only the first PDF (!) * doesn't work if the input PDFs have different encryption keys * result is undefined when there are hyperlink naming conflicts * detects the binaryness of only the first input PDF * cannot verify and/or ensure copyright of PDF documents * emits various error messages, but it isn't a PDF validator * /Linearized property is destroyed Because of the limitations of pdfconcat above, it's recommended to use qpdf instead of pdfconcat to concatenate arbitrary PDF files: $ qpdf --empty --pages in1.pdf 1-z in2.pdf 1-z in3.pdf 1-z -- output.pdf As an older alternative of qpdf, it's possible to use pdftk to concatenate PDF files: $ pdftk in1.pdf in2.pdf in3.pdf cat output output.pdf System requirements: * Compiles and works on any Unix system and on Windows i386 and amd64 if compiled with MinGW32 (also when cross-compiled on Linux with i586-mingw32msvc-gcc). Programming language compatibility of pdfconcat.c: * C: C89 (ANSI C), C99 and C11. * C++: C++98, C++11, C++14, C++17, C++20. Compiler compatibilty: * It should compile successfully with any C and C++ compiler. Tested with GCC 4.8, 6.3, 7.5 and 11.2 and Clang 3.8 as both C and C++. Also tested with tcc targeting i386. * It should compile without warnings with GCC, Clang and tcc. * It should work with any C library. Tested with glibc, uClibc and msvcrt.dll. * Example compiler command lines: $ gcc -O3 -s -DNDEBUG=1 -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ gcc -std=c89 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ gcc -std=c99 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ gcc -std=c11 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ i686-w64-mingw32-gcc -std=c89 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat.exe $ clang -std=c11 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ tcc -O3 -s -DNDEBUG=1 -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ pts-tcc -O3 -s -DNDEBUG=1 -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat $ g++ -std=c++98 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Winline -Wpointer-arith -Wcast-qual -Wmissing-declarations pdfconcat.c -o pdfconcat $ g++ -std=c++11 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Winline -Wpointer-arith -Wcast-qual -Wmissing-declarations pdfconcat.c -o pdfconcat $ g++ -std=c++14 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Winline -Wpointer-arith -Wcast-qual -Wmissing-declarations pdfconcat.c -o pdfconcat $ g++ -std=c++17 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Winline -Wpointer-arith -Wcast-qual -Wmissing-declarations pdfconcat.c -o pdfconcat $ g++ -std=c++20 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Winline -Wpointer-arith -Wcast-qual -Wmissing-declarations pdfconcat.c -o pdfconcat $ i686-w64-mingw32-g++ -std=c++98 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Winline -Wpointer-arith -Wcast-qual -Wmissing-declarations pdfconcat.c -o pdfconcat.exe $ clang++ -std=c++14 -O3 -s -DNDEBUG=1 -pedantic -Wunused -Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wmissing-prototypes -Wmissing-declarations pdfconcat.c -o pdfconcat The license of pdfconcat is GPL v2 or later: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. __END__
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published