[PHP]Rechts uitlijnen in RTF bestand werkt niet in Word 2003

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • amiga1260
  • Registratie: Juni 2003
  • Laatst online: 21-08 16:39
Ik ben bezig geweest om een brief samen te stellen en daara kan de gebruiker het in Word 2003 bewerken.

De klasse die gebruikt is heet class.rtf.php. Deze klasse RTF Generation PHP Class komt van de site phpclasses.org.

Het uitlijnen naar rechts lukt me niet in Word 2003, maar wel in Wordpad.

Een stuk code van de klasse class.rtf.php voor het uitlijnen van tekst:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    /**
     * Insert some text in the document
     *
      * @arg1   string
      * @arg2   keyword  (left|center|right|justify)
      * @return void
     *
      */
    function add_text($msg, $align = 'left')
    {
        /** FIX RITORNI A CAPO **/
        $msg = str_replace("\r", "", $msg);
        $msg = str_replace("\n", "", $msg);
    
        /** FIX LETTERE ACCENTATE **/
        $msg = str_replace("à", "\\'e0", $msg);
        $msg = str_replace("è", "\\'e8", $msg);
        $msg = str_replace("é", "\\'e9", $msg);
        $msg = str_replace("ì", "\\'ec", $msg);
        $msg = str_replace("ò", "\\'f2", $msg);
        $msg = str_replace("ù", "\\'f9", $msg);


        $this->align($align);
        $this->MyRTF .= "{ ";

        if (empty($this->TextDecoration))
        {
            $this->TextDecoration .= $this->_font($this->dfl_FontID);
            $this->TextDecoration .= $this->_font_size($this->dfl_FontSize);
        }

      $this->MyRTF .= $this->TextDecoration;
        $this->MyRTF .= $msg;   
        $this->MyRTF .= " } ";

        $this->TextDecoration = '';
    }


/**
     * Align text and images
     * (This is not intended to be used directly)
     *
     * @arg1        keyword  (left|center|right|justify)
      *
     */
    function align($where = 'left')
    {
        switch ( strtolower ($where) )
        {
            case 'left':        $this->MyRTF .= "\\ql ";    break;
            case 'center':      $this->MyRTF .= "\\qc ";    break;
            case 'right':       $this->MyRTF .= "\\qr ";    break;
            case 'justify':     $this->MyRTF .= "\\qj ";    break;
            default:            $this->align('left');       break;
        }
    }


Deze code wordt dan aangeroepen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
session_start();
$mijnnaam=$_SESSION["naam"];
$bedrijfsnaam=$_REQUEST["bedrijfsnaam"];
$voornaam=$_REQUEST["voornaam"];
$inits=$_REQUEST["inits"];
$tussenv=$_REQUEST["tussenv"];
$achternaam=$_REQUEST["achternaam"];
$mijnbedrijf=$_REQUEST["mijnbedrijf"];
$adres=$_REQUEST["adres"];
$postcode=$_REQUEST["postcode"];
$plaats=$_REQUEST["plaats"];
$geslacht=$_REQUEST["geslacht"];

$naam = "$inits $tussenv $achternaam";

function aanhef2Maken($geslacht,$achternaam)
{
    if($geslacht=="Man")
        {
            $titel="heer";
        }   
    if($geslacht=="Vrouw")
        {
            $titel="mevrouw";
        }
    if($geslacht=="Onbekend"|| $geslacht=="")
        {
            $titel="heer, mevrouw";
        }
    $aanhef2="Geachte $titel $achternaam,";
    return $aanhef2;
}

function aanhef1Maken($geslacht,$naam)
{
    if($geslacht=="Man")
        {
            $titel="T.a.v. De heer";
        }   
    if($geslacht=="Vrouw")
        {
            $titel="T.a.v. Mevrouw";
        }
    if($geslacht=="Onbekend"|| $geslacht=="")
        {
            $titel="T.a.v. De heer, mevrouw";
        }
    $aanhef1="$titel $naam";
    return $aanhef1;
}
$datumnu=date("d F Y");
$postplaats="$postcode  $plaats";
$plaatsdatum="'s-Hertogenbosch, $datumnu";
$aanhef1=aanhef1Maken($geslacht,$naam);
$aanhef2=aanhef2Maken($geslacht,$achternaam);
require("class.rtf.php");
    $RTF = new RTF();
    $RTF->set_default_font("Book Antiqua", 12);
    $RTF->add_text($bedrijfsnaam,'right');
    $RTF->new_line();
    $RTF->add_text($aanhef1,'right');
    $RTF->new_line();
    $RTF->add_text($adres,'right');
    $RTF->new_line();
    $RTF->add_text($postplaats,'right');
    $RTF->new_line(5);
    $RTF->add_text($plaatsdatum);
    $RTF->new_line(2);
    $RTF->add_text($RTF->bold(1)."Betreft:".$RTF->bold(0));
    $RTF->new_line(2);
    $RTF->add_text($aanhef2);
    $RTF->new_line(6);
    $RTF->add_text('Met vriendelijke groet,');
    $RTF->new_line(3);
    $RTF->add_text($mijnnaam);
    $RTF->new_line();
    $RTF->add_text($mijnbedrijf);
$RTF->display();

?>

