Avatar billede lsskaarup Nybegynder
16. april 2008 - 16:40 Der er 1 løsning

Åbne rtf fra php direkte til "moder"-programmet

Hej, jeg har spurgt om noget meget lig tidligere, men fik ikke rigtigt en brugbar løsning.

Håber det har ændret sig siden... :-)

Jeg har følgende php-fil, der får nogle data fra en DB, og opretter en rtf-fil, indeholdende dat.

<?php
    /* GENERATE ORDRE ELLER TILBUD ELLER KALKULATION */
    //tjek først om brugerne har sagt nej eller ja til at overskrive filen
    //Er der sagt nej, luk da vinduet uden at gøre andet
    if($ja || $_GET['ny'] == "1"){
   
    require('system/global_defs.php');

    include('static/opsaetning.php');
    include('static/afsnit1.php');
    include('static/afsnit3.php');
    include('static/afsnit5.php');
    include('static/afsnit8.php');
    include('static/afsnit9.php');
    include('static/udskrift.php');

    $sprog = $_GET['sprog'];

    //Til tjek af filtypen, ordre, tilbud el. blanket
    $diverse = $_GET['diverse'];
   

    echo $sql = "SELECT ".$_GET['type'].", rev FROM ".$_GET['type']." WHERE id = '".$_GET['id']."'";
    $res = mysql_query($sql) or die($sql);
    list($nr, $rev) = mysql_fetch_row($res);


    foreach ($OVERSAET as $val) {
        $array = & $$val['felt'];
        if (!is_array($array)) $array = array();
        $array = & $array[];
        $array['dansk'] = $val['dansk'];
        $array[$sprog] = $val[$sprog];
    }
   
    function findValue($felt, $tekst) {
        foreach ($felt as $val) {
            if ( strtolower($val['dansk']) == strtolower($tekst) ) {//For at sikre det er lige meget om brugeren skriver betegnelserne med stort et sted og lille et andet sted
                return $val[$_GET['sprog']];
            }
        }
   
    }

    $mappe1;
    $mappe2;
    if ($_GET['type'] == Tilbud || $_GET['type'] == tilbud) {//Tjekker hvilken type sagen er, tilbud/ordre
        //$num = substr("$root", -6);
        $mappe1 = substr($nr, -5, 1);
        $mappe2 = substr($nr, -4, 1);
        $ubermappe = substr($nr, -6, 2);
        $slutmappe;
        $startmappe = $mappe1 . $mappe2 . "000";

        $mapper = $mappe1 . $mappe2;

        if ($mapper > 9){
            $startmappe = $mappe2 . "000";
        } else {
            $startmappe = $mapper . "000";
        }
        if ($mappe1 == 0){
            $slutmappe = (($mappe2 +1) . "000") - 1;
            $startmappe = $mappe2 . "000";
        } else {
            $slutmappe = ((($mappe1 . $mappe2)+1) . "000" -1);
        }
        if ($slutmappe<"1000"){
            $mappenavn = $ubermappe . $startmappe ."-". $ubermappe . "0".$slutmappe;
        } else {
            if($slutmappe > 10000){
                $mappenavn = $ubermappe . $startmappe ."-". substr($ubermappe, -2, 1) . $slutmappe;
            } else {
                $mappenavn = $ubermappe . $startmappe ."-". $ubermappe . $slutmappe;
            }
        }
        //$mappenavn = $ubermappe . $startmappe ."-". $ubermappe . $slutmappe;
        //$mappenavn = $startmappe ."-". $slutmappe;
        $root = $type . "/". $mappenavn . "/" . $num;
    } else {

        $num = substr("$nr", -5);
        $mappe1 = substr($num, -4, 2);
        if ($mappe1 > 9) {
            $mappe2 = $mappe1+1;
        } else {
            $mappe1 = substr($num, -3, 1);
            $mappe2 = $mappe1 +1;
        }

        $ubermappe = substr($num, -6, 2);//retunere de 2 første cifre
        if ($mappe1 > 9){
            $mappe1 = substr($num, -3, 1);
            $mappe1 = $mappe1 . "00";

        } else {
            $mappe1 = $mappe1 . "00";
        }

        //Laver slutmappen
        $slutmappe1 = ((substr($num, -3, 1) + 1)."00") -1;
        if ($slutmappe1 < 100) {
            $slutmappe1 = "0". $slutmappe1;
        }

        $mappenavn = $ubermappe . $mappe1 . "-" . $ubermappe . $slutmappe1;
        $root = $type . "/" . $mappenavn . "/";
    }
//echo $slutmappe."<br>";
//echo $root."<br>";

    // Filename
    if (isset($_GET['print'])) {
        $file = "//$SERVER/$KATALOG/".$_GET['type']."/".$nr."/".$_GET['type'].$_GET['print'].$nr."R".$rev."-".$sprog.".rtf";
    } else {
        //Oprindelig
        //echo $file = "//$SERVER/$KATALOG/".$_GET['type']."/".$nr."/".$_GET['type'].$nr."R".$rev."-".$sprog.".rtf";
        $file = "//$SERVER/$KATALOG/".$root.$nr."/".$_GET['type'].$nr."R".$rev."-".$sprog.".rtf";
    }

    $file;

    // Fetch database values
    $res = array();
    for ($i=0;$i<=5;$i++) {
        $sql = mysql_query("
            SELECT *
            FROM ".$_GET['type'].$i."
                WHERE tilbudsnummer='".$_GET['id']."'
        ") or die(mysql_error);

        if (mysql_num_rows($sql)) $res = array_merge($res, mysql_fetch_assoc($sql));
    }

    // Indlæs manglende værdier - nulstiller hvis behov
    $res['rREV'] = $rev;

    // Felt r3 - tilbudsnummer
    $res['r3'] = $nr;
        // r527 - ordrenummer
        $res['r527'] = $nr;

    // Felt rCVR
    // Henter kundens cvrnr og betalingsbetingelser
    $sql = mysql_query("SELECT betal, cvr FROM kunde WHERE id = '".$res['kunde_hidden']."'") or die(mysql_error);
    if (mysql_num_rows($sql) == 1) list($res['r528'], $res['rCVR']) = mysql_fetch_row($sql);
    else {
        $res['r528'] = '';
        $res['rCVR'] = '';
    }

    // Felt r1email
    // Hent projektlederens emailadresse og direkte telefon
    $sql = mysql_query("SELECT email, companyphone FROM stamdata WHERE employee = '".$res['r1']."'") or die(mysql_error);
    if (mysql_num_rows($sql) == 1) list($res['r1email'], $res['r1tlf']) = mysql_fetch_row($sql);

    // Felt r1
    $res['r1'] = $PROJECTMANAGER[$res['r1']][navn];
    $res['r1navn'] = substr($res['r1'], 0, strpos($res['r1'], '('));
    $res['r1initialer'] = substr($res['r1'], strpos($res['r1'], '(')+1, 3);


    // Felt r538
    $res['r538'] = $TEGNER[$res['r538']][navn];
    $res['r538navn'] = substr($res['r538'], 0, strpos($res['r538'], '('));
    $res['r538initialer'] = substr($res['r538'], strpos($res['r538'], '(')+1, 3);

    // Fetch template
    echo $filnavn = 'template/template_'.$diverse.'_' . $sprog;
    if (isset($_GET['print'])) $filnavn .= "_" . $_GET['print'];   

    echo $tempfile = file($filnavn . '.rtf');

    foreach ($tempfile as $line) {
        $template .= rtrim($line);
    }

/*
    GAMMEL TABEL METODE
    $rows = explode("\\trowd", $template);
    for ($i = 0; $i < count($rows); $i++) {
        // Find det første felt i tabellen - feltet der angiver antal
        $startpos = strpos($rows[$i], "\\{\\{") +4 ;
        $checkpos = strpos($rows[$i], "cell ");
        //if ($checkpos === false) $checkpos = strpos($rows[$i], "\\row");
        if ($checkpos < $startpos) $startpos = 4;
        $slutpos = strpos($rows[$i], "\\}\\}");
        $felt = substr($rows[$i], $startpos, $slutpos-$startpos);
        if ($startpos == 4 || (is_numeric($res[$felt]) && $res[$felt]!=0 ) || (is_string($res[$felt]) && strlen($res[$felt])>0)) $content .= $rows[$i] . "\\trowd";
    }
    $content = substr($content, 0, strlen($content)-6);
    GAMMEL TABEL METODE SLUT
*/   

    $rows = explode("\\par ", $template);
    for ($i = 0; $i < count($rows); $i++) {
        // HACK - tilføjer et mellemrum grundet problemer med strpos
        // når feltet er det første der forekommer i strengen
        // Find det første felt i tabellen - feltet der angiver antal
        $startpos = strpos(" " . $rows[$i], "\\{\\{");
        $slutpos = strpos($rows[$i], "\\}\\}");
        if ($startpos >= 1) {
            $startpos += 3;
            $felt = substr($rows[$i], $startpos, $slutpos-$startpos);
            if (is_numeric($res[$felt]) && (int)$res[$felt]!=0) $content .= $rows[$i] . "\\par ";
            else if (strlen($res[$felt]) > 0 && $res[$felt] != '0') {
                echo $felt . " - " . $res[$felt] . " - " . strlen($res[$felt]) . "<br>";
                $content .= $rows[$i] . "\\par ";
            }
        } else $content .= $rows[$i] . "\\par ";

    }
//    $content = substr($content, 0, strlen($content)-6);

    // Oversættelse af checkboxe
    // Felt r25
    if ($res['r25'] == '1') $res['r25'] = $r25[0][$sprog];
    else $res['r25'] = '';
    // Felt r26   
    if ($res['r26'] == '1') $res['r26'] = $r26[0][$sprog];
    else $res['r26'] = '';
    // Felt r27
    if ($res['r27'] == '1') $res['r27'] = $r27[0][$sprog];
    else $res['r27'] = '';
    // Felt r28
    if ($res['r28'] == '1') $res['r28'] = $r28[0][$sprog];
    else $res['r28'] = '';
    // Felt r29
    if ($res['r29'] == '1') $res['r29'] = $r29[0][$sprog];
    else $res['r29'] = '';
    // Felt r30
    if ($res['r30'] == '1') $res['r30'] = $r30[0][$sprog];
    else $res['r30'] = '';
    // Felt r31
    if ($res['r31'] == '1') $res['r31'] = $r31[0][$sprog];
    else $res['r31'] = '';
    // Felt r32 og r32a
    if ($res['r32'] == '1') {
        $res['r32'] = $r32[0][$sprog];
        $res['r32a'] .= ' m';
    }
    else {
        $res['r32'] = '';
        $res['r32a'] = '';
    }

    // Felt r478a
    if ($res['r478a'] == '1') $res['r478a'] = $r478a[0][$sprog];
    else $res['r478a'] = '';
    // Felt r478b
    if ($res['r478b'] == '1') $res['r478b'] = $r478b[0][$sprog];
    else $res['r478b'] = '';
    // Felt r478c
    if ($res['r478c'] == '1') $res['r478c'] = $r478c[0][$sprog];
    else $res['r478c'] = '';
    // Felt r478d
    if ($res['r478d'] == '1') $res['r478d'] = $r478d[0][$sprog];
    else $res['r478d'] = '';
    // Felt r514a og r514
    if ($res['r514a'] == '1') $res['r514a'] = $r514a[0][$sprog];
    else {
        $res['r514a'] = '';
        $res['r514'] = '';
    }
    // Felt r515a og r515
    if ($res['r515a'] == '1') $res['r515a'] = $r515a[0][$sprog];
    else {
        $res['r515a'] = '';
        $res['r515'] = '';
    }
    // Felt r507a og r507
    if ($res['r507a'] == '1') $res['r507a'] = $r507a[0][$sprog];
    else {
        $res['r507a'] = '';
        $res['r507'] = '';
    }
    // Felt r508a og r508
    if ($res['r508a'] == '1') $res['r508a'] = $r508a[0][$sprog];
    else {
        $res['r508a'] = '';
        $res['r508'] = '';
    }
    // Felt r516a og r516
    if ($res['r516a'] == '1') $res['r516a'] = $r516a[0][$sprog];
    else {
        $res['r516a'] = '';
        $res['r516'] = '';
    }
    // Felt r517a og r517
    if ($res['r517a'] == '1') $res['r517a'] = $r517a[0][$sprog];
    else {
        $res['r517a'] = '';
        $res['r517'] = '';
    }
    // Felt r518a og r518
    if ($res['r518a'] == '1') $res['r518a'] = $r518a[0][$sprog];
    else {
        $res['r518a'] = '';
        $res['r518'] = '';
    }

    // Opslag af værdier for dropdown-bokse
    // Felt r6
    $res['r6'] = findValue($r6, $USAGE[$res['r6']]);
    // Felt r45
    $res['r45'] = findValue($r45, $NORM[$res['r45']]['norm']);



    // Felt r46
    $res['r46'] = str_replace(".", ",", $res['r46']);
    $res['r46'] = findValue($r46, $res['r46']);

    // Felt r49
    $res['r49'] = findValue($r49, $res['r49']);

    // Felt r65
    $res['r65'] = findValue($r65, $TAGBEKLAD[$res['r65']]);
    // Felt r72
    $res['r72'] = findValue($r72, $FACADEGAVL[$res['r72']]);
    // Felt r69
    $res['r69'] = findValue($r69, $UNDERBEKLAD[$res['r69']]);



    // Felt r53b
    $res['r53b'] = findValue($r53b, $KORROSIONKLASSE[$res['r53b']]);
    // Felt r54
    $res['r54'] = findValue($r54, $FARVE[$res['r54']]);
    // Felt r53
    $res['r53'] = findValue($r53, $KORROSIONKLASSE[$res['r53']]);
    // Felt r53a
    $res['r53a'] = findValue($r53a, $KORROSIONKLASSE[$res['r53a']]);
    // Felt r55
    $res['r55'] = findValue($r55, $PRODUKTIONSMETODE[$res['r55']]);

    // Snesæk felter
    if ($res['r56v'] = 1) {//venstre
        $res['r56v'] = $r56v[0][$sprog];
    } else {
        $res['r56v'] = '';
    }

    if ($res['r56h'] = 1) {//højre
        $res['r56h'] = $r56h[0][$sprog];
    } else {
        $res['r56h'] = '';
    }

    if ($res['r56d'] = 1) {//begge
        $res['r56d'] = $r56d[0][$sprog];
    } else {
        $res['r56d'] = '';
    }

    if ($res['r56e'] = 1) {//ingen
        $res['r56e'] = $r56e[0][$sprog];
    } else {
        $res['r56e'] = '';
    }

    // Felt r57
    if ($res['r57'] == 1) $res['r57'] = findValue($r57, 'Åben');
    else if ($res['r57'] == 2) $res['r57'] = findValue($r57, 'Lukket');
    else if ($res['r57'] == 3) $res['r57'] = findValue($r57, 'Delvis åben');
    if ($res['r505a'] == 0) $res['r505a'] = findValue($r505a, 'DKK');
    else if ($res['r505a'] == 1) $res['r505a'] = findValue($r505a, 'EUR');
    else if ($res['r505a'] == 1) $res['r505a'] = findValue($r505a, 'USD');
    else if ($res['r505a'] == 1) $res['r505a'] = findValue($r505a, 'NKR');
    else if ($res['r505a'] == 1) $res['r505a'] = findValue($r505a, 'SKR');

    // Nummerformat
    $res['r504'] = number_format($res['r504'], 0, ',', '.');
    $res['r514'] = number_format($res['r514'], 0, ',', '.');
    $res['r515'] = number_format($res['r515'], 0, ',', '.');
    $res['r507'] = number_format($res['r507'], 0, ',', '.');
    $res['r508'] = number_format($res['r508'], 0, ',', '.');
    $res['r516'] = number_format($res['r516'], 0, ',', '.');
    $res['r517'] = number_format($res['r517'], 0, ',', '.');
    $res['r518'] = number_format($res['r518'], 0, ',', '.');
    $res['r519'] = number_format($res['r519'], 0, ',', '.');
    $res['r506'] = number_format($res['r506'], 0, ',', '.');
    $res['r520'] = number_format($res['r520'], 0, ',', '.');
    $res['r521'] = number_format($res['r521'], 0, ',', '.');
    $res['r512'] = number_format($res['r512'], 0, ',', '.');
    $res['r513'] = number_format($res['r513'], 0, ',', '.');
    $res['r522'] = number_format($res['r522'], 0, ',', '.');
    $res['r523'] = number_format($res['r523'], 0, ',', '.');
    $res['r524'] = number_format($res['r524'], 0, ',', '.');
    $res['r525'] = number_format($res['r525'], 0, ',', '.');


    $res['r48'] = number_format($res['r48'], 2, ',', '');
    $res['r70'] = number_format($res['r70'], 2, ',', '');

    // format
    $res['r526'] = str_replace("\n", "\\par\n", $res['r526']);

    // Create substitute array
    reset($res);
    $from = array();
    $to = array();
    while (list($key, $val) = each($res)) {
        //if ($val == '') $val = ' ';
        $from[] = '\{\{'.$key.'\}\}';
        $to[] = $val;
    }

    $from[] = '&micro;';
    $to[] = "\'b5";

    $output = str_replace($from, $to, $content);
       
    if (file_exists($file)) {
        unlink($file);
    }

    $fp = fopen($file, 'w');
    fputs($fp, $output);
    fclose($fp);
    }

?>
<script language="JavaScript" type="text/javascript">
window.close();
opener.stifinder.location.reload(false);
</script>

Kan det på en eller anden måde lade sig gøre, at åbne rtf-filen direkte i Word, som det allersidste?
Avatar billede lsskaarup Nybegynder
22. oktober 2008 - 10:57 #1
Har selv fundet en løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester