void draw( char* pszBuffer, PdfDocument* pDocument ) { PdfPage* pPage; PdfPainter painter; PdfFont* pFont; PdfRect size; double dX = BORDER_LEFT; double dY = BORDER_TOP; char* pszStart = pszBuffer; size = PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ); pFont = pDocument->CreateFont( "Arial" ); pPage = pDocument->CreatePage( size ); if( !pFont ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } pFont->SetFontSize( FONT_SIZE ); painter.SetPage( pPage ); painter.SetFont( pFont ); while( *pszBuffer ) { if( *pszBuffer == '\n' ) { painter.DrawText( dX, dY, pszStart, pszBuffer-pszStart ); pszStart = (++pszBuffer); dY += pFont->GetFontMetrics()->GetLineSpacing(); if( dY > (size.GetHeight() - BORDER_TOP) ) { pPage = pDocument->CreatePage( size ); painter.SetPage( pPage ); dY = BORDER_TOP; } } else ++pszBuffer; } painter.FinishPage(); }
void PagesTreeTest::testCreateDelete() { PdfMemDocument writer; PdfPage* pPage; PdfPainter painter; PdfFont * pFont; // create font pFont = writer.CreateFont( "Arial" ); if( !pFont ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } pFont->SetFontSize( 16.0 ); // write 1. page pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) ); painter.SetPage( pPage ); painter.SetFont( pFont ); painter.DrawText( 200, 200, "Page 1" ); painter.FinishPage(); CPPUNIT_ASSERT_EQUAL( writer.GetPageCount(), 1 ); // write 2. page pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) ); painter.SetPage( pPage ); painter.DrawText( 200, 200, "Page 2" ); painter.FinishPage(); CPPUNIT_ASSERT_EQUAL( writer.GetPageCount(), 2 ); // try to delete second page, index is 0 based writer.DeletePages( 1, 1 ); CPPUNIT_ASSERT_EQUAL( writer.GetPageCount(), 1 ); // write 3. page pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) ); painter.SetPage( pPage ); painter.DrawText( 200, 200, "Page 3" ); painter.FinishPage(); CPPUNIT_ASSERT_EQUAL( writer.GetPageCount(), 2 ); }
void EncryptTest::CreatedEncrypedPdf( const char* pszFilename ) { PdfMemDocument writer; PdfPage* pPage = writer.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) ); PdfPainter painter; painter.SetPage( pPage ); PdfFont* pFont = writer.CreateFont( "Arial", PdfEncodingFactory::GlobalWinAnsiEncodingInstance(), false ); if( !pFont ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } pFont->SetFontSize( 16.0 ); painter.SetFont( pFont ); painter.DrawText( 100, 100, "Hello World" ); painter.FinishPage(); writer.SetEncrypted( "user", "owner" ); writer.Write( pszFilename ); printf( "Wrote: %s\n", pszFilename ); }
void draw( char* pszBuffer, PdfDocument* pDocument, bool bUtf8, const char* pszFontName ) { PdfPage* pPage; PdfPainter painter; PdfFont* pFont; PdfRect size; const PdfEncoding* pEncoding; double dX = BORDER_LEFT; double dY = BORDER_TOP; char* pszStart = pszBuffer; if( bUtf8 ) { pEncoding = new PdfIdentityEncoding(); } else { pEncoding = PdfEncodingFactory::GlobalWinAnsiEncodingInstance(); } size = PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ); pFont = pDocument->CreateFont( pszFontName, pEncoding ); pPage = pDocument->CreatePage( size ); dY = size.GetHeight() - dY; if( !pFont ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } pFont->SetFontSize( FONT_SIZE ); painter.SetPage( pPage ); painter.SetFont( pFont ); while( *pszBuffer ) { if( *pszBuffer == '\n' ) { if( bUtf8 ) { painter.DrawText( dX, dY, PdfString( reinterpret_cast<const pdf_utf8*>(pszStart), pszBuffer-pszStart ) ); } else { painter.DrawText( dX, dY, pszStart, pszBuffer-pszStart ); } pszStart = (++pszBuffer); dY -= pFont->GetFontMetrics()->GetLineSpacing(); if( dY < BORDER_TOP ) { pPage = pDocument->CreatePage( size ); painter.SetPage( pPage ); dY = size.GetHeight() - dY; } } else ++pszBuffer; } painter.FinishPage(); }
void HelloWorld( const char* pszFilename ) { /* * PdfStreamedDocument is the class that can actually write a PDF file. * PdfStreamedDocument is much faster than PdfDocument, but it is only * suitable for creating/drawing PDF files and cannot modify existing * PDF documents. * * The document is written directly to pszFilename while being created. */ PdfStreamedDocument document( pszFilename ); /* * PdfPainter is the class which is able to draw text and graphics * directly on a PdfPage object. */ PdfPainter painter; /* * This pointer will hold the page object later. * PdfSimpleWriter can write several PdfPage's to a PDF file. */ PdfPage* pPage; /* * A PdfFont object is required to draw text on a PdfPage using a PdfPainter. * PoDoFo will find the font using fontconfig on your system and embedd truetype * fonts automatically in the PDF file. */ PdfFont* pFont; try { /* * The PdfDocument object can be used to create new PdfPage objects. * The PdfPage object is owned by the PdfDocument will also be deleted automatically * by the PdfDocument object. * * You have to pass only one argument, i.e. the page size of the page to create. * There are predefined enums for some common page sizes. */ pPage = document.CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) ); /* * If the page cannot be created because of an error (e.g. ePdfError_OutOfMemory ) * a NULL pointer is returned. * We check for a NULL pointer here and throw an exception using the RAISE_ERROR macro. * The raise error macro initializes a PdfError object with a given error code and * the location in the file in which the error ocurred and throws it as an exception. */ if( !pPage ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } /* * Set the page as drawing target for the PdfPainter. * Before the painter can draw, a page has to be set first. */ painter.SetPage( pPage ); /* * Create a PdfFont object using the font "Arial". * The font is found on the system using fontconfig and embedded into the * PDF file. If Arial is not available, a default font will be used. * * The created PdfFont will be deleted by the PdfDocument. */ pFont = document.CreateFont( "Arial" ); /* * If the PdfFont object cannot be allocated return an error. */ if( !pFont ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } /* * Set the font size */ pFont->SetFontSize( 18.0 ); /* * Set the font as default font for drawing. * A font has to be set before you can draw text on * a PdfPainter. */ painter.SetFont( pFont ); /* * You could set a different color than black to draw * the text. * * SAFE_OP( painter.SetColor( 1.0, 0.0, 0.0 ) ); */ /* * Actually draw the line "Hello World!" on to the PdfPage at * the position 2cm,2cm from the top left corner. * Please remember that PDF files have their origin at the * bottom left corner. Therefore we substract the y coordinate * from the page height. * * The position specifies the start of the baseline of the text. * * All coordinates in PoDoFo are in PDF units. * You can also use PdfPainterMM which takes coordinates in 1/1000th mm. * */ painter.DrawText( 56.69, pPage->GetPageSize().GetHeight() - 56.69, "Hello World!" ); /* * Tell PoDoFo that the page has been drawn completely. * This required to optimize drawing operations inside in PoDoFo * and has to be done whenever you are done with drawing a page. */ painter.FinishPage(); /* * Set some additional information on the PDF file. */ document.GetInfo()->SetCreator ( PdfString("examplahelloworld - A PoDoFo test application") ); document.GetInfo()->SetAuthor ( PdfString("Dominik Seichter") ); document.GetInfo()->SetTitle ( PdfString("Hello World") ); document.GetInfo()->SetSubject ( PdfString("Testing the PoDoFo PDF Library") ); document.GetInfo()->SetKeywords( PdfString("Test;PDF;Hello World;") ); /* * The last step is to close the document. */ document.Close(); } catch ( const PdfError & e ) { /* * All PoDoFo methods may throw exceptions * make sure that painter.FinishPage() is called * or who will get an assert in its destructor */ try { painter.FinishPage(); } catch( ... ) { /* * Ignore errors this time */ } throw e; } }
err_info *Pdfwrite::create (void) { try { qDebug () << _fname; _doc = new PdfMemDocument (); _doc->GetInfo()->SetCreator ( PdfString("examplahelloworld - A PoDoFo test application") ); _doc->GetInfo()->SetAuthor ( PdfString("Dominik Seichter") ); _doc->GetInfo()->SetTitle ( PdfString("Hello World") ); _doc->GetInfo()->SetSubject ( PdfString("Testing the PoDoFo PDF Library") ); _doc->GetInfo()->SetKeywords( PdfString("Test;PDF;Hello World;") ); } catch (const PdfError &eCode) { return err_make (ERRFN, E_pdf_creation_error1, eCode.ErrorMessage (eCode.GetError())); } #if 0 try { _doc = new PdfStreamedDocument (_fname.latin1 ()); PdfPage* pPage; PdfPainter painter; PdfFont* pFont; pPage = _doc->CreatePage( PdfPage::CreateStandardPageSize( ePdfPageSize_A4 ) ); if( !pPage ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } painter.SetPage( pPage ); pFont = _doc->CreateFont( "Arial" ); if( !pFont ) { PODOFO_RAISE_ERROR( ePdfError_InvalidHandle ); } pFont->SetFontSize( 18.0 ); painter.SetFont( pFont ); painter.DrawText( 56.69, pPage->GetPageSize().GetHeight() - 56.69, "Hello World!" ); painter.FinishPage(); _doc->GetInfo()->SetCreator ( PdfString("examplahelloworld - A PoDoFo test application") ); _doc->GetInfo()->SetAuthor ( PdfString("Dominik Seichter") ); _doc->GetInfo()->SetTitle ( PdfString("Hello World") ); _doc->GetInfo()->SetSubject ( PdfString("Testing the PoDoFo PDF Library") ); _doc->GetInfo()->SetKeywords( PdfString("Test;PDF;Hello World;") ); _doc->Close(); } catch (const PdfError &eCode) { return err_make (ERRFN, E_pdf_creation_error1, eCode.ErrorMessage (eCode.GetError())); } #endif return NULL; }