Having trouble getting number-columns-spanned to work

classic Classic list List threaded Threaded
16 messages Options
Reply | Threaded
Open this post in threaded view
|

Having trouble getting number-columns-spanned to work

Richard M
I am having trouble getting a cell to span multiple columns. I have
looked at the examples and read/re-read the specs, but no joy. Any help
is appreciated - I have seen several posts affirming that this feature
is supported, so its obviously a "user error". Any help is appreciated.

BTW, unti this I have really been breezing along in FO/FOP doing my
first database report (have been using FOP to convert SVG to PDF for a
couple of years). Its great.

Anyway, below is my FO file. The problem is that my separator row,
marked with "<!-- SEPARATOR ROW -->" ends up wrapped in the first narrow
column (.5 inch) instead of spanning all six columns.

Again thanks in advance for any help - Richard

<!-- START OF FO FILE -->
<?xml version="1.0" encoding="utf-8"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <!-- defines the layout master -->
  <fo:layout-master-set>
    <fo:simple-page-master
        master-name="report1"
        page-height="8.5in"
        page-width="11in"
        margin-top=".5in"
        margin-bottom=".5in"
        margin-left=".5in"
        margin-right=".5in">
      <fo:region-before extent=".5in"/>
      <fo:region-after extent=".5in"/>
      <fo:region-body margin-top=".5in" margin-bottom=".5in"/><!-- This
leaves about 9in for text -->
    </fo:simple-page-master>
  </fo:layout-master-set>

  <!-- starts actual layout -->

  <fo:page-sequence master-reference="report1">
    <fo:static-content flow-name="xsl-region-before">
      <fo:block line-height="14pt" font-size="10pt"
        text-align="end">${report.headerLeft[0]}</fo:block>
    </fo:static-content>
    <fo:static-content flow-name="xsl-region-after">
      <fo:block line-height="14pt" font-size="10pt"
        text-align="end">Page
        <fo:page-number/>
      </fo:block>
    </fo:static-content>

    <fo:flow flow-name="xsl-region-body">
   

      <!-- table start -->
      <fo:table table-layout="fixed" border-collapse="separate"
          border-left-color="black" border-left-width="0.5pt"
border-left-style="solid"
          border-right-color="black" border-right-width="0.5pt"
border-right-style="solid"
          border-top-color="black" border-top-width="0.5pt"
border-top-style="solid"
          border-bottom-color="black" border-bottom-width="0.5pt"
border-bottom-style="solid" >
        <fo:table-column column-width=".5in"/><!-- Learning Item Number
-->
        <fo:table-column column-width="1in"/><!-- Total Responses -->
        <fo:table-column column-width="1in"/><!-- Total Correct -->
        <fo:table-column column-width="1in"/><!-- Total Correct Percent
(of Total Responses) -->
        <fo:table-column column-width="1in"/><!-- Total Errors -->
        <fo:table-column column-width="1in"/><!-- Total Incorrect
Percent (of Total Responses) -->
        <fo:table-header>
          <fo:table-row>
            <fo:table-cell ><fo:block text-align="right">Item
Num</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">Responses</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">Correct</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block text-align="right">%
Correct</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">Errors</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block text-align="right">%
Errors</fo:block></fo:table-cell>
          </fo:table-row>
        </fo:table-header>
        <fo:table-body>
          <fo:table-row><!-- SEPARATOR ROW -->
            <fo:table-cell  number-columns-spanned="6"><fo:block
text-align="left">Group of Rows #1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">1</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">2</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">3</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">4</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row><!-- SEPARATOR ROW -->
            <fo:table-cell  number-columns-spanned="6"><fo:block
text-align="left">Group of Rows #2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">1</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">2</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">3</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
          <fo:table-row>
            <fo:table-cell ><fo:block
text-align="right">4</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">A</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">B</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">C</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">D</fo:block></fo:table-cell>
            <fo:table-cell ><fo:block
text-align="right">E</fo:block></fo:table-cell>
          </fo:table-row>
        </fo:table-body>
      </fo:table>
      <!-- table end -->

    </fo:flow>
  </fo:page-sequence>

</fo:root>
<!-- END OF FO FILE -->


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Andreas L Delmelle
> -----Original Message-----
> From: Richard Mixon (qwest) [mailto:[hidden email]]
>

Hi,

> I am having trouble getting a cell to span multiple columns. I have
> looked at the examples and read/re-read the specs, but no joy. Any help
> is appreciated - I have seen several posts affirming that this feature
> is supported, so its obviously a "user error". Any help is appreciated.

