Kaydet (Commit) 2659ded9 authored tarafından Thorsten Behrens's avatar Thorsten Behrens

#i80285# Initial import for the xpdf PDF parser

üst b7171963
#*************************************************************************
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
#
# $Revision: 1.1 $
#
# last change: $Author: thb $ $Date: 2007-12-05 14:16:39 $
#
# The Contents of this file are made available subject to
# the terms of GNU Lesser General Public License Version 2.1.
#
#
# GNU Lesser General Public License Version 2.1
# =============================================
# Copyright 2005 by Sun Microsystems, Inc.
# 901 San Antonio Road, Palo Alto, CA 94303, USA
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1, as published by the Free Software Foundation.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
#*************************************************************************
# dmake create_clean -- just unpacks
# dmake patch -- unpacks and applies patch file
# dmake create_patch -- creates a patch file
PRJ=.
PRJNAME=xpdf
TARGET=xpdflib
# --- Settings -----------------------------------------------------
.INCLUDE: settings.mk
# --- Files --------------------------------------------------------
TARFILE_NAME=xpdf-3.02
PATCH_FILE_NAME=$(TARFILE_NAME).patch
CONFIGURE_DIR=
BUILD_DIR=$(CONFIGURE_DIR)
.IF "$(GUI)"=="UNX"
#CONFIGURE_ACTION=./configure
#CONFIGURE_ACTION=./configure --without-x --enable-multithreaded --enable-exceptions CFLAGS="-g -O0" CXXFLAGS="-g -O0"
CONFIGURE_ACTION=./configure --without-x --enable-multithreaded --enable-exceptions
BUILD_ACTION=$(GNUMAKE) -j$(EXTMAXPROCESS)
.ELSE
CONFIGURE_ACTION=
BUILD_ACTION=ms_make
.ENDIF
CONVERTFILES=ms_make.bat
BUILD_FLAGS=
OUT2INC= \
fofi$/*.h \
goo$/*.h \
xpdf$/*.h \
aconf.h \
aconf2.h
.IF "$(GUI)"=="UNX"
OUT2LIB= \
fofi$/lib*.a \
goo$/lib*.a \
xpdf$/lib*.a
.ELSE
OUT2LIB= \
fofi$/*.lib \
goo$/*.lib \
xpdf$/*.lib
.ENDIF
# --- Targets ------------------------------------------------------
.INCLUDE : set_ext.mk
.INCLUDE : target.mk
.INCLUDE : tg_ext.mk
xp xpdf : solenv NULL
xp xpdf nmake - all xp_xpdf NULL
xp xpdf\wrapper nmake - all xp_xpdfwrap xp_xpdf NULL
xp xpdf\test nmake - all xp_parsetest xp_xpdfwrap NULL
mkdir: %_DEST%\inc%_EXT%\xpdf
..\%__SRC%\bin\xpdfimport.* %_DEST%\bin%_EXT%\xpdfimport.*
..\%__SRC%\bin\xpdfimport %_DEST%\bin%_EXT%\xpdfimport
#*************************************************************************
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
#
# $Revision: 1.1 $
#
# last change: $Author: thb $ $Date: 2007-12-05 14:16:42 $
#
# The Contents of this file are made available subject to
# the terms of GNU Lesser General Public License Version 2.1.
#
#
# GNU Lesser General Public License Version 2.1
# =============================================
# Copyright 2005 by Sun Microsystems, Inc.
# 901 San Antonio Road, Palo Alto, CA 94303, USA
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1, as published by the Free Software Foundation.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
#*************************************************************************
PRJ=..
PRJNAME=xpdf
TARGET=test
TARGETTYPE=CUI
ENABLE_EXCEPTIONS=TRUE
# --- Settings -----------------------------------------------------
.INCLUDE: settings.mk
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
ALLTAR : $(MISC)$/test_0_succeeded $(MISC)$/test_1_succeeded
$(MISC)$/test_0_succeeded: $(BIN)$/xpdfimport$(EXECPOST) binary_0_out.def text_0_out.def testinput.pdf
$(BIN)$/xpdfimport -f $(MISC)$/binary_0_out testinput.pdf > $(MISC)$/text_0_out
diff $(MISC)$/binary_0_out binary_0_out.def
diff $(MISC)$/text_0_out text_0_out.def
$(TOUCH) $@
$(MISC)$/test_1_succeeded: $(BIN)$/xpdfimport$(EXECPOST) binary_1_out.def text_1_out.def book.pdf
$(BIN)$/xpdfimport -f $(MISC)$/binary_1_out book.pdf > $(MISC)$/text_1_out
diff $(MISC)$/binary_1_out binary_1_out.def
diff $(MISC)$/text_1_out text_1_out.def
$(TOUCH) $@
#*************************************************************************
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
#
# $Revision: 1.1 $
#
# last change: $Author: thb $ $Date: 2007-12-05 14:16:44 $
#
# The Contents of this file are made available subject to
# the terms of GNU Lesser General Public License Version 2.1.
#
#
# GNU Lesser General Public License Version 2.1
# =============================================
# Copyright 2005 by Sun Microsystems, Inc.
# 901 San Antonio Road, Palo Alto, CA 94303, USA
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1, as published by the Free Software Foundation.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
#*************************************************************************
PRJ=..
PRJNAME=xpdf
TARGET=xpdfimport
TARGETTYPE=CUI
ENABLE_EXCEPTIONS=TRUE
EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
# --- Settings -----------------------------------------------------
.INCLUDE: settings.mk
# --- Files --------------------------------------------------------
APP1TARGET=$(TARGET)
APP1LIBSALCPPRT=
APP1OBJS= \
$(OBJ)$/wrapper_gpl.obj $(OBJ)/pdfioutdev_gpl.obj
.IF "$(GUI)" == "WNT"
APP1STDLIBS+=xpdf.lib fofi.lib Goo.lib gdi32.lib advapi32.lib
.ELSE
APP1STDLIBS+=-lxpdf -lfofi -lGoo
.ENDIF
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: pdfioutdev_gpl.cxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2007-12-05 14:16:44 $
*
* The Contents of this file are made available subject to
* the terms of GNU General Public License Version 2.
*
*
* GNU General Public License, version 2
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
************************************************************************/
#include "pdfioutdev_gpl.hxx"
#include <stdio.h>
#include <assert.h>
#include <math.h>
#include <vector>
#if defined __SUNPRO_CC
#pragma disable_warn
#elif defined _MSC_VER
#pragma warning(push, 1)
#endif
#include "UTF8.h"
#if defined __SUNPRO_CC
#pragma enable_warn
#elif defined _MSC_VER
#pragma warning(pop)
#endif
#ifdef WNT
# define snprintf _snprintf
#endif
/* SYNC STREAMS
============
We stream human-readble tokens to stdout, and binary data (fonts,
bitmaps) to g_binary_out. Another process reads from those pipes, and
there lies the rub: things can deadlock, if the two involved
processes access the pipes in different order. At any point in
time, both processes must access the same pipe. To ensure this,
data must be flushed to the OS before writing to a different pipe,
otherwise not-yet-written data will leave the reading process
waiting on the wrong pipe.
*/
namespace pdfi
{
/// cut off very small numbers & clamp value to zero
inline double normalize( double val )
{
return fabs(val) < 0.0000001 ? 0.0 : val;
}
const char* escapeLineFeed( const char* pStr )
{
// TODO(Q3): Escape linefeeds
return pStr;
}
/// for the temp char buffer the header gets snprintfed in
#define WRITE_BUFFER_SIZE 1024
/// for the initial std::vector capacity when copying stream from xpdf
#define WRITE_BUFFER_INITIAL_CAPACITY (1024*100)
typedef std::vector<char> OutputBuffer;
void initBuf(OutputBuffer& io_rBuffer)
{
io_rBuffer.reserve(WRITE_BUFFER_INITIAL_CAPACITY);
}
void writeBinaryBuffer( const OutputBuffer& rBuffer )
{
// ---sync point--- see SYNC STREAMS above
fflush(stdout);
// put buffer to stderr
if( !rBuffer.empty() )
if( fwrite(&rBuffer[0], sizeof(char),
rBuffer.size(), g_binary_out) != (size_t)rBuffer.size() )
exit(1); // error
// ---sync point--- see SYNC STREAMS above
fflush(g_binary_out);
}
void writeJpeg_( OutputBuffer& o_rOutputBuf, Stream* str, bool bWithLinefeed )
{
// dump JPEG file as-is
str = ((DCTStream *)str)->getRawStream();
str->reset();
int c;
o_rOutputBuf.clear();
while((c=str->getChar()) != EOF)
o_rOutputBuf.push_back(static_cast<char>(c));
printf( " JPEG %d", o_rOutputBuf.size() );
if( bWithLinefeed )
printf("\n");
str->close();
}
void writePbm_(OutputBuffer& o_rOutputBuf, Stream* str, int width, int height, bool bWithLinefeed)
{
// write as PBM (char by char, to avoid stdlib lineend messing)
o_rOutputBuf.clear();
o_rOutputBuf.resize(WRITE_BUFFER_SIZE);
o_rOutputBuf[0] = 'P';
o_rOutputBuf[1] = '4';
o_rOutputBuf[2] = 0x0A;
int nOutLen = snprintf(&o_rOutputBuf[3], WRITE_BUFFER_SIZE-10, "%d %d", width, height);
if( nOutLen < 0 )
nOutLen = WRITE_BUFFER_SIZE-10;
o_rOutputBuf[3+nOutLen] =0x0A;
o_rOutputBuf[3+nOutLen+1]=0;
const int header_size = 3+nOutLen+1;
const int size = height * ((width + 7) / 8);
printf( " PBM %d", size + header_size );
if( bWithLinefeed )
printf("\n");
// trim buffer to exact header length
o_rOutputBuf.resize(header_size);
// initialize stream
str->reset();
// copy the raw stream
for( int i=0; i<size; ++i)
o_rOutputBuf.push_back(static_cast<char>(str->getChar()));
str->close();
}
// stolen from ImageOutputDev.cc
void writeMask_( OutputBuffer& o_rOutputBuf, Stream* str, int width, int height, bool bWithLinefeed )
{
if( str->getKind() == strDCT )
writeJpeg_(o_rOutputBuf, str, bWithLinefeed);
else
writePbm_(o_rOutputBuf, str, width, height, bWithLinefeed);
}
void writeImage_( OutputBuffer& o_rOutputBuf,
Stream* str,
int width,
int height,
GfxImageColorMap* colorMap,
bool bWithLinefeed )
{
// dump JPEG file
if( str->getKind() == strDCT &&
(colorMap->getNumPixelComps() == 1 ||
colorMap->getNumPixelComps() == 3) )
{
writeJpeg_(o_rOutputBuf, str, bWithLinefeed);
}
else if (colorMap->getNumPixelComps() == 1 &&
colorMap->getBits() == 1)
{
writePbm_(o_rOutputBuf, str, width, height, bWithLinefeed);
}
else
{
// write as PPM (char by char, to avoid stdlib lineend messing)
o_rOutputBuf.clear();
o_rOutputBuf.resize(WRITE_BUFFER_SIZE);
o_rOutputBuf[0] = 'P';
o_rOutputBuf[1] = '6';
o_rOutputBuf[2] = '\n';
int nOutLen = snprintf(&o_rOutputBuf[3], WRITE_BUFFER_SIZE-10, "%d %d", width, height);
if( nOutLen < 0 )
nOutLen = WRITE_BUFFER_SIZE-10;
o_rOutputBuf[3+nOutLen] ='\n';
o_rOutputBuf[3+nOutLen+1]='2';
o_rOutputBuf[3+nOutLen+2]='5';
o_rOutputBuf[3+nOutLen+3]='5';
o_rOutputBuf[3+nOutLen+4]='\n';
o_rOutputBuf[3+nOutLen+5]=0;
const int header_size = 3+nOutLen+5;
const int size = width*height*3 + header_size;
printf( " PPM %d", size );
if( bWithLinefeed )
printf("\n");
// trim buffer to exact header size
o_rOutputBuf.resize(header_size);
// initialize stream
Guchar *p;
GfxRGB rgb;
ImageStream* imgStr =
new ImageStream(str,
width,
colorMap->getNumPixelComps(),
colorMap->getBits());
imgStr->reset();
for( int y=0; y<height; ++y)
{
p = imgStr->getLine();
for( int x=0; x<width; ++x)
{
colorMap->getRGB(p, &rgb);
o_rOutputBuf.push_back(colToByte(rgb.r));
o_rOutputBuf.push_back(colToByte(rgb.g));
o_rOutputBuf.push_back(colToByte(rgb.b));
p +=colorMap->getNumPixelComps();
}
}
delete imgStr;
}
}
// forwarders
// ------------------------------------------------------------------
inline void writeImage( OutputBuffer& o_rOutputBuf,
Stream* str,
int width,
int height,
GfxImageColorMap* colorMap ) { writeImage_(o_rOutputBuf,str,width,height,colorMap,false); }
inline void writeImageLF( OutputBuffer& o_rOutputBuf,
Stream* str,
int width,
int height,
GfxImageColorMap* colorMap ) { writeImage_(o_rOutputBuf,str,width,height,colorMap,true); }
inline void writeMask( OutputBuffer& o_rOutputBuf,
Stream* str,
int width,
int height ) { writeMask_(o_rOutputBuf,str,width,height,false); }
inline void writeMaskLF( OutputBuffer& o_rOutputBuf,
Stream* str,
int width,
int height ) { writeMask_(o_rOutputBuf,str,width,height,true); }
// ------------------------------------------------------------------
int PDFOutDev::parseFont( long long nNewId, GfxFont* gfxFont, GfxState* state ) const
{
FontAttributes aNewFont;
int nSize = 0;
GString* pFamily = gfxFont->getName();
if( ! pFamily )
pFamily = gfxFont->getOrigName();
if( pFamily )
{
aNewFont.familyName.clear();
aNewFont.familyName.append( gfxFont->getName() );
}
else
{
aNewFont.familyName.clear();
aNewFont.familyName.append( "Arial" );
}
aNewFont.isBold = gfxFont->isBold();
aNewFont.isItalic = gfxFont->isItalic();
aNewFont.size = state->getTransformedFontSize();
aNewFont.isUnderline = false;
if( gfxFont->getType() == fontTrueType || gfxFont->getType() == fontType1 )
{
// TODO(P3): Unfortunately, need to read stream twice, since
// we must write byte count to stdout before
char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
if( pBuf )
aNewFont.isEmbedded = true;
}
m_aFontMap[ nNewId ] = aNewFont;
return nSize;
}
void PDFOutDev::writeFontFile( GfxFont* gfxFont ) const
{
if( gfxFont->getType() != fontTrueType && gfxFont->getType() != fontType1 )
return;
int nSize = 0;
char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
if( !pBuf )
return;
// ---sync point--- see SYNC STREAMS above
fflush(stdout);
if( fwrite(pBuf, sizeof(char), nSize, g_binary_out) != (size_t)nSize )
exit(1); // error
// ---sync point--- see SYNC STREAMS above
fflush(g_binary_out);
}
void PDFOutDev::printPath( GfxPath* pPath ) const
{
int nSubPaths = pPath ? pPath->getNumSubpaths() : 0;
for( int i=0; i<nSubPaths; i++ )
{
GfxSubpath* pSub = pPath->getSubpath( i );
const int nPoints = pSub->getNumPoints();
printf( " subpath %d", pSub->isClosed() );
for( int n=0; n<nPoints; ++n )
{
printf( " %f %f %d",
normalize(pSub->getX(n)),
normalize(pSub->getY(n)),
pSub->getCurve(n) );
}
}
}
PDFOutDev::PDFOutDev( PDFDoc* pDoc ) :
m_pDoc( pDoc ),
m_aFontMap(),
m_pUtf8Map( new UnicodeMap("UTF-8", gTrue, &mapUTF8) )
{
}
void PDFOutDev::startPage(int /*pageNum*/, GfxState* state)
{
assert(state);
printf("startPage %f %f\n",
normalize(state->getPageWidth()),
normalize(state->getPageHeight()));
}
void PDFOutDev::endPage()
{
printf("endPage\n");
}
void PDFOutDev::processLink(Link* link, Catalog*)
{
assert(link);
double x1,x2,y1,y2;
link->getRect( &x1, &y1, &x2, &y2 );
LinkAction* pAction = link->getAction();
if( pAction->getKind() == actionURI )
{
const char* pURI = static_cast<LinkURI*>(pAction)->getURI()->getCString();
printf( "drawLink %f %f %f %f %s\n",
normalize(x1),
normalize(y1),
normalize(x2),
normalize(y2),
escapeLineFeed(pURI) );
}
}
void PDFOutDev::saveState(GfxState*)
{
printf( "saveState\n" );
}
void PDFOutDev::restoreState(GfxState*)
{
printf( "restoreState\n" );
}
void PDFOutDev::setDefaultCTM(double *pMat)
{
assert(pMat);
OutputDev::setDefaultCTM(pMat);
printf( "updateCtm %f %f %f %f %f %f\n",
normalize(pMat[0]),
normalize(pMat[2]),
normalize(pMat[1]),
normalize(pMat[3]),
normalize(pMat[4]),
normalize(pMat[5]) );
}
void PDFOutDev::updateCTM(GfxState* state,
double, double,
double, double,
double, double)
{
assert(state);
const double* const pMat = state->getCTM();
assert(pMat);
printf( "updateCtm %f %f %f %f %f %f\n",
normalize(pMat[0]),
normalize(pMat[2]),
normalize(pMat[1]),
normalize(pMat[3]),
normalize(pMat[4]),
normalize(pMat[5]) );
}
void PDFOutDev::updateLineDash(GfxState *state)
{
assert(state);
double* dashArray; int arrayLen; double startOffset;
state->getLineDash(&dashArray, &arrayLen, &startOffset);
printf( "updateLineDash" );
if( arrayLen && dashArray )
{
printf( " %f %d", normalize(startOffset), arrayLen );
for( int i=0; i<arrayLen; ++i )
printf( " %f", normalize(*dashArray++) );
}
printf( "\n" );
}
void PDFOutDev::updateFlatness(GfxState *state)
{
assert(state);
printf( "updateFlatness %d\n", state->getFlatness() );
}
void PDFOutDev::updateLineJoin(GfxState *state)
{
assert(state);
printf( "updateLineJoin %d\n", state->getLineJoin() );
}
void PDFOutDev::updateLineCap(GfxState *state)
{
assert(state);
printf( "updateLineCap %d\n", state->getLineCap() );
}
void PDFOutDev::updateMiterLimit(GfxState *state)
{
assert(state);
printf( "updateMiterLimit %f\n", normalize(state->getMiterLimit()) );
}
void PDFOutDev::updateLineWidth(GfxState *state)
{
assert(state);
printf( "updateLineWidth %f\n", normalize(state->getLineWidth()) );
}
void PDFOutDev::updateFillColor(GfxState *state)
{
assert(state);
GfxRGB aRGB;
state->getFillRGB( &aRGB );
printf( "updateFillColor %f %f %f %f\n",
normalize(colToDbl(aRGB.r)),
normalize(colToDbl(aRGB.g)),
normalize(colToDbl(aRGB.b)),
normalize(state->getFillOpacity()) );
}
void PDFOutDev::updateStrokeColor(GfxState *state)
{
assert(state);
GfxRGB aRGB;
state->getStrokeRGB( &aRGB );
printf( "updateStrokeColor %f %f %f %f\n",
normalize(colToDbl(aRGB.r)),
normalize(colToDbl(aRGB.g)),
normalize(colToDbl(aRGB.b)),
normalize(state->getFillOpacity()) );
}
void PDFOutDev::updateFillOpacity(GfxState *state)
{
updateFillColor(state);
}
void PDFOutDev::updateStrokeOpacity(GfxState *state)
{
updateStrokeColor(state);
}
void PDFOutDev::updateBlendMode(GfxState*)
{
}
void PDFOutDev::updateFont(GfxState *state)
{
assert(state);
GfxFont *gfxFont = state->getFont();
if( gfxFont )
{
FontAttributes aFont;
int nEmbedSize=0;
Ref* pID = gfxFont->getID();
// TODO(Q3): Portability problem
long long fontID = (long long)pID->gen << 32 | (long long)pID->num;
std::hash_map< long long, FontAttributes >::const_iterator it =
m_aFontMap.find( fontID );
if( it == m_aFontMap.end() )
{
nEmbedSize = parseFont( fontID, gfxFont, state );
it = m_aFontMap.find( fontID );
}
printf( "updateFont" );
if( it != m_aFontMap.end() )
{
// conflating this with printf below crashes under Windoze
printf( " %lld", fontID );
aFont = it->second;
printf( " %d %d %d %d %f %d %s",
aFont.isEmbedded,
aFont.isBold,
aFont.isItalic,
aFont.isUnderline,
normalize(aFont.size),
nEmbedSize,
escapeLineFeed(aFont.familyName.getCString()) );
}
printf( "\n" );
if( nEmbedSize )
writeFontFile(gfxFont);
}
}
void PDFOutDev::stroke(GfxState *state)
{
assert(state);
printf( "strokePath" );
printPath( state->getPath() );
printf( "\n" );
}
void PDFOutDev::fill(GfxState *state)
{
assert(state);
printf( "fillPath" );
printPath( state->getPath() );
printf( "\n" );
}
void PDFOutDev::eoFill(GfxState *state)
{
assert(state);
printf( "eoFillPath" );
printPath( state->getPath() );
printf( "\n" );
}
void PDFOutDev::clip(GfxState *state)
{
assert(state);
printf( "clipPath" );
printPath( state->getPath() );
printf( "\n" );
}
void PDFOutDev::eoClip(GfxState *state)
{
assert(state);
printf( "eoClipPath" );
printPath( state->getPath() );
printf( "\n" );
}
void PDFOutDev::drawChar(GfxState *state, double x, double y,
double dx, double /*dy*/,
double originX, double originY,
CharCode, int /*nBytes*/, Unicode *u, int uLen)
{
assert(state);
if( u == NULL )
return;
// normalize coordinates
// correct from baseline to upper left corner
double x2(0.0), y2(0.0);
state->textTransformDelta( 0.0,
state->getFontSize()*state->getFont()->getAscent(),
&x2, &y2 );
x -= x2;
y += y2;
const double aPositionX(x-originX);
const double aPositionY(y-originY);
const double nWidth(dx);
const double nHeight(state->getFontSize());
const double* pTextMat=state->getTextMat();
printf( "drawChar %f %f %f %f %f %f %f %f ",
normalize(aPositionX),
normalize(aPositionY),
normalize(aPositionX+nWidth),
normalize(aPositionY+nHeight),
normalize(pTextMat[0]),
normalize(pTextMat[2]),
normalize(pTextMat[1]),
normalize(pTextMat[3]) );
// silence spurious warning
(void)&mapUCS2;
char buf[9];
for( int i=0; i<uLen; ++i )
{
buf[ m_pUtf8Map->mapUnicode(u[i], buf, sizeof(buf)-1) ] = 0;
printf( "%s", escapeLineFeed(buf) );
}
printf( "\n" );
}
void PDFOutDev::drawString(GfxState*, GString* /*s*/)
{
// TODO(F3): NYI
}
void PDFOutDev::endTextObject(GfxState*)
{
printf( "endTextObject\n" );
}
void PDFOutDev::drawImageMask(GfxState*, Object*, Stream* str,
int width, int height, GBool invert,
GBool /*inlineImg*/ )
{
OutputBuffer aBuf; initBuf(aBuf);
printf( "drawMask %d %d %d", width, height, invert );
writeMaskLF(aBuf, str, width, height);
writeBinaryBuffer(aBuf);
}
void PDFOutDev::drawImage(GfxState*, Object*, Stream* str,
int width, int height, GfxImageColorMap* colorMap,
int* maskColors, GBool /*inlineImg*/ )
{
OutputBuffer aBuf; initBuf(aBuf);
OutputBuffer aMaskBuf;
printf( "drawImage %d %d", width, height );
if( maskColors )
{
// write mask colors. nBytes must be even - first half is
// lower bound values, second half upper bound values
if( colorMap->getColorSpace()->getMode() == csIndexed )
{
aMaskBuf.push_back( (char)maskColors[0] );
aMaskBuf.push_back( (char)maskColors[gfxColorMaxComps] );
}
else
{
GfxRGB aMinRGB;
colorMap->getColorSpace()->getRGB(
(GfxColor*)maskColors,
&aMinRGB );
GfxRGB aMaxRGB;
colorMap->getColorSpace()->getRGB(
(GfxColor*)maskColors+gfxColorMaxComps,
&aMaxRGB );
aMaskBuf.push_back( colToByte(aMinRGB.r) );
aMaskBuf.push_back( colToByte(aMinRGB.g) );
aMaskBuf.push_back( colToByte(aMinRGB.b) );
aMaskBuf.push_back( colToByte(aMaxRGB.r) );
aMaskBuf.push_back( colToByte(aMaxRGB.g) );
aMaskBuf.push_back( colToByte(aMaxRGB.b) );
}
}
printf( " %d", aMaskBuf.size() );
writeImageLF( aBuf, str, width, height, colorMap );
writeBinaryBuffer(aBuf);
writeBinaryBuffer(aMaskBuf);
}
void PDFOutDev::drawMaskedImage(GfxState*, Object*, Stream* str,
int width, int height,
GfxImageColorMap* colorMap,
Stream* maskStr,
int maskWidth, int maskHeight,
GBool maskInvert)
{
OutputBuffer aBuf; initBuf(aBuf);
OutputBuffer aMaskBuf; initBuf(aMaskBuf);
printf( "drawMaskedImage %d %d %d %d %d", width, height, maskWidth, maskHeight, maskInvert );
writeImage( aBuf, str, width, height, colorMap );
writeMaskLF( aMaskBuf, maskStr, width, height );
writeBinaryBuffer(aBuf);
writeBinaryBuffer(aMaskBuf);
}
void PDFOutDev::drawSoftMaskedImage(GfxState*, Object*, Stream* str,
int width, int height,
GfxImageColorMap* colorMap,
Stream* maskStr,
int maskWidth, int maskHeight,
GfxImageColorMap* maskColorMap )
{
OutputBuffer aBuf; initBuf(aBuf);
OutputBuffer aMaskBuf; initBuf(aMaskBuf);
printf( "drawSoftMaskedImage %d %d %d %d", width, height, maskWidth, maskHeight );
writeImage( aBuf, str, width, height, colorMap );
writeImageLF( aMaskBuf, maskStr, maskWidth, maskHeight, maskColorMap );
writeBinaryBuffer(aBuf);
writeBinaryBuffer(aMaskBuf);
}
void PDFOutDev::setPageNum( int nNumPages )
{
// TODO(F3): printf might format int locale-dependent!
printf("setPageNum %d\n", nNumPages);
}
}
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: pdfioutdev_gpl.hxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2007-12-05 14:16:44 $
*
* The Contents of this file are made available subject to
* the terms of GNU General Public License Version 2.
*
*
* GNU General Public License, version 2
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
************************************************************************/
#ifndef INCLUDED_PDFI_OUTDEV_HXX
#define INCLUDED_PDFI_OUTDEV_HXX
#if defined __GNUC__
#pragma GCC system_header
#elif defined __SUNPRO_CC
#pragma disable_warn
#elif defined _MSC_VER
#pragma warning(push, 1)
#endif
#include "GfxState.h"
#include "GfxFont.h"
#include "UnicodeMap.h"
#include "Link.h"
#include "Object.h"
#include "OutputDev.h"
#include "parseargs.h"
#include "GlobalParams.h"
#include "PDFDoc.h"
#if defined __SUNPRO_CC
#pragma enable_warn
#elif defined _MSC_VER
#pragma warning(pop)
#endif
#include <hash_map>
class GfxPath;
class GfxFont;
class PDFDoc;
namespace pdfi
{
struct FontAttributes
{
FontAttributes( const GString& familyName_,
bool isEmbedded_,
bool isBold_,
bool isItalic_,
bool isUnderline_,
double size_ ) :
familyName(),
isEmbedded(isEmbedded_),
isBold(isBold_),
isItalic(isItalic_),
isUnderline(isUnderline_),
size(size_)
{
familyName.append(const_cast<GString*>(&familyName_));
}
FontAttributes() :
familyName(),
isEmbedded(false),
isBold(false),
isItalic(false),
isUnderline(false),
size(0.0)
{}
// xdpf goo stuff is so totally borked...
// ...need to hand-code assignment
FontAttributes( const FontAttributes& rSrc ) :
familyName(),
isEmbedded(rSrc.isEmbedded),
isBold(rSrc.isBold),
isItalic(rSrc.isItalic),
isUnderline(rSrc.isUnderline),
size(rSrc.size)
{
familyName.append(const_cast<GString*>(&rSrc.familyName));
}
FontAttributes& operator=( const FontAttributes& rSrc )
{
familyName.clear();
familyName.append(const_cast<GString*>(&rSrc.familyName));
isEmbedded = rSrc.isEmbedded;
isBold = rSrc.isBold;
isItalic = rSrc.isItalic;
isUnderline = rSrc.isUnderline;
size = rSrc.size;
return *this;
}
bool operator==(const FontAttributes& rFont) const
{
return const_cast<GString*>(&familyName)->cmp(
const_cast<GString*>(&rFont.familyName))==0 &&
isEmbedded == rFont.isEmbedded &&
isBold == rFont.isBold &&
isItalic == rFont.isItalic &&
isUnderline == rFont.isUnderline &&
size == rFont.size;
}
GString familyName;
bool isEmbedded;
bool isBold;
bool isItalic;
bool isUnderline;
double size;
};
class PDFOutDev : public OutputDev
{
// not owned by this class
PDFDoc* m_pDoc;
mutable std::hash_map< long long,
FontAttributes > m_aFontMap;
UnicodeMap* m_pUtf8Map;
int parseFont( long long nNewId, GfxFont* pFont, GfxState* state ) const;
void writeFontFile( GfxFont* gfxFont ) const;
void printPath( GfxPath* pPath ) const;
public:
explicit PDFOutDev( PDFDoc* pDoc );
//----- get info about output device
// Does this device use upside-down coordinates?
// (Upside-down means (0,0) is the top left corner of the page.)
virtual GBool upsideDown() { return gTrue; }
// Does this device use drawChar() or drawString()?
virtual GBool useDrawChar() { return gTrue; }
// Does this device use beginType3Char/endType3Char? Otherwise,
// text in Type 3 fonts will be drawn with drawChar/drawString.
virtual GBool interpretType3Chars() { return gFalse; }
// Does this device need non-text content?
virtual GBool needNonText() { return gTrue; }
//----- initialization and control
// Set default transform matrix.
virtual void setDefaultCTM(double *ctm);
// Start a page.
virtual void startPage(int pageNum, GfxState *state);
// End a page.
virtual void endPage();
// Dump page contents to display.
// virtual void dump() {}
//----- coordinate conversion
// Convert between device and user coordinates.
// virtual void cvtDevToUser(double dx, double dy, double *ux, double *uy);
// virtual void cvtUserToDev(double ux, double uy, int *dx, int *dy);
//----- link borders
virtual void processLink(Link *link, Catalog *catalog);
//----- save/restore graphics state
virtual void saveState(GfxState *state);
virtual void restoreState(GfxState *state);
//----- update graphics state
// virtual void updateAll(GfxState *state);
virtual void updateCTM(GfxState *state, double m11, double m12,
double m21, double m22, double m31, double m32);
virtual void updateLineDash(GfxState *state);
virtual void updateFlatness(GfxState *state);
virtual void updateLineJoin(GfxState *state);
virtual void updateLineCap(GfxState *state);
virtual void updateMiterLimit(GfxState *state);
virtual void updateLineWidth(GfxState *state);
virtual void updateFillColor(GfxState *state);
virtual void updateStrokeColor(GfxState *state);
virtual void updateFillOpacity(GfxState *state);
virtual void updateStrokeOpacity(GfxState *state);
virtual void updateBlendMode(GfxState *state);
//----- update text state
virtual void updateFont(GfxState *state);
// virtual void updateTextMat(GfxState *state);
// virtual void updateCharSpace(GfxState *state) {}
// virtual void updateRender(GfxState *state) {}
// virtual void updateRise(GfxState *state) {}
// virtual void updateWordSpace(GfxState *state) {}
// virtual void updateHorizScaling(GfxState *state) {}
// virtual void updateTextPos(GfxState *state) {}
// virtual void updateTextShift(GfxState *state, double shift) {}
//----- path painting
virtual void stroke(GfxState *state);
virtual void fill(GfxState *state);
virtual void eoFill(GfxState *state);
//----- path clipping
virtual void clip(GfxState *state);
virtual void eoClip(GfxState *state);
//----- text drawing
virtual void drawChar(GfxState *state, double x, double y,
double dx, double dy,
double originX, double originY,
CharCode code, int nBytes, Unicode *u, int uLen);
virtual void drawString(GfxState *state, GString *s);
virtual void endTextObject(GfxState *state);
//----- image drawing
virtual void drawImageMask(GfxState *state, Object *ref, Stream *str,
int width, int height, GBool invert,
GBool inlineImg);
virtual void drawImage(GfxState *state, Object *ref, Stream *str,
int width, int height, GfxImageColorMap *colorMap,
int *maskColors, GBool inlineImg);
virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str,
int width, int height,
GfxImageColorMap *colorMap,
Stream *maskStr, int maskWidth, int maskHeight,
GBool maskInvert);
virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
int width, int height,
GfxImageColorMap *colorMap,
Stream *maskStr,
int maskWidth, int maskHeight,
GfxImageColorMap *maskColorMap);
//----- OPI functions
// virtual void opiBegin(GfxState *state, Dict *opiDict);
// virtual void opiEnd(GfxState *state, Dict *opiDict);
//----- Type 3 font operators
// virtual void type3D0(GfxState *state, double wx, double wy) {}
// virtual void type3D1(GfxState *state, double wx, double wy,
// double llx, double lly, double urx, double ury) {}
//----- PostScript XObjects
// virtual void psXObject(Stream *psStream, Stream *level1Stream) {}
void setPageNum( int nNumPages );
};
}
extern FILE* g_binary_out;
#endif /* INCLUDED_PDFI_OUTDEV_HXX */
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: wrapper_gpl.cxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2007-12-05 14:16:44 $
*
* The Contents of this file are made available subject to
* the terms of GNU General Public License Version 2.
*
*
* GNU General Public License, version 2
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
************************************************************************/
#include "pdfioutdev_gpl.hxx"
#ifdef WNT
# include <io.h>
# include <fcntl.h> /*_O_BINARY*/
#endif
static char ownerPassword[33] = "\001";
static char userPassword[33] = "\001";
static char outputFile[256] = "\001";
static char cfgFileName[256] = "";
FILE* g_binary_out=stderr;
static ArgDesc argDesc[] = {
{"-f", argString, outputFile, sizeof(outputFile),
"output file for binary streams"},
{"-opw", argString, ownerPassword, sizeof(ownerPassword),
"owner password (for encrypted files)"},
{"-upw", argString, userPassword, sizeof(userPassword),
"user password (for encrypted files)"},
{NULL, argString, NULL, 0, NULL }
};
int main(int argc, char **argv)
{
// parse args; initialize to defaults
if( !parseArgs(argDesc, &argc, argv) )
return 1;
if( argc < 2 )
return 1;
// read config file
globalParams = new GlobalParams(cfgFileName);
globalParams->setErrQuiet(gTrue);
globalParams->setupBaseFonts(NULL);
// PDFDoc takes over ownership for all strings below
GString* pFileName = new GString(argv[1]);
// check for password string(s)
GString* pOwnerPasswordStr(
ownerPassword[0] != '\001' ? new GString(ownerPassword)
: (GString *)NULL );
GString* pUserPasswordStr(
userPassword[0] != '\001' ? new GString(userPassword)
: (GString *)NULL );
if( outputFile[0] != '\001' )
g_binary_out = fopen(outputFile,"wb");
#ifdef WNT
// Win actually modifies output for O_TEXT file mode, so need to
// revert to binary here
_setmode( _fileno( g_binary_out ), _O_BINARY );
#endif
PDFDoc aDoc( pFileName,
pOwnerPasswordStr,
pUserPasswordStr );
if( !aDoc.isOk() )
return 1;
pdfi::PDFOutDev* pOutDev( new pdfi::PDFOutDev(&aDoc) );
// tell receiver early - needed for proper progress calculation
pOutDev->setPageNum( aDoc.getNumPages() );
// virtual resolution of the PDF OutputDev in dpi
static const int PDFI_OUTDEV_RESOLUTION=7200;
// do the conversion
const int nPages = aDoc.getNumPages();
for( int i=1; i<=nPages; ++i )
{
aDoc.displayPage( pOutDev,
i,
PDFI_OUTDEV_RESOLUTION,
PDFI_OUTDEV_RESOLUTION,
0, gTrue, gTrue, gTrue );
aDoc.processLinks( pOutDev, i );
}
return 0;
}
--- misc/patch/xpdf-3.02/aconf.h 1970-01-01 01:00:00.000000000 +0100
+++ misc/build/xpdf-3.02/aconf.h 2007-08-07 15:44:36.000000000 +0200
@@ -0,0 +1,104 @@
+/* aconf.h. Generated by configure. */
+/*
+ * aconf.h
+ *
+ * Copyright 2002-2003 Glyph & Cog, LLC
+ */
+
+#ifndef ACONF_H
+#define ACONF_H
+
+#include <aconf2.h>
+
+/*
+ * Use A4 paper size instead of Letter for PostScript output.
+ */
+/* #undef A4_PAPER */
+
+/*
+ * Do not allow text selection.
+ */
+/* #undef NO_TEXT_SELECT */
+
+/*
+ * Include support for OPI comments.
+ */
+/* #undef OPI_SUPPORT */
+
+/*
+ * Enable multithreading support.
+ */
+/* #undef MULTITHREADED */
+
+/*
+ * Enable word list support.
+ */
+/* #undef TEXTOUT_WORD_LIST */
+
+/*
+ * Directory with the Xpdf app-defaults file.
+ */
+/* #undef APPDEFDIR */
+
+/*
+ * Full path for the system-wide xpdfrc file.
+ */
+#define SYSTEM_XPDFRC "/usr/local/etc/xpdfrc"
+
+/*
+ * Various include files and functions.
+ */
+#define HAVE_DIRENT_H 1
+/* #undef HAVE_SYS_NDIR_H */
+/* #undef HAVE_SYS_DIR_H */
+/* #undef HAVE_NDIR_H */
+/* #undef HAVE_SYS_SELECT_H */
+/* #undef HAVE_SYS_BSDTYPES_H */
+#define HAVE_STRINGS_H 1
+/* #undef HAVE_BSTRING_H */
+#define HAVE_POPEN 1
+#define HAVE_MKSTEMP 1
+/* #undef HAVE_MKSTEMPS */
+/* #undef SELECT_TAKES_INT */
+#if ! defined WNT
+#define HAVE_FSEEKO 1
+#endif
+/* #undef HAVE_FSEEK64 */
+#define _FILE_OFFSET_BITS 64
+/* #undef _LARGE_FILES */
+#define _LARGEFILE_SOURCE 1
+/* #undef HAVE_XTAPPSETEXITFLAG 1 */
+
+/*
+ * This is defined if using libXpm.
+ */
+/* #undef HAVE_X11_XPM_H 1 */
+
+/*
+ * This is defined if using t1lib.
+ */
+/* #undef HAVE_T1LIB_H 1 */
+
+/*
+ * One of these is defined if using FreeType 2.
+ */
+/* #undef HAVE_FREETYPE_H */
+/* #undef HAVE_FREETYPE_FREETYPE_H 1 */
+
+/*
+ * This is defined if using libpaper.
+ */
+/* #undef HAVE_PAPER_H */
+
+/*
+ * Enable support for loading plugins.
+ */
+/* #undef ENABLE_PLUGINS */
+
+/*
+ * Enable support for CMYK output.
+ */
+/* #undef SPLASH_CMYK */
+
+
+#endif
*** misc/xpdf-3.02/ms_make.bat Tue Feb 27 23:05:51 2007
--- misc/build/xpdf-3.02/ms_make.bat Fri Sep 14 20:08:02 2007
***************
*** 1,5 ****
set CC=cl
! set CFLAGS=/DWIN32 /I.. /I..\goo /I..\fofi /O2 /nologo
set CXX=cl
set CXXFLAGS=%CFLAGS% /TP
set LIBPROG=lib
--- 1,5 ----
set CC=cl
! set CFLAGS=/DWIN32 /D_MT /I.. /I..\goo /I..\fofi /O2 /nologo
set CXX=cl
set CXXFLAGS=%CFLAGS% /TP
set LIBPROG=lib
***************
*** 70,75 ****
--- 70,77 ----
%CXX% %CXXFLAGS% /c pdffonts.cc
%CXX% %CXXFLAGS% /c pdfimages.cc
+ %LIBPROG% /nologo /out:xpdf.lib Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj Stream.obj UnicodeMap.obj XRef.obj
+
%CXX% %LINKFLAGS% /Fepdftops.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSOutputDev.obj PSTokenizer.obj SecurityHandler.obj Stream.obj UnicodeMap.obj XRef.obj pdftops.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib
%CXX% %LINKFLAGS% /Fepdftotext.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj Stream.obj TextOutputDev.obj UnicodeMap.obj UnicodeTypeTable.obj XRef.obj pdftotext.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib
***************
*** 82,118 ****
cd ..
- rem --- This part will only work if you have FreeType installed ---
-
- set FT2DIR=..\freetype-2.3.1
- set CXXFLAGS=%CXXFLAGS% /I..\splash /I%FT2DIR%\include
-
- cd splash
- %CXX% %CXXFLAGS% /c Splash.cc
- %CXX% %CXXFLAGS% /c SplashBitmap.cc
- %CXX% %CXXFLAGS% /c SplashClip.cc
- %CXX% %CXXFLAGS% /c SplashFTFont.cc
- %CXX% %CXXFLAGS% /c SplashFTFontEngine.cc
- %CXX% %CXXFLAGS% /c SplashFTFontFile.cc
- %CXX% %CXXFLAGS% /c SplashFont.cc
- %CXX% %CXXFLAGS% /c SplashFontEngine.cc
- %CXX% %CXXFLAGS% /c SplashFontFile.cc
- %CXX% %CXXFLAGS% /c SplashFontFileID.cc
- %CXX% %CXXFLAGS% /c SplashPath.cc
- %CXX% %CXXFLAGS% /c SplashPattern.cc
- %CXX% %CXXFLAGS% /c SplashScreen.cc
- %CXX% %CXXFLAGS% /c SplashState.cc
- %CXX% %CXXFLAGS% /c SplashT1Font.cc
- %CXX% %CXXFLAGS% /c SplashT1FontEngine.cc
- %CXX% %CXXFLAGS% /c SplashT1FontFile.cc
- %CXX% %CXXFLAGS% /c SplashXPath.cc
- %CXX% %CXXFLAGS% /c SplashXPathScanner.cc
- %LIBPROG% /nologo /out:splash.lib Splash.obj SplashBitmap.obj SplashClip.obj SplashFTFont.obj SplashFTFontEngine.obj SplashFTFontFile.obj SplashFont.obj SplashFontEngine.obj SplashFontFile.obj SplashFontFileID.obj SplashPath.obj SplashPattern.obj SplashScreen.obj SplashState.obj SplashT1Font.obj SplashT1FontEngine.obj SplashT1FontFile.obj SplashXPath.obj SplashXPathScanner.obj
-
- cd ..\xpdf
- %CXX% %CXXFLAGS% /c SplashOutputDev.cc
- %CXX% %CXXFLAGS% /c pdftoppm.cc
-
- %CXX% %LINKFLAGS% /Fepdftoppm.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj SplashOutputDev.obj Stream.obj UnicodeMap.obj UnicodeTypeTable.obj XRef.obj pdftoppm.obj ..\splash\splash.lib ..\fofi\fofi.lib ..\goo\Goo.lib %FT2DIR%\freetype2.lib shell32.lib user32.lib gdi32.lib advapi32.lib
-
- cd ..
--- 84,86 ----
*** misc/xpdf-3.02/xpdf/Makefile.in Tue Feb 27 23:05:52 2007
--- misc/build/xpdf-3.02/xpdf/Makefile.in Fri Sep 14 20:17:25 2007
***************
*** 20,25 ****
--- 20,27 ----
SPLASHLIBDIR = ../splash
CXXFLAGS = @CXXFLAGS@ @DEFS@ -I.. -I$(GOOSRCDIR) -I$(FOFISRCDIR) -I$(SPLASHSRCDIR) -I$(srcdir) @freetype2_CFLAGS@ @Sgm_CFLAGS@ @Xm_CFLAGS@ @Xt_CFLAGS@ @Xp_CFLAGS@ @Xext_CFLAGS@ @Xpm_CFLAGS@ @t1_CFLAGS@ @libpaper_CFLAGS@ @X_CFLAGS@
+ AR = ar rc
+ RANLIB = ranlib
LDFLAGS = @LDFLAGS@
***************
*** 107,116 ****
#------------------------------------------------------------------------
all: xpdf$(EXE) pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) \
! pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE)
all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \
! pdfimages$(EXE)
#------------------------------------------------------------------------
--- 109,135 ----
#------------------------------------------------------------------------
all: xpdf$(EXE) pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) \
! pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE) $(LIBPREFIX)xpdf.a
all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \
! pdfimages$(EXE) $(LIBPREFIX)xpdf.a
!
! #------------------------------------------------------------------------
!
! XPDFLIB_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o Catalog.o \
! CharCodeToUnicode.o CMap.o Decrypt.o Dict.o \
! Error.o FontEncodingTables.o Function.o Gfx.o GfxFont.o \
! GfxState.o GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o \
! JPXStream.o Lexer.o Link.o NameToCharCode.o Object.o Outline.o \
! OutputDev.o Page.o Parser.o PDFCore.o PDFDoc.o PDFDocEncoding.o \
! PSTokenizer.o SecurityHandler.o \
! Stream.o UnicodeMap.o \
! UnicodeTypeTable.o XRef.o
!
! $(LIBPREFIX)xpdf.a: $(XPDFLIB_OBJS)
! rm -f $(LIBPREFIX)xpdf.a
! $(AR) $(LIBPREFIX)xpdf.a $(XPDFLIB_OBJS)
! $(RANLIB) $(LIBPREFIX)xpdf.a
#------------------------------------------------------------------------
*** misc/xpdf-3.02/goo/GString.cc Tue Feb 27 23:05:51 2007
--- misc/build/xpdf-3.02/goo/GString.cc Wed Sep 26 09:43:50 2007
***************
*** 528,534 ****
if ((neg = x < 0)) {
x = -x;
}
! x = floor(x * pow(10, prec) + 0.5);
i = bufSize;
started = !trim;
for (j = 0; j < prec && i > 1; ++j) {
--- 528,534 ----
if ((neg = x < 0)) {
x = -x;
}
! x = floor(x * pow(10.0, prec) + 0.5);
i = bufSize;
started = !trim;
for (j = 0; j < prec && i > 1; ++j) {
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment