I am just user of podofo and had similar problems as you.


On Fri, Dec 6, 2019 at 4:35 PM Igor Mironchik <igor.mironc...@gmail.com>
wrote:

>
> On 06.12.2019 18:29, Michal Sudolsky wrote:
>
> Hi,
>
> As you can see there are much more problems with 0.9.6. You are better
> with latest podofo from trunk.
>
> Yes PdfFontCache::eFontCreationFlags_None was meant to resolve something
> different. You should always use it with identity encoding. Ideally podofo
> should not try to pick up base14 fonts when is specified identity encoding.
>
>
> Thank you guys for your great work!
>
>
>
> On Fri, Dec 6, 2019 at 4:23 PM Igor Mironchik <igor.mironc...@gmail.com>
> wrote:
>
>> Hi,
>> On 06.12.2019 17:55, Michal Sudolsky wrote:
>>
>> Hi,
>>
>> Can you try with latest podofo?
>> https://sourceforge.net/p/podofo/code/HEAD/tree/
>>
>>
>> In the trunk rev 1999 this issue does not exist. Looks like the bug in
>> PoDoFo 0.9.6.
>>
>> And PdfFontCache::eFontCreationFlags_None does not matter.
>>
>> Can I use PoDoFo from trunk for my application? Or there can be problems?
>>
>>
>> On Fri, Dec 6, 2019 at 3:52 PM Igor Mironchik <igor.mironc...@gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> Resend without attachment.
>>>
>>> Modified helloworld example has the same issue with spaces...
>>>
>>>
>>> /***************************************************************************
>>>  *   Copyright (C) 2006 by Dominik
>>> Seichter                                *
>>>  *   domseich...@web.de
>>> *
>>>  *
>>> *
>>>  *   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.                          *
>>>  *
>>> *
>>>  *   You should have received a copy of the GNU General Public
>>> License     *
>>>  *   along with this program; if not, write to
>>> the                         *
>>>  *   Free Software Foundation,
>>> Inc.,                                       *
>>>  *   59 Temple Place - Suite 330, Boston, MA  02111-1307,
>>> USA.             *
>>>
>>>  
>>> ***************************************************************************/
>>>
>>>
>>> /*
>>>  * Include the standard headers for cout to write
>>>  * some output to the console.
>>>  */
>>> #include <iostream>
>>>
>>> /*
>>>  * Now include all podofo header files, to have access
>>>  * to all functions of podofo and so that you do not have
>>>  * to care about the order of includes.
>>>  *
>>>  * You should always use podofo.h and not try to include
>>>  * the required headers on your own.
>>>  */
>>> #include <podofo/podofo.h>
>>>
>>> /*
>>>  * All podofo classes are member of the PoDoFo namespace.
>>>  */
>>> using namespace PoDoFo;
>>>
>>> void PrintHelp()
>>> {
>>>     std::cout << "This is a example application for the PoDoFo PDF
>>> library." << std::endl
>>>               << "It creates a small PDF file containing the text >Hello
>>> World!<" << std::endl
>>>               << "Please see http://podofo.sf.net for more information"
>>> << std::endl << std::endl;
>>>     std::cout << "Usage:" << std::endl;
>>>     std::cout << "  examplehelloworld [outputfile.pdf]" << std::endl <<
>>> std::endl;
>>> }
>>>
>>> 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", true, true, false,
>>>             PdfEncodingFactory::GlobalIdentityEncodingInstance() );
>>>
>>>         /*
>>>          * 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,
>>>             PdfString(reinterpret_cast<const pdf_utf8*>("The book -
>>> Книга")) );
>>>
>>>         /*
>>>          * 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 ( 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;
>>>     }
>>> }
>>>
>>> int main( int argc, char* argv[] )
>>> {
>>>     /*
>>>      * Check if a filename was passed as commandline argument.
>>>      * If more than 1 argument or no argument is passed,
>>>      * a help message is displayed and the example application
>>>      * will quit.
>>>      */
>>>     if( argc != 2 )
>>>     {
>>>         PrintHelp();
>>>         return -1;
>>>     }
>>>
>>>     /*
>>>      * All podofo functions will throw an exception in case of an error.
>>>      *
>>>      * You should catch the exception to either fix it or report
>>>      * back to the user.
>>>      *
>>>      * All exceptions podofo throws are objects of the class PdfError.
>>>      * Thats why we simply catch PdfError objects.
>>>      */
>>>     try {
>>>         /*
>>>          * Call the drawing routing which will create a PDF file
>>>          * with the filename of the output file as argument.
>>>          */
>>>          HelloWorld( argv[1] );
>>>     } catch( PdfError & eCode ) {
>>>         /*
>>>          * We have to check if an error has occurred.
>>>          * If yes, we return and print an error message
>>>          * to the commandline.
>>>          */
>>>         eCode.PrintErrorMsg();
>>>         return eCode.GetError();
>>>     }
>>>
>>>
>>>     try {
>>>         /**
>>>          * Free global memory allocated by PoDoFo.
>>>          * This is normally not necessary as memory
>>>          * will be free'd when the application terminates.
>>>          *
>>>          * If you want to free all memory allocated by
>>>          * PoDoFo you have to call this method.
>>>          *
>>>          * PoDoFo will reallocate the memory if necessary.
>>>          */
>>>         PdfEncodingFactory::FreeGlobalEncodingInstances();
>>>     } catch( PdfError & eCode ) {
>>>         /*
>>>          * We have to check if an error has occurred.
>>>          * If yes, we return and print an error message
>>>          * to the commandline.
>>>          */
>>>         eCode.PrintErrorMsg();
>>>         return eCode.GetError();
>>>     }
>>>
>>>     /*
>>>      * The PDF was created sucessfully.
>>>      */
>>>     std::cout << std::endl
>>>               << "Created a PDF file containing the line \"Hello
>>> World!\": " << argv[1] << std::endl << std::endl;
>>>
>>>     return 0;
>>> }
>>>
>>> On 06.12.2019 17:25, Michal Sudolsky wrote:
>>>
>>> Hi,
>>>
>>> You did not send enough details. I can only guess what font name you
>>> used and how you draw string but when I tested your text it shows in pdf
>>> without spaces. Btw base14 fonts cannot be used with identity encoding.
>>>
>>> On Fri, Dec 6, 2019 at 1:29 PM Igor Mironchik <igor.mironc...@gmail.com>
>>> wrote:
>>>
>>>> Hello.
>>>>
>>>> I try to create PDF file with PoDoFo library. I want to draw
>>>> multi-language text in my PDF file.
>>>>
>>>> For this I create PdfFont with:
>>>>
>>>> PdfFont * createFont( const QString & name, bool bold, bool italic,
>>>> float size,
>>>>      PdfStreamedDocument * doc )
>>>> {
>>>>      auto * font = doc->CreateFont( name.toLocal8Bit().data(), bold,
>>>> italic , false,
>>>>          PdfEncodingFactory::GlobalIdentityEncodingInstance() );
>>>>
>>>>      if( !font )
>>>>          PODOFO_RAISE_ERROR( ePdfError_InvalidHandle )
>>>>
>>>>      font->SetFontSize( size );
>>>>
>>>>      return font;
>>>> }
>>>>
>>>> It works. I see English and Russian text in output PDF, but...
>>>>
>>>> Assume I have text: "The book Книга"
>>>>
>>>> It writes to PDF but in the output all characters are separated with
>>>> space, like:
>>>>
>>>> "T h e  b o o k  К н и г а"
>>>>
>>>> How can I solve this issue?
>>>>
>>>> Thank you.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Podofo-users mailing list
>>>> Podofo-users@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/podofo-users
>>>>
>>>
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to