AFAICT, there is nothing inherently wrong with your FO input and it should
work...
Since I no longer have FOP 0.20.5 set up here, I tried running it through
the most recent development code, and I did receive a
ValidationException --you won't get these in 0.20.5-- because the
fo:region-body is defined after the fo:region-before.
Having modified that, there was no problem whatsoever. The cells in question
do span six full columns...
Can you try if moving the fo:region-body definition a few lines up solves
your problem?


Greetz,

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Andreas L Delmelle
> -----Original Message-----
> From: Andreas L. Delmelle [mailto:[hidden email]]
> > -----Original Message-----
> > From: Richard Mixon (qwest) [mailto:[hidden email]]
>
> > I am having trouble getting a cell to span multiple columns. I have
> > looked at the examples and read/re-read the specs, but no joy. Any help
> > is appreciated - I have seen several posts affirming that this feature
> > is supported, so its obviously a "user error". Any help is appreciated.
>
<snip />
> Can you try if moving the fo:region-body definition a few lines up solves
> your problem?
>

Nope, just tried with both FOP versions, and your FO code should definitely
work... What version is it that you're using?


Sorry,

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Having trouble getting number-columns-spanned to work

Mike Trotman
In reply to this post by Richard M
Your FO code works correctly in my version fo FOP 0.20.5 - the separator
rows span 6 columns.

I used the commandline:
fop.sh -fo span.fo -pdf span.pdf.

As you have a variable for your report header - this suggests to me that
you are doing other processing before you actually produce final output?

I use tables and spanning rows / columns almost every day - and have
never hit any problems with FOP 0.20.5.
*There are other problems with tables - but not with cols/rows spanned.)

I've always downloaded the binary installations - so have never built
FOP from source.
I use it on  RedHat 7.3 and  Fedora Core 2


Below is the output if I use 'fop.sh -fo span.fo -txt span.txt'
What do you get on your system?





                                                                                                                                                       
${report.headerLeft[0]}



       
---Item----Responses------------Correct-------%--Correct-----------Errors--------%--Errors-
          Num

        Group   of Rows    #1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1
               1               A                B              
C                D               E

               2               A                B              
C                D               E
               3               A                B              
C                D               E

               4               A                B              
C                D               E
        Group   of Rows    #2,  2, 2, 2, 2, 2, 2, 2, 2, 2, 2

               1               A                B              
C                D               E
               2               A                B              
C                D               E

               3               A                B              
C                D               E
               4               A                B              
C                D               E

       
-------------------------------------------------------------------------------------------|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
       
|                                                                                          
|
                                                                                                 



Richard Mixon (qwest) wrote:

>I am having trouble getting a cell to span multiple columns. I have
>looked at the examples and read/re-read the specs, but no joy. Any help
>is appreciated - I have seen several posts affirming that this feature
>is supported, so its obviously a "user error". Any help is appreciated.
>
>BTW, unti this I have really been breezing along in FO/FOP doing my
>first database report (have been using FOP to convert SVG to PDF for a
>couple of years). Its great.
>
>Anyway, below is my FO file. The problem is that my separator row,
>marked with "<!-- SEPARATOR ROW -->" ends up wrapped in the first narrow
>column (.5 inch) instead of spanning all six columns.
>
>Again thanks in advance for any help - Richard
>
><!-- START OF FO FILE -->
><?xml version="1.0" encoding="utf-8"?>
>
><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
>
>  <!-- defines the layout master -->
>  <fo:layout-master-set>
>    <fo:simple-page-master
>        master-name="report1"
>        page-height="8.5in"
>        page-width="11in"
>        margin-top=".5in"
>        margin-bottom=".5in"
>        margin-left=".5in"
>        margin-right=".5in">
>      <fo:region-before extent=".5in"/>
>      <fo:region-after extent=".5in"/>
>      <fo:region-body margin-top=".5in" margin-bottom=".5in"/><!-- This
>leaves about 9in for text -->
>    </fo:simple-page-master>
>  </fo:layout-master-set>
>
>  <!-- starts actual layout -->
>
>  <fo:page-sequence master-reference="report1">
>    <fo:static-content flow-name="xsl-region-before">
>      <fo:block line-height="14pt" font-size="10pt"
>        text-align="end">${report.headerLeft[0]}</fo:block>
>    </fo:static-content>
>    <fo:static-content flow-name="xsl-region-after">
>      <fo:block line-height="14pt" font-size="10pt"
>        text-align="end">Page
>        <fo:page-number/>
>      </fo:block>
>    </fo:static-content>
>
>    <fo:flow flow-name="xsl-region-body">
>    
>
>      <!-- table start -->
>      <fo:table table-layout="fixed" border-collapse="separate"
>          border-left-color="black" border-left-width="0.5pt"
>border-left-style="solid"
>          border-right-color="black" border-right-width="0.5pt"
>border-right-style="solid"
>          border-top-color="black" border-top-width="0.5pt"
>border-top-style="solid"
>          border-bottom-color="black" border-bottom-width="0.5pt"
>border-bottom-style="solid" >
>        <fo:table-column column-width=".5in"/><!-- Learning Item Number
>-->
>        <fo:table-column column-width="1in"/><!-- Total Responses -->
>        <fo:table-column column-width="1in"/><!-- Total Correct -->
>        <fo:table-column column-width="1in"/><!-- Total Correct Percent
>(of Total Responses) -->
>        <fo:table-column column-width="1in"/><!-- Total Errors -->
>        <fo:table-column column-width="1in"/><!-- Total Incorrect
>Percent (of Total Responses) -->
>        <fo:table-header>
>          <fo:table-row>
>            <fo:table-cell ><fo:block text-align="right">Item
>Num</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">Responses</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">Correct</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block text-align="right">%
>Correct</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">Errors</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block text-align="right">%
>Errors</fo:block></fo:table-cell>
>          </fo:table-row>
>        </fo:table-header>
>        <fo:table-body>
>          <fo:table-row><!-- SEPARATOR ROW -->
>            <fo:table-cell  number-columns-spanned="6"><fo:block
>text-align="left">Group of Rows #1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
>1</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">1</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">2</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">3</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">4</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row><!-- SEPARATOR ROW -->
>            <fo:table-cell  number-columns-spanned="6"><fo:block
>text-align="left">Group of Rows #2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
>2</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">1</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">2</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">3</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>          <fo:table-row>
>            <fo:table-cell ><fo:block
>text-align="right">4</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">A</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">B</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">C</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">D</fo:block></fo:table-cell>
>            <fo:table-cell ><fo:block
>text-align="right">E</fo:block></fo:table-cell>
>          </fo:table-row>
>        </fo:table-body>
>      </fo:table>
>      <!-- table end -->
>
>    </fo:flow>
>  </fo:page-sequence>
>
></fo:root>
><!-- END OF FO FILE -->
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [hidden email]
>For additional commands, e-mail: [hidden email]
>
>  
>



--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.11.6 - Release Date: 06/05/2005


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Richard M
In reply to this post by Andreas L Delmelle
Andreas L. Delmelle wrote:

>> -----Original Message-----
>> From: Andreas L. Delmelle [mailto:[hidden email]]
>>> -----Original Message-----
>>> From: Richard Mixon (qwest) [mailto:[hidden email]]
>>
>>> I am having trouble getting a cell to span multiple columns. I have
>>> looked at the examples and read/re-read the specs, but no joy. Any
>>> help is appreciated - I have seen several posts affirming that this
>>> feature is supported, so its obviously a "user error". Any help is
>>> appreciated.
>>
> <snip />
>> Can you try if moving the fo:region-body definition a few lines up
>> solves your problem?
>>
>
> Nope, just tried with both FOP versions, and your FO code should
> definitely work... What version is it that you're using?
>
>
> Sorry,
> Andreas
Andreas,

Thank you for checking this out. Here's what this helped me determine:

1) Even after moving the fo:region-body up two lines it still does not
work. I am using a build of FOP from 2004/05/29. IIRC, I had to move to
this quite a while back for JDK reasons.

2) Yes, if I run this against FOP 0.20.5 it works fine. My table borders
also work fine.

So, its either my version of FOP or it could be the way I am setting FOP
up in my servlet that does the PDF processing.

Before trying to build a new version of FOP CVS HEAD (I believe I tried
recently and had problems with Sun JDK 1.5 sp1) can anyone see problems
in my servlet code? Below are the relevant parts.

I have also attached the PDF I get as output - but I am not sure if it
will make it through the list processing, even though its tiny.

Thank you once again - Richard


<!-- BEGIN FROM servlet ini method, run once at startup -->
        logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
        transFactory = TransformerFactory.newInstance();
        imageURLProtocol = getInitParameter("imageURLProtocol");
        String httpBaseDir = ".";
        String baseDir =