[ Voor 0% gewijzigd door amiga1260 op 24-01-2007 13:51 . Reden: fout eruit gehaald ]


Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 15:47
Heb je de regelopbouw van het RTF bestand al gecontroleerd. (kan je zien wanneer je hem in een editor als kladblok opent. Waarschijnlijk kan je daar wel achterhalen wat er fout zit aan je regel.

Het volgende stukje RTF werkt gewoon, zo zou je opzet dus ongeveer moeten zijn:

code:
1
2
3
4
5
{\rtf1\ansi{\fonttbl\f0\Times New Roman;}\fo
\qc Test \par
\qr Test \par
\ql Test \par
}

[ Voor 33% gewijzigd door Wolf87 op 24-01-2007 16:47 ]


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

misschien moet je niet in de aanroep van de functie $align = left neerzetten:

PHP:
1
2
function add_text($msg, $align = 'left'){
}


maar

PHP:
1
2
function add_text($msg, $align){
}

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 15:47
YakuzA schreef op woensdag 24 januari 2007 @ 16:46:
misschien moet je niet in de aanroep van de functie $align = left neerzetten:

PHP:
1
2
function add_text($msg, $align = 'left'){
}


maar

PHP:
1
2
function add_text($msg, $align){
}
Nee, dat zou het niet moeten zijn. Zo gebruikt hij standaard linkse uitlijning. Wanneer hij iets anders toekent aan align wordt deze meegenomen.

Acties:
  • 0 Henk 'm!

  • amiga1260
  • Registratie: Juni 2003
  • Laatst online: 21-08 16:39
Het werkt wel in Wordpad, maar niet in Word 2003. Kan het zijn dat het uitlijncodes niet compatible zijn met Word?

Acties:
  • 0 Henk 'm!

  • LPEspecial
  • Registratie: September 2004
  • Laatst online: 15-07-2024
Lijkt me dat je mogelijk de '\par' op het einde van een 'te aligned' stuk mist. MS-Word is relatief kritisch met dat soort dingen.

Het zou het voor ons makkelijker maken als je een stuk gegenereerde RTF code zou laten zien.

LPEspecial


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

waarom poep je niet gewoon HTML uit en noem je dat .doc? Dat werkt echt als een trein voor alle office producten.

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • amiga1260
  • Registratie: Juni 2003
  • Laatst online: 21-08 16:39
Hier is de RTF bestand die gegenereerd wordt:


{\rtf1\ansi\deff0\deftab360
{\colortbl;
\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;
\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
\red192\green192\blue192;
}
{\fonttbl
{\f0\froman\fcharset0\fprq2 Times New Roman;}
{\f1\fswiss\fcharset0\fprq2 Arial;}
{\f2\fswiss\fcharset0\fprq2 Arial Black;}
{\f3\fswiss\fcharset0\fprq2 Verdana;}
{\f4\fswiss\fcharset0\fprq2 Tahoma;}
{\f5\fmodern\fcharset0\fprq2 Courier New;}
{\f6\froman\fcharset0\fprq2 Book Antiqua;}
{\f7\fswiss\fcharset0\fprq2 Arial Narrow;}
}
{

\qr { \f6 \fs24 Isaac } \line
\qr { \f6 \fs24 T.a.v. De heer M. Hoogendoorn } \line
\qr { \f6 \fs24 Moggendries 34 } \line
\qr { \f6 \fs24 5641 PN EINDHOVEN } \line
\line
\line
\line
\line
\ql { \f6 \fs24 's-Hertogenbosch, 25 januari 2007 } \line
\line
\ql { \f6 \fs24 \b Betreft: \b0 } \line
\line
\ql { \f6 \fs24 Geachte heer Hoogendoorn, } \line
\line
\line
\line
\line
\line
\ql { \f6 \fs24 Met vriendelijke groet, } \line
\line
\line
\ql { \f6 \fs24 Antony Mo } \line
\ql { \f6 \fs24 AC&C }
}
}

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 15:47
Het probleem zijn de \line opties dit moet \par zijn wil het werken in word ;)

vervang in de tekst je

$RTF->new_line();

voor

$RTF->paragraph();

nadat je zeg maar een paragraaf af hebt

en je probleem zou verholpen moeten zijn

zo dus":

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 $RTF->set_default_font("Book Antiqua", 12); 
    $RTF->add_text($bedrijfsnaam,'right'); 
    $RTF->new_line(); 
    $RTF->add_text($aanhef1,'right'); 
    $RTF->new_line(); 
    $RTF->add_text($adres,'right'); 
    $RTF->new_line(); 
    $RTF->add_text($postplaats,'right');
    $RTF->paragraph();
    $RTF->new_line(4); 
    $RTF->add_text($plaatsdatum); 
    $RTF->new_line(2); 
    $RTF->add_text($RTF->bold(1)."Betreft:".$RTF->bold(0)); 
    $RTF->new_line(2); 
    $RTF->add_text($aanhef2); 
    $RTF->new_line(6); 
    $RTF->add_text('Met vriendelijke groet,'); 
    $RTF->new_line(3); 
    $RTF->add_text($mijnnaam); 
    $RTF->new_line(); 
    $RTF->add_text($mijnbedrijf);

[ Voor 66% gewijzigd door Wolf87 op 26-01-2007 20:39 ]


Acties:
  • 0 Henk 'm!

  • amiga1260
  • Registratie: Juni 2003
  • Laatst online: 21-08 16:39
Bedankt Wolf87. Het werkt.
Pagina: 1