Re: Possibility of personalizing OpenOffice documents automatically?
On Tue, May 31, 2005 at 12:36:51PM +0200, Herv? Piedvache wrote:
} On Tuesday 31 May 2005 12:08, Lee Braiden wrote:
} > On Tuesday 31 May 2005 11:06, herve@elma.fr wrote:
} > > No I want the operators to not be able to modify the original document
} > > ... And to have only a main administrator of the documents ...
} > > It's a kind of contact center, where people manage phone calls and for
} > > each call they will attribute to the customer a status ... and this
} > > status will produce a postal mail ... to be generated immediatly or by
} > > batch at the end of the day ... all the mail will be printed and put in
} > > wrap to be posted !
} > >
} > > It's clearer ? ;o)
} >
} > The usual way to do this sort of thing would be with a webserver running on
} > your intranet, which is linked to a database, and keeps a list of your
} > customers. Staff can then pull up a webpage, click a button, and have the
} > server generate reports.
}
} Yes ... marvelous ... but with what kind of tool do you manage the production
} of the mail ?
} Yes It'll be a web application .. no problem for this ... but I want to manage
} about 100 mail style sheet ... and be able to do the redaction of thoses mail
} easily ... and then have a system to produce them in file and print them ...
}
} So how to do that ?
An OOo file is a zip file containing XML files. I don't have deep insight
into the XML schema used, but it is well-documented and with a little
examination of a sample file I find that it is pretty simple. Importantly,
simple (same-styled) spans of text in a document show up as actual text
strings in the XML. It is therefore possible to put in something like
XXXXX_1_XXXXX in the running text and decompress/find/replace/recompress to
produce a new file. Note that it is content.xml that you want to modify.
The following script works for at least a simple case, though I recommend
rewriting this for performance reasons (note that in this implementation
replacements should be listed one per line in the replacements file, in
order, and must not contain the # character):
#!/bin/sh
if test $# -ne 3
then
echo "Usage: $0 <input SXW file> <output SXW file> <replacements file>"
exit 1
fi
PROCDIR=/tmp/$$
EDFILE=$PROCDIR/edscr
export PROCDIR
mkdir $PROCDIR
awk '{ printf("1,$s#XXXXX_%d_XXXXX#%s#g\n", NR, $0) }' "$3" > $EDFILE
echo w >> $EDFILE
echo q >> $EDFILE
cp "$1" $PROCDIR/file.sxw
(
cd $PROCDIR
unzip file.sxw content.xml
ed -s content.xml < edscr
zip -r file.sxw content.xml
)
cp $PROCDIR/file.sxw "$2"
rm -rf $PROCDIR
} regards,
} Herv? Piedvache
--Greg
Reply to: