Witam,
Zapisuje sobie do pliku .doc dane, których kolor czcionki jest domyślnie czarny. Jak ustawić aby dane były zapisywane w kolorze czerwonym?
W jaki sposób to robisz? Czy zapisujesz bezpośrednio do pliku, czy korzystasz z jakiejś biblioteki do tego przeznaczonej?
Daj jakiś kod dotyczący zapisu - pokaż, jak to robisz aktualnie.
$file = dirname(__FILE__) . '/plik.doc';
$data = "12345";
file_put_contents($file,$data, FILE_APPEND);
i jak coś takiego zapisać w kolorze czerwonym?
No ale to, co robisz nie jest zapisem pliku DOC, tylko stworzeniem pliku tekstowego z rozszerzeniem doc. To nie ma prawa działać w taki sposób, jaki sobie wymyśliłeś.
Jeśli chcesz naprawdę zapisywać dane do plików Worda, masz 2 opcje: albo sobie poczytać, jaką strukturę wewnętrzną mają pliki tego typu, a następnie ręcznie zapisać dane zgodnie z tym standardem, albo skorzystać z gotowej biblioteki, która to ogarnie za Ciebie. Osobiście polecam podejście numer 2. W necie jest wiele bibliotek/pakietów, które realizują to zadanie, możesz rzucić okiem chociażby na https://github.com/PHPOffice/PHPWord
cerrato napisał(a):
No ale to, co robisz nie jest zapisem pliku DOC, tylko stworzeniem pliku tekstowego z rozszerzeniem doc. To nie ma prawa działać w taki sposób, jaki sobie wymyśliłeś.
Jak ten kod mi działa, tworzy plik .doc i otwiera się poprawnie w wordzie, tylko czy da się jakoś w prosty sposób zmienić przy tym zapisie kolor czcionki? Czy pozostaje tylko jedna z 2 opcji które podałeś?
asdf42 napisał(a):
cerrato napisał(a):
No ale to, co robisz
nie jest zapisem pliku DOC
, tylko stworzeniem pliku tekstowego z rozszerzeniem doc. To nie ma prawa działać w taki sposób, jaki sobie wymyśliłeś.Jak ten kod mi działa, tworzy plik .doc i otwiera się poprawnie w wordzie,
W Wordzie możesz sobie otwierać pliki w różnych formatach (w tym np TXT) ale nie stają się one przez to plikami Worda. Nadanie plikowi określonego rozszerzenia również nie zmienia jego wewnętrznego formatu.
Czy pozostaje tylko jedna z 2 opcji które podałeś?
Mógłbyś jeszcze spróbować zapisu do RTF, konstrukcję mają dużo czytelniejszą niż DOC/DOCX, a pozwalają uzyskać efekt, o którym piszesz.
cerrato napisał(a):
Osobiście polecam podejście numer 2. W necie jest wiele bibliotek/pakietów, które realizują to zadanie, możesz rzucić okiem chociażby na https://github.com/PHPOffice/PHPWord
Pobrałem to z github, wypakowałem i wkleiłem do C:\xampp\htdocs
W pliku composer.json dodałem
"phpoffice/phpword": "v0.16.*"
czyli jest:
"require": {
"php": "^5.3.3 || ^7.0",
"ext-xml": "*",
"zendframework/zend-escaper": "^2.2",
"phpoffice/phpword": "v0.16.*",
"phpoffice/common": "^0.2.9"
},
W głównym katalogu utworzyłem sobie plik zapis.php
którą ma taki kod (nie wiem czy jest poprawny) :
<?php
require_once 'bootstrap.php';
// Creating the new document...
$phpWord = new \PhpOffice\PhpWord\PhpWord();
/* Note: any element you append to a document must reside inside of a Section. */
// Adding an empty Section to the document...
$section = $phpWord->addSection();
// Adding Text element with font customized using named font style...
$fontStyleName = 'oneUserDefinedStyle';
$phpWord->addFontStyle(
$fontStyleName,
array('name' => 'Tahoma', 'size' => 10, 'color' => 'FF0000', 'bold' => true)
);
$section->addText(
'12345',
$fontStyleName
);
// Saving the document as OOXML file...
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');
?>
Przy wywołaniu strony http://127.0.0.1/PhpWord-develop/zapis.php
wyświetla się:
Fatal error: Uncaught Exception: Could not find file '/autoload.php'. It is generated by Composer. Use 'install --prefer-source' or 'update --prefer-source' Composer commands to move forward. in C:\xampp\htdocs\PHPWord-develop\bootstrap.php:22 Stack trace: #0 C:\xampp\htdocs\PHPWord-develop\zapis.php(2): require_once() #1 {main} thrown in C:\xampp\htdocs\PHPWord-develop\bootstrap.php on line 22
plik bootstrap.php
ma taki kod:
<?php
/**
* This file is part of PHPWord - A pure PHP library for reading and writing
* word processing documents.
*
* PHPWord is free software distributed under the terms of the GNU Lesser
* General Public License version 3 as published by the Free Software Foundation.
*
* For the full copyright and license information, please read the LICENSE
* file that was distributed with this source code. For the full list of
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors. test bootstrap
*
* @see https://github.com/PHPOffice/PHPWord
* @copyright 2010-2018 PHPWord contributors
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/
$vendorDirPath = realpath(__DIR__ . '/vendor');
if (file_exists($vendorDirPath . '/autoload.php')) {
require $vendorDirPath . '/autoload.php';
} else {
throw new Exception(
sprintf(
'Could not find file \'%s\'. It is generated by Composer. Use \'install --prefer-source\' or \'update --prefer-source\' Composer commands to move forward.',
$vendorDirPath . '/autoload.php'
)
);
}
Pobrałem i zainstalowałem Composer-Setup.exe
w cmd
komenda composer -V
pokazuję Composer version 1.9.1 2019-11-01 17:20:17
Ktoś wie czemu mi to nie działa i w czym jest problem?
A czy wiesz, co to jest Composer i do czego służy?
Moim zdaniem to samo pobranie Composera nie starczy, powinieneś pakiet PHPWord pobrać/zainstalować u siebie właśnie z użyciem Composera.
Zresztą nawet piszą o tym w Readme tego projektu - https://github.com/PHPOffice/PHPWord/blob/develop/README.md#installation:
PHPWord is installed via Composer. To add a dependency to PHPWord in your project, either
Run the following to use the latest stable version
composer require phpoffice/phpword
Poza tym możesz spróbować odpalić u siebie któryś z przykładów dostarczonych z projektem - https://github.com/PHPOffice/PHPWord/tree/develop/samples
cerrato napisał(a):
A czy wiesz, co to jest Composer i do czego służy?
Moim zdaniem to samo pobranie Composera nie starczy, powinieneś pakiet PHPWord pobrać/zainstalować u siebie właśnie z użyciem Composera.
Zresztą nawet piszą o tym w Readme tego projektu - https://github.com/PHPOffice/PHPWord/blob/develop/README.md#installation:
PHPWord is installed via Composer. To add a dependency to PHPWord in your project, either Run the following to use the latest stable version composer require phpoffice/phpword
Poza tym możesz spróbować odpalić u siebie któryś z przykładów dostarczonych z projektem - https://github.com/PHPOffice/PHPWord/tree/develop/samples
Wykonałem composer require phpoffice/phpword
w cmd
i dalej
Fatal error: Uncaught Exception: Could not find file '/autoload.php'. It is generated by Composer. Use 'install --prefer-source' or 'update --prefer-source' Composer commands to move forward. in C:\xampp\htdocs\PHPWord\bootstrap.php:22 Stack trace: #0 C:\xampp\htdocs\PHPWord\zapis.php(2): require_once() #1 {main} thrown in C:\xampp\htdocs\PHPWord\bootstrap.php on line 22
Nie wczytuj bootstrapa obcej biblioteki tylko https://getcomposer.org/doc/01-basic-usage.md#autoloading czyli:
require __DIR__ . '/vendor/autoload.php';
Jak nie pomoże to pokaż strukturę plików na serwerze, a idealnie było by gdybyś wrzucił swój kod na github.com.
Markuz napisał(a):
Nie wczytuj bootstrapa obcej biblioteki tylko https://getcomposer.org/doc/01-basic-usage.md#autoloading czyli:
require __DIR__ . '/vendor/autoload.php';
Jak nie pomoże to pokaż strukturę plików na serwerze, a idealnie było by gdybyś wrzucił swój kod na github.com.
Plik zapis.php
<?php
//require_once 'bootstrap.php';
require __DIR__ . '/vendor/autoload.php';
// Creating the new document...
$phpWord = new \PhpOffice\PhpWord\PhpWord();
/* Note: any element you append to a document must reside inside of a Section. */
// Adding an empty Section to the document...
$section = $phpWord->addSection();
// Adding Text element with font customized using named font style...
$fontStyleName = 'oneUserDefinedStyle';
$phpWord->addFontStyle(
$fontStyleName,
array('name' => 'Tahoma', 'size' => 10, 'color' => 'FF0000', 'bold' => true)
);
$section->addText(
'12345',
$fontStyleName
);
// Saving the document as OOXML file...
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');
?>
No ale w tym katalogu nawet nie ma ani folderu vendor
ani pliku autoload.php
Przy wywołaniu strony http://127.0.0.1/PhpWord/zapis.php
teraz taki błąd:
Warning: require(C:\xampp\htdocs\PHPWord/vendor/autoload.php): failed to open stream: No such file or directory in C:\xampp\htdocs\PHPWord\zapis.php on line 3
Fatal error: require(): Failed opening required 'C:\xampp\htdocs\PHPWord/vendor/autoload.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\PHPWord\zapis.php on line 3
Czy jest jakiś powód dla którego to muszą(?) być pliki DOC.
Czy mgą być np HTML albo ew. RTF?
@asdf42: To weź sobie zapisz przykładowy plik RTF z kilkoma liniami w tym jedną wyróżnioną kolorem i zobacz w Notepad++ jak ten plik od środka wygląda. A później możesz sobie dla swoich potrzeb przekopiować jego nagłówek i dodawać kolejne wiersze:
\par jeden
\par dwa
\par trzy
\par }{\cf6 cztery (czerwone)
\par }{pi\'ea\'e6
\par sze\'9c\'e6
Istnieją też biblioteki pozwalające generować pliki PDF.
i nie chce tego na stronie oglądać tylko najlepiej .doc chociaż RTF też może być
Jeśli problem sprowadza się do tego, że chcesz plik zapisać plik, zamiast otwierać go w przeglądarce, to możesz spokojnie użyć HTML i tagu download, żeby wymusić pobieranie pliku:
https://www.w3schools.com/tags/att_a_download.asp
asdf42 napisał(a):
cerrato napisał(a):
A czy wiesz, co to jest Composer i do czego służy?
Moim zdaniem to samo pobranie Composera nie starczy, powinieneś pakiet PHPWord pobrać/zainstalować u siebie właśnie z użyciem Composera.
Zresztą nawet piszą o tym w Readme tego projektu - https://github.com/PHPOffice/PHPWord/blob/develop/README.md#installation:
PHPWord is installed via Composer. To add a dependency to PHPWord in your project, either Run the following to use the latest stable version composer require phpoffice/phpword
Poza tym możesz spróbować odpalić u siebie któryś z przykładów dostarczonych z projektem - https://github.com/PHPOffice/PHPWord/tree/develop/samples
Wykonałem
composer require phpoffice/phpword
wcmd
i dalejFatal error: Uncaught Exception: Could not find file '/autoload.php'. It is generated by Composer. Use 'install --prefer-source' or 'update --prefer-source' Composer commands to move forward. in C:\xampp\htdocs\PHPWord\bootstrap.php:22 Stack trace: #0 C:\xampp\htdocs\PHPWord\zapis.php(2): require_once() #1 {main} thrown in C:\xampp\htdocs\PHPWord\bootstrap.php on line 22
Tak jak by ło napisane w tym katalogu nawet nie ma ani folderu vendor ani pliku autoload.php. Sprawdziłem to u siebie i u mnie działa jako HTML
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.