thuliobuarque / java2word

Automatically exported from code.google.com/p/java2word
0 stars 0 forks source link

TAble in the template #93

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Leonardo,

I created a placeholder to insert a table in the document, but can not ...

String xmlTemplate = Utils.readFile("C:\\templates\\b.doc");
TableV2 TableV2 tbl = new ();
         tbl.addRow (TableRow.with ("Simple String cell," "Another String simple cell"));
         xmlTemplate replacePh = (xmlTemplate, "table", tbl.getContent ());
What's wrong? 

Please help me...

Original issue reported on code.google.com by paulo3...@gmail.com on 23 Apr 2012 at 5:48

Attachments:

GoogleCodeExporter commented 8 years ago
correction
xmlTemplate replacePh = (xmlTemplate, "tabela", tbl.getContent ());

Original comment by paulo3...@gmail.com on 23 Apr 2012 at 5:53

GoogleCodeExporter commented 8 years ago
I am looking at this for you...

Original comment by leonardo...@gmail.com on 24 Apr 2012 at 8:08

GoogleCodeExporter commented 8 years ago

there is something wrong with your template itself. I deleted everything 
between <w:body></w:body>

and the doc doesn't open.

Take a look at this example: 
http://code.google.com/p/java2word/source/browse/trunk/java2word/src/test/java/w
ord/w2004/template/TemplateTest.java

the first unit test, if you remove @Ignore, works perfectly. Maybe create a 
template with no style, very simple just to get started. 

The example works fine. It replaces all placeholders that are inside 
paragraphs. This is fine as I know.

I got the code of the table tbl.getContent() and pasted on an empty doc and 
works. So the table is fine. The template is not. 

1- Create a very simple template with no style, add one text and one 
placeholder: "phTabela"

2 - Make sure you can open the template without replacing anything using MS 
Word. 

3 - copy this healthy table code:

    <w:tbl> 
            <w:tblPr> 
                <w:tblW w:w="0" w:type="auto"/> 
                <w:tblBorders> 
                    <w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/> 
                    <w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/> 
                    <w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/> 
                    <w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/> 
                    <w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/> 
                    <w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="000000"/> 
                </w:tblBorders> 
                <w:tblLook w:val="00BF"/> 
            </w:tblPr> 
            <w:tblGrid> 
                <w:gridCol w:w="4258"/> 
                <w:gridCol w:w="4258"/> 
            </w:tblGrid> 
 <w:tr>
     <w:tc>
            <w:p wsp:rsidR="008979E8" wsp:rsidRDefault="00000000">

  <w:pPr>  <w:jc w:val="left"/> 

     <w:ind w:left="0"/>

     </w:pPr>

        <w:r>

            <w:t>Simple String cell</w:t>
        </w:r>
    </w:p>
      </w:tc>
     <w:tc>
            <w:p wsp:rsidR="008979E8" wsp:rsidRDefault="00000000">

  <w:pPr>  <w:jc w:val="left"/> 

     <w:ind w:left="0"/>

     </w:pPr>

        <w:r>

            <w:t>Another String simple cell</w:t>
        </w:r>
    </w:p>
      </w:tc>
  </w:tr>

    </w:tbl>

4 - open the template by using a text editor. 

5 - manually replace the placeholder with the table XML above.

6 - and save the file with another name. 

7 - then open the new file with MS Word.

This is just an exercise to understand how things happen behind the scenes. 

We get fancy later...don't worry.

cheers
Leonardo  

Original comment by leonardo...@gmail.com on 24 Apr 2012 at 8:49

GoogleCodeExporter commented 8 years ago
Leonardo,

Tbm sou brasileiro e vou escrever em português, pois meu inglês é 
péssimo... :D
Fiz o q vc falou mas não funciona... É o seguinte, fiz meu template usando o 
BrOffice Writer 3.2 e criei o template conforme vc demonstra. Criei um 
placeholder para a tabela chamado "phTabela" e no código java tentei inserir 
uma tabela usando tanto o TableV2 quanto o Table, mas não abre de forma alguma 
o .doc 
Aqui no trabalho só tenho o broffice, será se o problema está no broffice? 
Na minha casa tbm criei usando o Word mas tbm não funciona...Só falta 
resolver esse problema da tabela para eu finalizar uma demanda...