this.getServletContext().getRealPath(httpBaseDir);
        userAgent = new FOUserAgent();
        userAgent.setBaseURL(imageURLProtocol+baseDir);
<!-- END   FROM servlet ini method, run once at startup -->

<!-- BEGIN FROM servlet doGet method, run once per file I process -->
        String contentFO = (String)session.getAttribute(attrName);
        String title;
        String wrappedContent = contentFO.trim();

        StringReader sr = new StringReader( wrappedContent );
        Source inSrc = new StreamSource(sr);
        String pdfOutName = null;
        FileOutputStream pdfOut = null;

        try {
            Transformer transformer = transFactory.newTransformer();
            pdfOutName =
FileUtil.getUserOutputFileName(null,".pdf",request);
            File tempDir =
(File)request.getSession().getServletContext().getAttribute("javax.servl
et.context.tempdir");
            File pdfOutFile = new File(
tempDir.getPath()+File.separator+pdfOutName );
            pdfOutFile.createNewFile();
            pdfOut = new FileOutputStream( pdfOutFile );
            Driver driver = new Driver();
            driver.setRenderer(Driver.RENDER_PDF);
            driver.setUserAgent(userAgent);
            driver.initialize();
            driver.setOutputStream(pdfOut);

            //Make sure the XSL transformation's result is piped through
to FOP
            Result res = new SAXResult(driver.getContentHandler());

            //Start the transformation and rendering process
            transformer.transform(inSrc, res);
            driver.reset();
            pdfOut.flush();
            pdfOut.close();
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new ServletException(ex);
        } finally {
            File pdfFile = new File( pdfOutName );
        }
<!-- END   FROM servlet doGet method, run once per file I process -->

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

lir.pdf (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Richard M
In reply to this post by Mike Trotman
Mike Trotman wrote:

> Your FO code works correctly in my version fo FOP 0.20.5 - the
> separator rows span 6 columns.
>
> I used the commandline:
> fop.sh -fo span.fo -pdf span.pdf.
>
> As you have a variable for your report header - this suggests to me
> that you are doing other processing before you actually produce final
> output?  
>
> I use tables and spanning rows / columns almost every day - and have
> never hit any problems with FOP 0.20.5. *There are other problems
> with tables - but not with cols/rows spanned.)
>
> I've always downloaded the binary installations - so have never built
> FOP from source.
> I use it on  RedHat 7.3 and  Fedora Core 2
>
>
> Below is the output if I use 'fop.sh -fo span.fo -txt span.txt'
> What do you get on your system?

Mike,

Thank you for checking this out. Basically I am using a 2004/05/29 build
of FOP and invoking it from a servlet using Tomcat 5.5.7 and Sun JDK 1.5
sp1. With with FOP 0.20.5 from the command line it works fine.

And yes, I am doing some processing using JSP/JSTL to generate the
documents. It is a database report. For problem resolution I tried to
reduce it to a simple FO document without the JSP/JSTL  - but obviously
missed a couple of statements. Thanks for noticing - however it still
processes fine with FOP 0.20.5.

If you know anything about invoking FOP from a servlet, could you take a
look at the code below and see if anything appears out of place?  I had
been using this to process SVG diagrams (wrapped with FO statements of
course) into PDF for quite a while with no problem. This is my first
attempt using a straight FO document - but did not believe it should be
a problem.

I have also attached the PDF I get as output - but I am not sure if it
will make it through the list processing, even though its tiny.

Thank you once again - Richard


<!-- BEGIN FROM servlet ini method, run once at startup -->
        logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
        transFactory = TransformerFactory.newInstance();
        imageURLProtocol = getInitParameter("imageURLProtocol");
        String httpBaseDir = ".";
        String baseDir =
this.getServletContext().getRealPath(httpBaseDir);
        userAgent = new FOUserAgent();
        userAgent.setBaseURL(imageURLProtocol+baseDir);
<!-- END   FROM servlet ini method, run once at startup -->

<!-- BEGIN FROM servlet doGet method, run once per file I process -->
        String contentFO = (String)session.getAttribute(attrName);
        String title;
        String wrappedContent = contentFO.trim();

        StringReader sr = new StringReader( wrappedContent );
        Source inSrc = new StreamSource(sr);
        String pdfOutName = null;
        FileOutputStream pdfOut = null;

        try {
            Transformer transformer = transFactory.newTransformer();
            pdfOutName =
FileUtil.getUserOutputFileName(null,".pdf",request);
            File tempDir =
(File)request.getSession().getServletContext().getAttribute("javax.servl
et.context.tempdir");
            File pdfOutFile = new File(
tempDir.getPath()+File.separator+pdfOutName );
            pdfOutFile.createNewFile();
            pdfOut = new FileOutputStream( pdfOutFile );
            Driver driver = new Driver();
            driver.setRenderer(Driver.RENDER_PDF);
            driver.setUserAgent(userAgent);
            driver.initialize();
            driver.setOutputStream(pdfOut);

            //Make sure the XSL transformation's result is piped through
to FOP
            Result res = new SAXResult(driver.getContentHandler());

            //Start the transformation and rendering process
            transformer.transform(inSrc, res);
            driver.reset();
            pdfOut.flush();
            pdfOut.close();
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new ServletException(ex);
        } finally {
            File pdfFile = new File( pdfOutName );
        }
<!-- END   FROM servlet doGet method, run once per file I process -->
<SNIP>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

lir.pdf (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Having trouble getting number-columns-spanned to work

Mike Trotman
In reply to this post by Richard M
Hi Richard.

I use the servlet supplied with FOP (in
<fopdir>/examples/servlet/build/fop.war) and it works fine.
I'm afraid my Java familiarity is very basic - so can't comment on your
code.

I use Apache 1.3.27 and Tomcat 5.0.28 and jdk_1_5_0_2

If you are processing an FO file that works fine under FOP 0.20.5 are
you doing anything in your code that would strip attributes off your
<fo:table-cell>?
(as your example has no attributes on any other table-cells - and the
produced PDF is what you would get if the 'spanned' attributes were not
present)

Richard Mixon (qwest) wrote:

>Mike Trotman wrote:
>  
>
>>Your FO code works correctly in my version fo FOP 0.20.5 - the
>>separator rows span 6 columns.
>>
>>I used the commandline:
>>fop.sh -fo span.fo -pdf span.pdf.
>>
>>As you have a variable for your report header - this suggests to me
>>that you are doing other processing before you actually produce final
>>output?  
>>
>>I use tables and spanning rows / columns almost every day - and have
>>never hit any problems with FOP 0.20.5. *There are other problems
>>with tables - but not with cols/rows spanned.)
>>
>>I've always downloaded the binary installations - so have never built
>>FOP from source.
>>I use it on  RedHat 7.3 and  Fedora Core 2
>>
>>
>>Below is the output if I use 'fop.sh -fo span.fo -txt span.txt'
>>What do you get on your system?
>>    
>>
>
>
>Mike,
>
>Thank you for checking this out. Basically I am using a 2004/05/29 build
>of FOP and invoking it from a servlet using Tomcat 5.5.7 and Sun JDK 1.5
>sp1. With with FOP 0.20.5 from the command line it works fine.
>
>And yes, I am doing some processing using JSP/JSTL to generate the
>documents. It is a database report. For problem resolution I tried to
>reduce it to a simple FO document without the JSP/JSTL  - but obviously
>missed a couple of statements. Thanks for noticing - however it still
>processes fine with FOP 0.20.5.
>
>If you know anything about invoking FOP from a servlet, could you take a
>look at the code below and see if anything appears out of place?  I had
>been using this to process SVG diagrams (wrapped with FO statements of
>course) into PDF for quite a while with no problem. This is my first
>attempt using a straight FO document - but did not believe it should be
>a problem.
>
>I have also attached the PDF I get as output - but I am not sure if it
>will make it through the list processing, even though its tiny.
>
>Thank you once again - Richard
>
>
><!-- BEGIN FROM servlet ini method, run once at startup -->
>        logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
>        transFactory = TransformerFactory.newInstance();
>        imageURLProtocol = getInitParameter("imageURLProtocol");
>        String httpBaseDir = ".";
>        String baseDir =
>this.getServletContext().getRealPath(httpBaseDir);
>        userAgent = new FOUserAgent();
>        userAgent.setBaseURL(imageURLProtocol+baseDir);
><!-- END   FROM servlet ini method, run once at startup -->
>
><!-- BEGIN FROM servlet doGet method, run once per file I process -->
>        String contentFO = (String)session.getAttribute(attrName);
>        String title;
>        String wrappedContent = contentFO.trim();
>
>        StringReader sr = new StringReader( wrappedContent );
>        Source inSrc = new StreamSource(sr);
>        String pdfOutName = null;
>        FileOutputStream pdfOut = null;
>
>        try {
>            Transformer transformer = transFactory.newTransformer();
>            pdfOutName =
>FileUtil.getUserOutputFileName(null,".pdf",request);
>            File tempDir =
>(File)request.getSession().getServletContext().getAttribute("javax.servl
>et.context.tempdir");
>            File pdfOutFile = new File(
>tempDir.getPath()+File.separator+pdfOutName );
>            pdfOutFile.createNewFile();
>            pdfOut = new FileOutputStream( pdfOutFile );
>            Driver driver = new Driver();
>            driver.setRenderer(Driver.RENDER_PDF);
>            driver.setUserAgent(userAgent);
>            driver.initialize();
>            driver.setOutputStream(pdfOut);
>
>            //Make sure the XSL transformation's result is piped through
>to FOP
>            Result res = new SAXResult(driver.getContentHandler());
>
>            //Start the transformation and rendering process
>            transformer.transform(inSrc, res);
>            driver.reset();
>            pdfOut.flush();
>            pdfOut.close();
>        } catch (Exception ex) {
>            ex.printStackTrace();
>            throw new ServletException(ex);
>        } finally {
>            File pdfFile = new File( pdfOutName );
>        }
><!-- END   FROM servlet doGet method, run once per file I process -->
><SNIP>
>  
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [hidden email]
>For additional commands, e-mail: [hidden email]
>



--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.11.6 - Release Date: 06/05/2005


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Andreas L Delmelle
In reply to this post by Richard M
> -----Original Message-----
> From: Richard Mixon (qwest) [mailto:[hidden email]]
>

Hi Richard,

<snip />
> Thank you for checking this out. Here's what this helped me determine:
>
> 1) Even after moving the fo:region-body up two lines it still does not
> work. I am using a build of FOP from 2004/05/29. IIRC, I had to move to
> this quite a while back for JDK reasons.

So you are using a version checked out of CVS (with tag HEAD)? In that case,
I'm quite sure column-span was not yet implemented in May last year, so
there could be your problem...

> Before trying to build a new version of FOP CVS HEAD (I believe I tried
> recently and had problems with Sun JDK 1.5 sp1) can anyone see problems
> in my servlet code? Below are the relevant parts.

Either switch back to the maintenance version --0.20.5-- or you will need a
new build --AFAIK the current development version should compile without
problem--, and with the new build also some modifications to your code, as
for instance the Driver object has disappeared in the meantime...

Just give us a yell if something still remains unclear.


Greetz,

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Richard M
Andreas L. Delmelle wrote:

>> -----Original Message-----
>> From: Richard Mixon (qwest) [mailto:[hidden email]]
>>
>
> Hi Richard,
>
> <snip />
>> Thank you for checking this out. Here's what this helped me
>> determine:
>>
>> 1) Even after moving the fo:region-body up two lines it still does
>> not work. I am using a build of FOP from 2004/05/29. IIRC, I had to
>> move to this quite a while back for JDK reasons.
>
> So you are using a version checked out of CVS (with tag HEAD)? In
> that case, I'm quite sure column-span was not yet implemented in May
> last year, so there could be your problem...  
>
>> Before trying to build a new version of FOP CVS HEAD (I believe I
>> tried recently and had problems with Sun JDK 1.5 sp1) can anyone see
>> problems in my servlet code? Below are the relevant parts.
>
> Either switch back to the maintenance version --0.20.5-- or you will
> need a new build --AFAIK the current development version should
> compile without problem--, and with the new build also some
> modifications to your code, as for instance the Driver object has
> disappeared in the meantime...    
>
> Just give us a yell if something still remains unclear.

Andreas - thanks, that explains a bunch. Last year I updated to a more
recent build from the HEAD (2004-05-29) because of a problem I was
having with a hyphenation problem that caused a spin loop.

When I tried to upgrade to a more recent version I ran into a problem of
not understanding how to achieve what I was achieving with the following
code:

  imageURLProtocol = getInitParameter("imageURLProtocol");
  String httpBaseDir = ".";
  String baseDir = this.getServletContext().getRealPath(httpBaseDir);
  userAgent = new FOUserAgent();
  userAgent.setBaseURL(imageURLProtocol+baseDir);
  ...
  Driver driver = new Driver();
  driver.setRenderer(Driver.RENDER_PDF);
  driver.setUserAgent(userAgent);
  driver.initialize();

Basically I need to set the base directory of where I output my PDF
files to.

AnywayI have looked at the new FOPServlet and understand it. And have
looked through many postings, the code and doc - but do not have a clue.
The new FOP API does things differently, it uses some standard Java XML
functions to create a "source" from a file. Maybe I just do not
understand the Java XML API well enough.

Can you give me a little guidance here?

Thank you once again.

 - Richard


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Andreas L Delmelle
In reply to this post by Richard M
> -----Original Message-----
> From: Richard Mixon (qwest) [mailto:[hidden email]]
>

Hi,

> When I tried to upgrade to a more recent version I ran into a problem of
> not understanding how to achieve what I was achieving with the following
> code:
>
>   imageURLProtocol = getInitParameter("imageURLProtocol");
>   String httpBaseDir = ".";
>   String baseDir = this.getServletContext().getRealPath(httpBaseDir);
>   userAgent = new FOUserAgent();
>   userAgent.setBaseURL(imageURLProtocol+baseDir);

Well, AFAICT, this should remain the same...

>   ...
>   Driver driver = new Driver();
>   driver.setRenderer(Driver.RENDER_PDF);
>   driver.setUserAgent(userAgent);
>   driver.initialize();

But, IIC, this needs to become

import org.apache.fop.apps.Fop;
...
Fop fop = new Fop(Fop.RENDER_PDF, userAgent);
...
Result res = new SAXResult(Fop.getDefaultHandler());
...

HTH!

Greetz,

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Richard M
Andreas L. Delmelle wrote:

>> -----Original Message-----
>> From: Richard Mixon (qwest) [mailto:[hidden email]]
>>
>
> Hi,
>
>> When I tried to upgrade to a more recent version I ran into a problem
>> of not understanding how to achieve what I was achieving with the
>> following code:
>>
>>   imageURLProtocol = getInitParameter("imageURLProtocol");   String
>>   httpBaseDir = "."; String baseDir =
>>   this.getServletContext().getRealPath(httpBaseDir); userAgent = new
>>   FOUserAgent(); userAgent.setBaseURL(imageURLProtocol+baseDir);
>
> Well, AFAICT, this should remain the same...
>
>>   ...
>>   Driver driver = new Driver();
>>   driver.setRenderer(Driver.RENDER_PDF);
>>   driver.setUserAgent(userAgent);
>>   driver.initialize();
>
> But, IIC, this needs to become
>
> import org.apache.fop.apps.Fop;
> ...
> Fop fop = new Fop(Fop.RENDER_PDF, userAgent); ...
> Result res = new SAXResult(Fop.getDefaultHandler());
> ...

Thank you! That worked great. Just one more question. Are there any
recommendations on how to minimize resource use. I know at one point in
the earlier API, it was recommended to create the Driver once and do a
driver.reset() each request. I notice that the transformer object has a
"reset()" method. Would it save much to create the transformer in my
servlet's "init" method and just do a transformer.reset() at the top of
the doGet for each file I process?

Thank you once again for awesome support - Richard



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Andreas L Delmelle
In reply to this post by Richard M
> -----Original Message-----
> From: Richard Mixon (qwest) [mailto:[hidden email]]
>

Hi Richard,

> Thank you! That worked great. Just one more question. Are there any
> recommendations on how to minimize resource use. I know at one point in
> the earlier API, it was recommended to create the Driver once and do a
> driver.reset() each request.

Hmm... Yes, but if I got it correctly, that seemed no concern in your code,
as the Driver was being created in your doGet() anyway. (In a way, that
reset() there does no more than reset the Driver before throwing it away...)

Anyway, I'm not sure why that functionality was removed. Maybe someone else
can fill you in here?

> I notice that the transformer object has a "reset()" method.
> Would it save much to create the transformer in my
> servlet's "init" method and just do a transformer.reset()
> at the top of the doGet for each file I process?

Much? Well, you seem to be creating only identity Transformers... I'm not
sure, but it may have rather tricky consequences if multiple calls to
doGet() make use of --and possibly reset-- the very same Transformer
instance... (if running multithreaded, this probably won't work without
synchronization)


Greetz,

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Having trouble getting number-columns-spanned to work

J.Pietschmann
In reply to this post by Richard M
Richard Mixon (qwest) wrote:
> I know at one point in
> the earlier API, it was recommended to create the Driver once and do a
> driver.reset() each request.

Because the rendering methods are synchronized, using a single Driver
object will serialize requests. In some sense this will conserve
ressources, but it will be bad for answer times in high load situations,
especially on multi-processor machines.

Keeping a Driver object will also lock some classes in memory which
are expensive to load. Well, if PDFs aren't generated often, compared
to other requests, preventing classes from being garbage collected is
not exactly a resource conservation, but it is certainly good for the
latency of the PDF generation.

> I notice that the transformer object has a
> "reset()" method. Would it save much to create the transformer in my
> servlet's "init" method and just do a transformer.reset() at the top of
> the doGet for each file I process?

I wouldn't consider this a good idea. But then, it might fit your use
case. You'll probably need a representative usage profile in order to
make an informed decision.

J.Pietschmann

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Having trouble getting number-columns-spanned to work

gmazza
In reply to this post by Andreas L Delmelle
Andreas L. Delmelle wrote:

>>-----Original Message-----
>>From: Richard Mixon (qwest) [mailto:[hidden email]]
>>
>>    
>>
>
>Hi Richard,
>
>  
>
>>Thank you! That worked great. Just one more question. Are there any
>>recommendations on how to minimize resource use. I know at one point in
>>the earlier API, it was recommended to create the Driver once and do a
>>driver.reset() each request.
>>    
>>
>
>Hmm... Yes, but if I got it correctly, that seemed no concern in your code,
>as the Driver was being created in your doGet() anyway. (In a way, that
>reset() there does no more than reset the Driver before throwing it away...)
>
>Anyway, I'm not sure why that functionality was removed. Maybe someone else
>can fill you in here?
>
>  
>

Sure, Driver.reset() was removed in 1.0 because Driver itself was
removed, and the 1.0 API equivalent, the Fop class, has no need for it.  
0.20.5 and 1.0 are completely different products, and 1.0 has many
modernizations/optimizations already built-in.

Glen


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

RE: Having trouble getting number-columns-spanned to work

Richard M
Glen Mazza wrote:
> Andreas L. Delmelle wrote:
>
>>> -----Original Message-----
>>> From: Richard Mixon (qwest) [mailto:[hidden email]]
<SNIP>

>> Anyway, I'm not sure why that functionality was removed. Maybe
>> someone else can fill you in here?
>>
>>
>>
>
> Sure, Driver.reset() was removed in 1.0 because Driver itself was
> removed, and the 1.0 API equivalent, the Fop class, has no need for
> it.  
> 0.20.5 and 1.0 are completely different products, and 1.0 has many
> modernizations/optimizations already built-in.
>
> Glen

Glen,

Thanks for the explanation. So, what I hear is that in most situations,
the Fop class is light weight enough that there is not need to worry
about creating a new one for each document request we receive. If I
notice any bottlenecks in the future, I can always profile and report
back.

Thanks so much to both Andreas and you for the help.

 - Richard





---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Having trouble getting number-columns-spanned to work

gmazza
In reply to this post by Richard M
Richard Mixon (qwest) schrieb:

>Glen Mazza wrote:
>  
>
>>Andreas L. Delmelle wrote:
>>
>>    
>>
>>>>-----Original Message-----
>>>>From: Richard Mixon (qwest) [mailto:[hidden email]]
>>>>        
>>>>
><SNIP>
>  
>
>>>Anyway, I'm not sure why that functionality was removed. Maybe
>>>someone else can fill you in here?
>>>
>>>
>>>
>>>      
>>>
>>Sure, Driver.reset() was removed in 1.0 because Driver itself was
>>removed, and the 1.0 API equivalent, the Fop class, has no need for
>>it.  
>>0.20.5 and 1.0 are completely different products, and 1.0 has many
>>modernizations/optimizations already built-in.
>>
>>Glen
>>    
>>
>
>Glen,
>
>Thanks for the explanation. So, what I hear is that in most situations,
>the Fop class is light weight enough that there is not need to worry
>about creating a new one for each document request we receive. If I
>notice any bottlenecks in the future, I can always profile and report
>back.
>
>Thanks so much to both Andreas and you for the help.
>
> - Richard
>
>  
>

Yes--it's hard to speed up Driver when it doesn't exist, and the Fop
class is all of 180 LOC.  The .reset() class was basically a placebo in
1.0 anyway (it may have done more in 0.20.5, however, I don't know)--it
just set your output stream to null, which you can do anyway.  (But if
it makes you feel better, we *can* add an empty .reset() method, as well
as empty .runFaster() and .makeReallyNicePDF() methods...  ;-)  The XSLT
process, as well as layout and document building, will remain 98%+ of
the story.  However, please profile and report should it turn out I/we
were in error with our assumptions--quite possible, as I'm hardly the
brightest light on this team.

Thanks,
Glen


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]