2012-02-18 136 views
5

Estoy generando "documento de Word" con un encabezado en la primera página como código HTML. <style> etiqueta contiene:Oficina HTML encabezado de Word

@page Section { 
    size:8.5in 11.0in; 
    margin: 0.7in 0.9in 0.7in 0.9in; 
    mso-header-margin: 0.0in; 
    mso-footer-margin: 0.0in; 
    mso-title-page: yes; 
    mso-first-header: fh1; 
    mso-paper-source: 0; 
} 
div.Section { 
    page: Section; 
} 

y <body>:

<div class="Section" style="font-family: Verdana, sans-serif;"> 
    <![if supportFields]> 
     <div style="mso-element:header" id="fh1"> 
      <p class="MsoHeader"> 
       header 
      </p> 
     </div> 
    <![endif]> 
</div> 

Se muestra el texto "cabecera", tanto en la cabecera y en el cuerpo principal del documento. Los recursos (http://techsynapse.blogspot.com/2007/03/generating-word-document-dynamically.html y http://www.pbdr.com/ostips/wordfoot.htm) He encontrado decir que no hay forma de evitar este efecto sin usar un archivo de encabezado adicional que es no es una opción para mi

Y ahí va mi pregunta: ¿Conoces algún problema para este problema? ¿Cómo puedo ocultar la aparición del encabezado en el documento principal pero dejarlo en su lugar en la parte superior de la página? Gracias de antemano por cualquier consejo.

Respuesta

7

Esto funcionó para mí:

<html 
xmlns:o='urn:schemas-microsoft-com:office:office' 
xmlns:w='urn:schemas-microsoft-com:office:word' 
xmlns='http://www.w3.org/TR/REC-html40'> 
<head><title></title> 

<!--[if gte mso 9]><xml> 
<w:WordDocument> 
    <w:View>Print</w:View> 
    <w:Zoom>90</w:Zoom> 
</w:WordDocument> 
</xml><![endif]--> 


<style> 
p.MsoFooter, li.MsoFooter, div.MsoFooter 
{ 
    margin:0in; 
    margin-bottom:.0001pt; 
    mso-pagination:widow-orphan; 
    tab-stops:center 3.0in right 6.0in; 
    font-size:12.0pt; 
} 
<style> 

<!-- /* Style Definitions */ 

@page Section1 
{ 
    size:8.5in 11.0in; 
    margin:1.0in 1.0in 1.0in 1.0in; 
    mso-header-margin:.5in; 
    mso-footer-margin:.5in; 
    mso-title-page:yes; 
    mso-header: h1; 
    mso-footer: f1; 
    mso-first-header: fh1; 
    mso-first-footer: ff1; 
    mso-paper-source:0; 
} 


div.Section1 
{ 
    page:Section1; 
} 

table#hrdftrtbl 
{ 
    margin:0in 0in 0in 900in; 
    width:1px; 
    height:1px; 
    overflow:hidden; 
} 
--> 
</style></head> 

<body lang=EN-US style='tab-interval:.5in'> 
<div class=Section1> 

<p> CONTENT </p> 

<br/> 
    <table id='hrdftrtbl' border='0' cellspacing='0' cellpadding='0'> 
    <tr><td> 

    <div style='mso-element:header' id=h1 > 
     <p class=MsoHeader ><p>&nbsp;HEADER-TITLE</p></p> 
    </div> 

    </td> 
    <td> 
    <div style='mso-element:footer' id=f1> 

     <p>&nbsp;FOOTER-TITLE</p> 
     <p class=MsoFooter> 
     <span style=mso-tab-count:2'></span> 
      Page <span style='mso-field-code: PAGE '><span style='mso-no-proof:yes'></span></span> of <span style='mso-field-code: NUMPAGES '></span> 
     </p> 

    </div> 



    <div style='mso-element:header' id=fh1> 

    <p class=MsoHeader><span lang=EN-US style='mso-ansi-language:EN-US'>&nbsp;FIRST-HEADER-TITLE<o:p></o:p></span></p> 

    </div> 

    <div style='mso-element:footer' id=ff1> 

    <p class=MsoFooter><span lang=EN-US style='mso-ansi-language:EN-US'>&nbsp;FIRST-FOOTER-TITLE<o:p></o:p></span></p> 

    </div> 

    </td></tr> 
    </table> 


</body></html> 
+0

Siempre muestra un espacio extra para mí. – Ryan

+1

No se puede generar la imagen en el encabezado del servidor, pero en el servidor local está funcionando bien. La ruta que se genera para la imagen también está bien en el servidor. ¿Puede decirme por favor qué es lo que me falta que en la imagen de localhost se está agregando al archivo de Word pero en el servidor no es así? ** Nota ** En la máquina local tengo ms-office instalado pero no en el servidor. –

+0

¿Cómo eliminar un espacio vacío en la sección del encabezado? Cuando lo veo en la palabra todo está bien, pero cuando se imprime, se agrega espacio vacío ... ¿Alguna idea? –

3

Para actualizar en respuesta anterior por vencedor y retire el extra de codificación de caracteres vacía añade a las imágenes de encabezado/pie de página/texto que puede hacer algo como esto:

<html 
xmlns:o='urn:schemas-microsoft-com:office:office' 
xmlns:w='urn:schemas-microsoft-com:office:word' 
xmlns='http://www.w3.org/TR/REC-html40'> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title></title> 

<!--[if gte mso 9]><xml> 
<w:WordDocument> 
    <w:View>Print</w:View> 
    <w:Zoom>100</w:Zoom> 
</w:WordDocument> 
</xml><![endif]--> 
<style> 
<!-- /* Style Definitions */ 
p.MsoHeader, li.MsoHeader, div.MsoHeader{ 
    margin:0in; 
    margin-top:.0001pt; 
    mso-pagination:widow-orphan; 
    tab-stops:center 3.0in right 6.0in; 
} 
p.MsoFooter, li.MsoFooter, div.MsoFooter{ 
    margin:0in 0in 1in 0in; 
    margin-bottom:.0001pt; 
    mso-pagination:widow-orphan; 
    tab-stops:center 3.0in right 6.0in; 
} 
.footer { 
    font-size: 9pt; 
} 
@page Section1{ 
    size:8.5in 11.0in; 
    margin:0.5in 0.5in 0.5in 0.5in; 
    mso-header-margin:0.5in; 
    mso-header:h1; 
    mso-footer:f1; 
    mso-footer-margin:0.5in; 
    mso-paper-source:0; 
} 
div.Section1{ 
    page:Section1; 
} 
table#hrdftrtbl{ 
    margin:0in 0in 0in 9in; 
} 
--> 
</style> 
<style type="text/css" media="screen,print"> 
body { 
    font-family: "Calibri", "Verdana","HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; 
    font-size:12pt; 
} 
pageBreak { 
    clear:all; 
    page-break-before:always; 
    mso-special-character:line-break; 
} 
</style> 
</head> 
<body style='tab-interval:.5in'> 
<div class="Section1"> 

Something page 1 
<div class="pageBreak"></div> 
Something page 2 
<div class="pageBreak"></div> 

<table id='hrdftrtbl' border='1' cellspacing='0' cellpadding='0'> 
     <tr> 
      <td> 
       <div style='mso-element:header' id="h1" > 
        <p class="MsoHeader"> 
         <table border="0" width="100%"> 
          <tr> 
           <td> 

            YOUR_HEADER IMAGE/TEXT 

           </td> 
          </tr> 
         </table> 
        </p> 
       </div> 
      </td> 
      <td> 
      <div style='mso-element:footer' id="f1"> 
       <p class="MsoFooter"> 
        <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
         <tr> 
          <td align="center" class="footer"> 
          YOUR_FOOTER_TEXT 
           <g:message code="offer.letter.page.label"/> <span style='mso-field-code: PAGE '></span> of <span style='mso-field-code: NUMPAGES '></span> 
          </td> 
         </tr> 
        </table> 
       </p> 
      </div> 
     </td> 
    </tr> 
    </table> 
    </div> 
</body> 
</html> 

Esto ahora incluye componentes css completos para segmentos de encabezado y pie de página.

El truco que realmente elimina la codificación adicional es declarar otra tabla más en las secciones MsoFooter y MsoHeader.

+0

¡Muy útil, gracias! ¿Sabe si hay alguna propiedad que pueda permitir que el texto del cuerpo se superponga en la sección del encabezado? Como es ahora, el texto del cuerpo siempre va justo debajo de la última línea del encabezado. –

+1

Eche un vistazo aquí http://sebsauvage.net/wiki/doku.php?id=word_document_generation. Hemos terminado usando el modelo mhtml (en la parte inferior) y funciona perfectamente. El problema con este método actual es la tabla oculta que en nuestro caso creaba una página adicional cuando la última página estaba más allá de la mitad. – Vahid

+0

sí, ese es exactamente el tutorial que utilicé con éxito. Pero no logro que el texto se superponga al encabezado. Otra opción sería usar marca de agua en lugar de encabezado, pero eso implicaría convertir el encabezado html en una imagen y eso tampoco es fácil:/ Así que si tienes un truco para hacer que el texto del cuerpo comience en la parte superior de la página, incluso si hay un encabezado, sería genial :) –

Cuestiones relacionadas