Obrigado!

Paulo

Original comment by paulo3...@gmail.com on 25 Apr 2012 at 10:56

GoogleCodeExporter commented 8 years ago
Nunca tentei com BR Office . Vc pode mandar seu template por email? 
eu posso dar mais uma olhada. Todos os meus examples sao baseados no MS office 
rodando em Mac. 

Manda tb um segundo documento salvo como XML 2003 em branco. Vou ver se o doc 
em branco consegue ser aberto e entao eu vou para o tmeplate real. 

Br Office foi descontinuado cara! mas se e isso que voce esta usando eu posso 
tentar resolver o problema. 
Nao da para garantir nada mas eu pelo menos vou tentar.

Abs 

Original comment by leonardo...@gmail.com on 26 Apr 2012 at 12:12

GoogleCodeExporter commented 8 years ago
Po.. não sabia q o BrOffice foi descontinuado.. :D
É pq no desktop aqui da empresa só tem Broffice... Mas daí baixei o 
OpenOffice 3.3 e gerei 2 templates...

E muito obrigado pela resposta!
Abs...

Original comment by paulo3...@gmail.com on 27 Apr 2012 at 4:36

Attachments:

GoogleCodeExporter commented 8 years ago
vlw, vou dar uma olhada qdo eu chegar em casa mais tarde. Ads

Original comment by leonardo...@gmail.com on 30 Apr 2012 at 12:11

GoogleCodeExporter commented 8 years ago
dentro de "w:t" vc so pode ter texto:

http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.te
xt.aspx

Ja se voce por o conteudo dentro de um "w:r", este pode receber varios outros 
elementos:

http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.ru
n.aspx (embaixo de "Remarks")

Ah mais uma coisa: Os "w:p" nao podem ter nada a nao ser: <w:p> e </w:p>

Qdo vc substituir o ph, substitui o <w:t> antes e depois o placeholder. Ex.:

xmlTemplate = replacePh(xmlTemplate, "<w:t>phTabela</w:t>", 
tbl.getContent().replace("<w:p*********>", "<w:p>") );

Tenta evitar < e > no nome do placeholder pq eles seram ecaped no XML e o 
replacement will not find them.

voce vai ter que escrever o regex para remover tudo dentro da tag <w:p xxx> e 
deixar-lo <w:p> vlw: replace( "wsp:rsidR=\"008979E8\" 
wsp:rsidRDefault=\"00000000\">, "<w:p>"

outra opcao e voce ir na marra na classe Paragraph linha 53 e temporariamente 
mudar o codigo fonte. Paragraph e usado dentro da tabela. 

Esse problema e so com open office e libre.

sei que e muita coisa mas isso vai te dar um entendimento do java2word leval. 

fiz uns testes aqui e consegui ter um template abrindo a tabela perfeitamente:

    @Test
    public void test93() {
        IDocument myDoc = new Document2004();
        String xmlTemplate = Utils.readFile("/home/leonardo/Desktop/template.doc");
        TableV2  tbl = new TableV2();
        tbl.addRow(TableRow.with("Simple String cell", "Another String simple cell"));

        xmlTemplate = replacePh(xmlTemplate, "<w:t><phTabela></w:t>", tbl.getContent());

        System.out.println(xmlTemplate.trim());

        TestUtils.createLocalDoc(xmlTemplate.trim());  
    }

Lembre-se: o codigo acima funcionou pq eu alterei a classe Paragrahp na marra. 
Se vc usar um regex para remover all that crap will work as well.

Vou ver depois o que tem que ser feito para resolver esse problema 
definitivamente.

abraco

Leonardo Correa

Original comment by leonardo...@gmail.com on 30 Apr 2012 at 9:57

GoogleCodeExporter commented 8 years ago
Tô aprendendo muito com essa API e está resolvendo alguns problemas aqui no 
trabalho! Vou implantar essa solução q vc falou...

Muito obrigado!

Abs,
Paulo

Original comment by paulo3...@gmail.com on 2 May 2012 at 2:04

GoogleCodeExporter commented 8 years ago
nao e perfeito mas se vc fizer o que te falei vai funcionar. To sem tempo para 
implementar a solucao cara. abs

Original comment by leonardo...@gmail.com on 2 May 2012 at 2:14