problem pdf export linux
problem pdf export linux
hallo,
i want to write a console program to convert dwg/dwf to pdf. i have found the following code in the forum and changed it a little bit.
but when i start the program i have always a segmentation fault.
backtrace
-------------------------------
#0 0x08b67257 in oddbfontservices::loadstylerec ()
#1 0x08b0fab2 in odgitextstyle::loadstylerec ()
#2 0x08810f6b in gifromdbtextstyle ()
#3 0x0881115a in gifromdbtextstyle ()
#4 0x08584be6 in oddbtextimpl::draw ()
#5 0x085853d3 in oddbtextimpl::draw1 ()
#6 0x08585590 in oddbtext::worlddraw ()
#7 0x089a9e6f in odgibasevectorizer::dodraw ()
#8 0x08955af4 in odgsbasevectorizeview::dodraw ()
#9 0x089aafda in odgibasevectorizer::draw ()
#10 0x087c9422 in oddbblocktablerecord::worlddraw ()
#11 0x089a9e6f in odgibasevectorizer::dodraw ()
#12 0x08955af4 in odgsbasevectorizeview::dodraw ()
#13 0x089aafda in odgibasevectorizer::draw ()
#14 0x08969a69 in odgsbasevectorizeview::updateextents ()
#15 0x0897044b in odgsbasevectorizeview::viewextents ()
#16 0x088e5eb3 in odabstractviewpeforgsview::viewextents ()
#17 0x081f142f in odabstractviewpe::zoomextents ()
#18 0x08058b94 in cpdfexportimpl::drawzoomed2extents ()
#19 0x0805e418 in cpdfexportimpl::run ()
#20 0x0805728c in exportpdf ()
#21 0x08050baf in main (argc=3, argv=0xbfd15ee4) at ../../examples/odpdfexport/odpdfexport.cpp:135
makefile
-----------------------------------------------------------
# sample dwgdirect makefile for unix platforms.
# to use this makefile:
# 1. change the plt variable below to match the library name for
# the desired platform.
# 2. change the cc variable below according to the dwgdirect
# build documentation for your platform.
# 3. modify the rdsrc, exsrc and inc variables below (if necessary)
# to correctly reflect the location of your source and header files.
#
# this makefile assumes that the dwgdirect library files will be located
# in the same directory as the makefile.
# the platform name used in the archive names for a specific platform,
# for example, dd_lnxx86_db.a.
plt = lnxx86
# platform specific compiler command (linux is provided as a sample)
cc = g++ -g -wno-deprecated
# location of odreadex source files.
rdsrc = ../../examples/odpdfexport
# location of exservices source files.
svsrc = ../../extensions/exservices
# location of exservices source files.
comsrc = ../../examples/common
# location of exservices source files.
vecsrc = ../../examples/odvectorizeex
# location of dwgdirect header files.
inc = -i../../include -i$(svsrc) -i../common -i$(vecsrc) -i../../exports/pdfexport/include \
-i../../exports/pdfexport/pdftoolkit -i../../exports/2dexport/include
# object files required to build odreadex
#objs = exsystemservices.o exhostappservices.o exundocontroller.o \
# odfilebuf.o odreadex.o dbdumper.o exprotocolextension.o \
# giworlddrawdumper.o exgirasterimage.o tostring.o \
# exgssimpledevice.o giconveyorgeometrydumper.o gidumperimpl.o
objs = exsystemservices.o exhostappservices.o exundocontroller.o \
odfilebuf.o odpdfexport.o \
tostring.o
#../../../dgndirect/lib/lnxx86_4.1/zlib.a ../../../dgndirect/lib/lnxx86_4.1/pstoolkit.a \
#../../lib/lnxx86_4.1/dd_$(plt)_zip.a -ldwftk -ldwfcore -luuid -ljpeg -lz
# dwgdirect librarys required to build odreadex
libs = ../../lib/lnxx86_4.1/dd_$(plt)_pdfexport.a ../../lib/lnxx86_4.1/dd_$(plt)_pdftoolkit.a \
../../lib/lnxx86_4.1/dd_$(plt)_dwfimport.a \
../../lib/lnxx86_4.1/dwftoolkit.a \
../../lib/lnxx86_4.1/whiptk.a \
../../lib/lnxx86_4.1/dwfcore.a \
../../lib/lnxx86_4.1/dd_$(plt)_dwfexport.a \
../../lib/lnxx86_4.1/dd_$(plt)_modelergeometry.a ../../lib/lnxx86_4.1/dd_$(plt)_breprenderer.a \
../../lib/lnxx86_4.1/dd_$(plt)_br.a ../../lib/lnxx86_4.1/dd_$(plt)_acisbuilder.a \
../../lib/lnxx86_4.1/dd_$(plt)_db.a ../../lib/lnxx86_4.1/dd_$(plt)_gs.a \
../../lib/lnxx86_4.1/dd_$(plt)_spatialindex.a ../../lib/lnxx86_4.1/dd_$(plt)_gi.a \
../../lib/lnxx86_4.1/dd_$(plt)_ge.a ../../lib/lnxx86_4.1/dd_$(plt)_root.a \
../../lib/lnxx86_4.1/dd_$(plt)_dbroot.a \
../../lib/lnxx86_4.1/dd_$(plt)_rxrasterprocessor.a \
../../lib/lnxx86_4.1/dd_$(plt)_rxplotstyleservices.a \
../../lib/lnxx86_4.1/gs_winbitmap.a \
../../lib/lnxx86_4.1/dd_$(plt)_ft.a ../../lib/lnxx86_4.1/dd_$(plt)_alloc.a \
../../lib/lnxx86_4.1/dd_$(plt)_recomputedimblock.a \
../../lib/lnxx86_4.1/dd_$(plt)_exfieldevaluator.a \
-ldwftk -ldwfcore -luuid -ljpeg -lz
odpdfexport : $(objs)
$(cc) -o odpdfexport $(objs) $(libs)
odpdfexport.o : $(rdsrc)/odpdfexport.cpp
$(cc) -c $(inc) $(rdsrc)/odpdfexport.cpp
exsystemservices.o : $(svsrc)/exsystemservices.cpp
$(cc) -c $(inc) $(svsrc)/exsystemservices.cpp
exhostappservices.o : $(svsrc)/exhostappservices.cpp
$(cc) -c $(inc) $(svsrc)/exhostappservices.cpp
exundocontroller.o : $(svsrc)/exundocontroller.cpp
$(cc) -c $(inc) $(svsrc)/exundocontroller.cpp
odfilebuf.o : $(svsrc)/odfilebuf.cpp
$(cc) -c $(inc) $(svsrc)/odfilebuf.cpp
exgirasterimage.o : $(svsrc)/exgirasterimage.cpp
$(cc) -c $(inc) $(svsrc)/exgirasterimage.cpp
dbdumper.o : $(rdsrc)/dbdumper.cpp
$(cc) -c $(inc) $(rdsrc)/dbdumper.cpp
exprotocolextension.o : $(rdsrc)/exprotocolextension.cpp
$(cc) -c $(inc) $(rdsrc)/exprotocolextension.cpp
giworlddrawdumper.o : $(rdsrc)/giworlddrawdumper.cpp
$(cc) -c $(inc) $(rdsrc)/giworlddrawdumper.cpp
tostring.o : $(comsrc)/tostring.cpp
$(cc) -c $(inc) $(comsrc)/tostring.cpp
exgssimpledevice.o : $(vecsrc)/exgssimpledevice.cpp
$(cc) -c $(inc) $(vecsrc)/exgssimpledevice.cpp
giconveyorgeometrydumper.o : $(vecsrc)/giconveyorgeometrydumper.cpp
$(cc) -c $(inc) $(vecsrc)/giconveyorgeometrydumper.cpp
gidumperimpl.o : $(vecsrc)/gidumperimpl.cpp
$(cc) -c $(inc) $(vecsrc)/gidumperimpl.cpp
source
------------------------------------------------------------------------------------
#ifdef _msc_ver
#define _win32_winnt 0x0400 // to enable windows cryptographic api
#endif
#include "odacommon.h"
#include "dbdatabase.h"
#include "dbentity.h"
#include "dbdimassoc.h"
#include "odcharmapper.h"
#include "rxobjectimpl.h"
#include "exsystemservices.h"
#include "exhostappservices.h"
//#include "exprotocolextension.h"
#include "modelergeometry/modelermodule.h"
#include "odfilebuf.h"
#include "colormapping.h"
#include "../../exports/dwfexport/include/dwfexport.h"
#include "rxdynamicmodule.h"
#include "ps/plotstyles.h"
//#include "fdfield.h"
#include "dbtextiterator.h"
#define stl_using_iostream
#include "odastl.h"
#define std(a) std:: a
//#include "dbdumper.h"
#if defined(target_os_mac) && !defined(__mach__)
#include <console.h>
#endif
//#include "pdftoolkitexportdef.h"
//#include "pdfaux.h"
#include "pdfexport.h"
/************************************************** **********************/
/* compile password support for r18 drawings */
/************************************************** **********************/
#ifdef _msc_ver
#pragma message ("compiling password support for r18 drawings")
#include "..\win\crypt\winntcrypt.cpp"
#endif
//odrx_declare_static_module_entry_point(modelermodu le);
//odrx_declare_static_module_entry_point(odrecompute dimblockmodule);
//odrx_declare_static_module_entry_point(odrasterpro cessingservicesimpl);
//odrx_declare_static_module_entry_point(exfieldeval uatormodule);
//
//odrx_begin_static_module_map()
// odrx_define_static_application(dd_t("modelergeomet ry"), modelermodule)
// odrx_define_static_application(dd_t("recomputedimb lock"), odrecomputedimblockmodule)
// odrx_define_static_application(dd_t("rasterprocess or"), odrasterprocessingservicesimpl)
// odrx_define_static_appmodule(l"exfieldevaluator.dr x", exfieldevaluatormodule)
//odrx_end_static_module_map()
odrx_declare_static_module_entry_point(modelermodu le);
odrx_declare_static_module_entry_point(odrecompute dimblockmodule);
odrx_declare_static_module_entry_point(bitmapmodul e);
odrx_declare_static_module_entry_point(odrasterpro cessingservicesimpl);
odrx_declare_static_module_entry_point(odpsplotsty leservicesimpl);
odrx_begin_static_module_map()
odrx_define_static_application(dd_t("modelergeomet ry"), modelermodule)
odrx_define_static_application(dd_t("recomputedimb lock"), odrecomputedimblockmodule)
odrx_define_static_appmodule(l"winbitmap.gs", bitmapmodule)
odrx_define_static_appmodule(l"rasterprocessor.drx ", odrasterprocessingservicesimpl)
odrx_define_static_application(odps_plotstyle_serv ices_appname, odpsplotstyleservicesimpl)
odrx_end_static_module_map()
class myservices : public exsystemservices, public exhostappservices
{
protected:
odrx_using_heap_operators(exsystemservices);
public:
odstring findfile(const odstring& file, oddbbasedatabase* pdb, oddbbasehostappservices::findfilehint hint)
{
odstring sfile = exhostappservices::findfile(file, pdb, hint);
if( !sfile.isempty() )
return sfile;
sfile = "c:\\x\\" + file;
return sfile;
}
};
int main(int argc, char* argv[])
{
/************************************************** ******************/
setlocale(lc_all, "");
/************************************************** ******************/
/* but use usual conversion for scanf()/sprintf() */
/************************************************** ******************/
setlocale(lc_numeric, "c");
#ifndef _toolkit_in_dll_
odrx_init_static_module_map();
#endif
odstaticrxobject<myservices> svcs;
odinitialize(&svcs);
// :drxdynamiclinker()->loadmodule(l"exfieldevaluator.drx");
// :drxdynamiclinker()->loadmodule(l"dd_ftfontengine.drx");
try
{
odstring fin(argv[1]);
odstring fout(argv[2]);
oddbdatabaseptr pdb = svcs.readfile(fin.c_str(), true, true, oda::ksharedenyreadwrite);
if (!pdb.isnull())
{
pdfexportparams params;
params.pdb = pdb;
params.ver = pdfexportparams::kpdfv1_4;
params.outputstream = odsystemservices()->createfile(fout.c_str(), oda::kfilewrite, oda::ksharedenyno, oda::kcreatealways);
//params.flags = pdfexportparams:

dfexportflags(pdfexportparams::k embededttf | pdfexportparams::kshxtextasgeometry | pdfexportparams::kzoomtoextentsmode);
params.flags = pdfexportparams:

dfexportflags(pdfexportparams::k zoomtoextentsmode | pdfexportparams::kshxtextasgeometry);
params.busehlr = 0;
oduint32 errcode = exportpdf(params);
if (errcode != 0)
{
odstring errmes = exportpdferrorcode(errcode);
// cstring str;
// str.format(_t("error number : 0x%x. \n %ls"), errcode, errmes.c_str());
if (errcode == 0x10008)
{
odprintconsolestring(l"\nplease enable zoom to extents check box or\ndefine page parameters for layout in page setup dialog.\n");
}
odprintconsolestring(l"exportpdf errcode: 0x%x. \n %ls\n",errcode, errmes.c_str());
}
}
}
catch (oderror& e)
{
odprintconsolestring(l"statuswgdirect error: %ls\n",svcs.geterrordescription(e.code()).c_str()) ;
}
catch (...)
{
odprintconsolestring(l"status:unknown error.\n");
}
}
what is wrong ??? !!!!!
have you tried 2.7.0 available at
?
sergey slezkin
... hm ... linux ... ???? !!!!!
sorry..
some problems in pdf export on linux were fixed before 2.6.3 release.
but a bug in oddbfontservices::loadstylerec () was fixed just before 2.7.0 (it's not linux specific).
sergey slezkin
ok,
i work with 2.6.3. is the problem in my sourcecode or ??? !!!
i have not not found a complete example for pdf export.
can anyone help !!!!
hallo,
i have found the error for my self. do not define a odstring findfile(...) function in myservices class and all works perfectly.
this helps not in all situations. loadstylerec() contains a bug which may cause the same error (but not always). the linux release with the fix is expected in the middle of january.
sergey slezkin