Click here to Skip to main content
Click here to Skip to main content

Simplest PDF Generating API for JPEG Image Content

By , 19 Dec 2008
 

Introduction

I was working on a project in which I need to wrap a JPEG file into PDF format. The program needs to be done in C, and after searched on the Internet, I could not find anything that I can refer to. Most of the Open Source PDF engine is based on either Java or PHP, and a few C PDF engines are huge and will add a lot of unnecessary code to my project. I decided to write this simple JPEG to PDF wrapper. And it's the result of reverse-engineering of the simplest PDF file that contains one single JPEG file. I just want to share this API so you can grab and use it if you have a similar requirement.

Using the Code

Just give an example to demonstrate how to generate a 2 page PDF file based on 2 JPEG files. Please refer to testMain.c for details. But the idea is:

PJPEG2PDF pPDF;
int pdfByteSize, pdfOutByteSize;
unsigned char *pdfBuf;

pPDF = Jpeg2PDF_BeginDocument(8.5, 11);    
	/* pdfW, pdfH: Page Size in Inch ( 1 inch=25.4 mm ); Letter Size 8.5x11 */

if(NULL != pPDF) {
    
    Loop For All JPEG Files {
        ... Prepare the current JPEG File to be inserted.
        /* You'll need to know the dimension of the JPEG Image, 
	and the ByteSize of the JPEG Image */
        Jpeg2PDF_AddJpeg(pPDF, JPEG_IMGW, JPEG_IMGH, JPEG_BYTE_SIZE, 
		JPEG_DATA_POINTER, IS_COLOR_JPEG);
    } 
    
    /* Call this after all of the JPEG image has been inserted. 
	The return value is the PDF file Byte Size */
    pdfByteSize = Jpeg2PDF_EndDocument(pPDF);
    
    /* Allocate the buffer for PDF Output */
    pdfBuf = malloc(pdfByteSize);
    
    /* Output the PDF to the pdfBuf */
   Jpeg2PDF_GetFinalDocumentAndCleanup(pPDF, pdfBuf, &pdfOutByteSize);
   
   ... Do something you want to the PDF file in the memory.
}

There are several places that you can fine-tune in the Jpeg2PDF.h file:

#define MAX_PDF_PAGES        256     /* Currently only supports less than 256 Images */

#define PDF_TOP_MARGIN        (0.0 * PDF_DOT_PER_INCH)    /* Currently No Top Margin */
#define PDF_LEFT_MARGIN        (0.0 * PDF_DOT_PER_INCH)   /* Currently No Left Margin */

That's it, guys. Enjoy.

History

  • Updated [2008-12-19] - Added some extra code to auto scan the current folder and automatically obtain the JPEG image dimension from the JPEG file instead of using hard coded value before.
    The JPEG image dimension code is borrowed from here.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Hao Hu
Software Developer
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionpatches done: keep images's aspect ratio & automatic page rotate for best fitmemberdab1826 Aug '11 - 6:55 
QuestionRemove the max 250 pages limitation?membermonday200015 Mar '11 - 1:54 
AnswerRe: Remove the max 250 pages limitation?memberHao Hu15 Mar '11 - 7:15 
QuestionHow to get DPI from JPEG?membermonday200011 Mar '11 - 5:22 
AnswerRe: How to get DPI from JPEG?memberHao Hu11 Mar '11 - 5:39 
GeneralRe: How to get DPI from JPEG?membermonday200011 Mar '11 - 10:09 
Generalhttps://sourceforge.net/projects/jpeg2pdf/memberHao Hu26 Aug '10 - 12:27 
GeneralRe: https://sourceforge.net/projects/jpeg2pdf/membermonday200012 Mar '11 - 21:20 
QuestionWhat about the XMP manipulation? [modified]membermonday200017 Aug '10 - 23:11 
AnswerRe: What about the XMP manipulation?memberHao Hu18 Aug '10 - 6:09 
GeneralDesired enhancementsmembermonday200014 Aug '10 - 0:09 
GeneralRe: Desired enhancementsmemberHao Hu14 Aug '10 - 15:12 
GeneralRe: Desired enhancementsmembermonday200015 Aug '10 - 19:44 
GeneralI made my program based on this onemembermonday200013 Aug '10 - 1:12 
GeneralRe: I made my program based on this onemembermonday200016 Mar '11 - 22:03 
GeneralRe: I made my program based on this onememberHao Hu18 Mar '11 - 20:16 
GeneralBug foundmembermonday200013 Aug '10 - 1:08 
GeneralRe: Bug found [modified]memberHao Hu13 Aug '10 - 5:43 
QuestionMay I re-use your code under the "GPL 2 and later" license?membermonday20002 Jul '10 - 1:32 
AnswerRe: May I re-use your code under the "GPL 2 and later" license?memberHao Hu2 Jul '10 - 7:33 
GeneralMy vote of 5membermonday20001 Jul '10 - 23:06 
GeneralBmp 2 pdf functionmemberJunson_Feng13 May '10 - 20:32 
GeneralRe: Bmp 2 pdf functionmemberHao Hu13 May '10 - 21:20 
QuestionHow to keep image's aspect ratio?memberSuper Garrison6 Nov '09 - 17:50 
I'd appreciate if someone can share.
The ratio changes, the PDF looks no good.
 
Super.
AnswerRe: How to keep image's aspect ratio?memberHao Hu6 Nov '09 - 20:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 19 Dec 2008
Article Copyright 2008 by Hao Hu
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid