2012-02-18 13 views
5

Generuję "dokument programu Word" z nagłówkiem na pierwszej stronie jako kod HTML. <style> tag zawiera:Office HTML Nagłówek 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; 
} 

i <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> 

To pokazuje "nagłówka" tekst zarówno w nagłówku iw głównej części dokumentu. Zasoby (http://techsynapse.blogspot.com/2007/03/generating-word-document-dynamically.html i http://www.pbdr.com/ostips/wordfoot.htm) Stwierdziłem, że nie ma sposobu na uniknięcie tego efektu bez użycia dodatkowego pliku nagłówkowego, który jest nie jest dla mnie opcją.

I tu pojawia się moje pytanie: czy znasz jakieś obejście tego problemu? Jak ukryć występowanie nagłówka w dokumencie głównym, ale pozostawić go na miejscu u góry strony? Z góry dziękuję za wszelkie porady.

Odpowiedz

7

Ten pracował dla mnie:

<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

Zawsze wyświetla dodatkową przestrzeń dla mnie. – Ryan

+1

Nie można wygenerować obrazu w nagłówku z serwera, ale na localhost działa poprawnie. Ścieżka generowana dla obrazu jest również dobra na serwerze. Czy możesz mi powiedzieć, co mi brakuje, że na obrazie localhost jest dodawany do pliku tekstowego, ale na serwerze nie jest. ** Uwaga ** Na komputerze lokalnym mam zainstalowany ms-office, ale na serwerze nie. –

+0

Jak usunąć puste miejsce w sekcji nagłówka? Kiedy widzę to w słowie wszystko jest w porządku, ale po wydrukowaniu dodaje się puste miejsce ... jakieś pomysły? –

3

Aby zaktualizować na powyższej odpowiedzi przez Vencedor i usunąć dodatkowe kodowanie pusty znak dodany do obrazków nagłówka/stopki/tekstu można zrobić coś takiego:

<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> 

Zawiera teraz pełne komponenty css dla segmentów nagłówka i stopki.

Sztuczka, która faktycznie usuwa dodatkowe kodowanie, deklaruje kolejną tabelę w sekcjach MsoFooter i MsoHeader.

+0

Bardzo przydatne, dzięki! Czy wiesz, że istnieje jakaś właściwość, która może pozwolić na nakładanie się tekstu głównego w sekcji nagłówka? W tej chwili tekst główny zawsze znajduje się tuż poniżej ostatniego wiersza nagłówka. –

+1

Zobacz http://sebsauvage.net/wiki/doku.php?id=word_document_generation. Skończyło się na używaniu modelu mhtml (na samym dole) i działa idealnie. Problem z tą bieżącą metodą jest ukrytym stołem, który w naszym przypadku tworzył dodatkową stronę, gdy ostatnia strona była więcej niż w połowie. – Vahid

+0

Tak, to jest właśnie samouczek, którego z powodzeniem używałem. Ale nie udaje mi się, aby tekst nakładał się na nagłówek. Inną opcją byłoby użycie znaku wodnego zamiast nagłówka, ale to oznaczałoby konwersję html nagłówka na obraz i to nie jest łatwe:/ Więc jeśli masz sztuczkę, aby tekst ciała zaczął się u góry strony, nawet jeśli istnieje nagłówek, byłoby świetnie :) –

Powiązane problemy