On Mon, 8 Jul 2013, Stéphane Gourichon wrote:
Le 07/07/2013 20:14, Dag Wieers a écrit :
> Question : Can we set ODF document properties from asciidoc source using
> asciidoc-odf ? Some of my documents use them in page footers. In
> practice,
> exact footer text (and document subtitle) definitely needs to be
> different
> in different documents: it includes a kind of document ID currently
> fetched
> using an ODF document property.
There are two ways to do this.
- You make use of an ODF stylesheet when producing an .fodt file
- You make use of an ODF template to produce a real .odt file
The first one works best if you prefer to tinker with the file by hand,
the second one works best if you like to tinker with the look&feel using
LibreOffice. The first method gives the most possibilities (as the
LibreOffice interface does not give 100% control of what ODF can do).
I use the first method, the second method, while it should work has not
been tested as much and probably could use some more work to get it
finished.
The other benefit of the first method is that it generates an .fodt (Flat
ODT file) that you can inspect using a text-editor. Once modified with
LibreOffice to your liking, you can copy over the important changes back
into the ODT stylesheet for future document output. So once your
stylesheet is as you want it to look, you can reuse the stylesheet for all
future (and older) AsciiDoc files.
Thanks for your explanation, which if I understand covers the backend part,
not the front. Let me take an example.
Right, I was answering your general mail, rather than the specific
question at the end of your mail ;-) I guess I forgot about the question
once I was finished with describing how I used it.
Expected workflow
The expected way would be to add in asciidoc source
= My invoice title
: lang: en
: Ref_devis: abc123
: invoiceid: def456
And have asciidoc-odf generate something like :
<meta:user-defined meta:name="*Ref_devis">abc123*</meta:user-defined>
(...)
<style:master-page style:name="Standard"
style:page-layout-name="Mpm1">
<style:footer> <text:p text:style-name="MP1"> réf. devis n°
<text:user-defined style:data-style-name="N0"
text:name="*Ref_devis">ABC123*</text:user-defined> Page <text:page-number
text:select-page="current"/>/<text:page-count>1</text:page-count>
</text:p> <text:p text:style-name="MP1">...Legal stuff...</text:p>
</style:footer> </style:master-page>
That won't work since there is no stylesheet generation. What we can do
from the backend is pretty limited. That doesn't mean we cannot redesign
either the way the backend works now, or how asciidoc processes backends.
The "document properties" approach, from existing
I got the code from git (will report some glitches separately) and ran
asciidoc -b odt README.asciidoc .
The generated file contains :
<meta:user-defined meta:name="author">Dag Wieers</meta:user-defined>
<meta:user-defined meta:name="email">[email protected]</meta:user-defined>
which seem to come from
: author: Dag Wieers
: email: [email protected]
but if I add another attribute, e.g. :quoteid: abc123, it won't get included
in fodt output.
curriculum-vitae-dag-wieers.txt contains :
: linux-experience: {sys:echo $(( $(date +%Y) - 1995))}
I wish curriculum-vitae-dag-wieers.fodt would contain :
<meta:user-defined meta:name="linux-experience">18</meta:user-defined>
But it didn't.
What you are refering to is summarized in:
https://github.com/dagwieers/asciidoc-odf/issues/11
I will hapilly merge a pull-request that implements this.
Looking at source code I see in odt.conf :
<meta:user-defined meta:name="author">{author}</meta:user-defined>
<meta:user-defined meta:name="email">{email}</meta:user-defined>
<meta:user-defined meta:name="version">{version}</meta:user-defined>
So, it looks like in current code author, email and version can be
user-defined document properties.
Including the others would need to make a loop turning more asciidoc-level
properties into ODF-level meta:user-defined.
Indeed. It would be a great improvement, but I don't see how we can do
this. Maybe there is a way to do this, I don't know.
I only added what made the most sense. Mind you that the FODT metadata
also includes additional metadata (e.g. document title, keywords,
preamble, author, ...) from the AsciiDoc file. And this is also put into
the PDF (which is great for SEO in PDF files) !
The asciidoc string substitution approach
Another solution might work : drop user-defined document properties
altogether and just use asciidoc-based string substitution. Just put in
asciidoc some header like :
and try method 1 or 2 that you described, like putting a footer section with
{invoiceid}.
But I'm fearing that :
* it may work ok with method 1 (not tested)
* it would only work once with method 2, because after the document is
edited and saved in LibreOffice, the substituted value becomes the
constant def456, losing the reference to invoiceid.
What do you think ?
Headers and footers are completely defined in the stylesheet and there is
no mechanism to substitute information in the stylesheet. For FODT that
would be impossible, for ODT the processing could be part of the creation
of the file. However my preference is to have something that works for
both (i.e. ODF variables).
--
-- dag wieers, [email protected], http://dag.wieers.com/
-- dagit linux solutions, [email protected], http://dagit.net/
[Any errors in spelling, tact or fact are transmission errors]
--
You received this message because you are subscribed to the Google Groups
"asciidoc" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/asciidoc.
For more options, visit https://groups.google.com/groups/opt_out.