PHPWord đọc docx

PHPWord là một API nguồn mở mạnh mẽ, được viết bằng PHP để tạo và đọc các định dạng tệp bao gồm DOC, DOCX, ODT, RTF, HTML và PDF. Sử dụng API, bạn có thể tạo tài liệu, đặt thuộc tính tài liệu, chèn hình ảnh, chèn biểu đồ, v.v. Hãy bắt đầu với việc tạo một tệp DOCX đơn giản bằng PHPWord

Điều kiện tiên quyết

Để tạo tài liệu từ bằng PHPWord, bạn cần cài đặt các tài nguyên sau trong hệ điều hành của mình

  • PHP phiên bản 5. 3. 3+
  • nhà soạn nhạc
  • Tiện ích mở rộng trình phân tích cú pháp XML (Tiện ích mở rộng này được bật theo mặc định)
  • Thành phần Zend Escaper (Bạn có thể cài đặt nó bằng lệnh sau)
composer require zendframework/zend-escaper
  • Thành phần Zend Stdlib (Bạn có thể cài đặt nó bằng lệnh sau)
composer require zendframework/zend-stdlib

Cách cài đặt PHPWord

Sau đó, bạn đã sẵn sàng các điều kiện tiên quyết, bạn có thể cài đặt PHPWord bằng lệnh soạn thảo đơn giản

composer require phpoffice/phpword

Tạo tài liệu Word bằng PHP

Tạo một tài liệu từ rất đơn giản. Bạn cần tạo một tài liệu mới bằng phương thức PhpWord(), tạo một phần mới bằng phương thức addSection() và thêm văn bản vào đó bằng phương thức addText(). Sau đây là đoạn mã để tạo một tài liệu từ đơn giản

Không biết có ai trong số các bạn có bất kỳ kinh nghiệm nào với PHPWord không (thực ra là một thư viện khá hay mà tôi tình cờ biết được), nhưng đáng để thử

Vì vậy, hoặc tôi đang thiếu một cái gì đó rất rõ ràng, hoặc nếu không thì tôi gặp may mắn khủng khiếp. Tôi đang cố tải một. docx bằng PHPWord, đặt giá trị trong đó và lưu tệp. Vấn đề là tệp đã lưu xuất hiện dưới dạng tài liệu từ trống, kích thước 7kb. Tài liệu tôi đưa vào lớn và có nhiều trang. Rõ ràng là nó không tải đúng cách. mã của tôi là như sau


$PHPWord = new \PhpOffice\PhpWord\PhpWord();
$document = $PHPWord->loadTemplate('Resources/documents/test.docx');

$document->setValue('theDate', '2014-07-25');

$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($PHPWord, 'Word2007');
$xmlWriter->save("php://output");

Tôi đã thử với nhiều bài kiểm tra. docx thuộc các loại khác nhau, nhưng tệp đầu ra luôn trống

28 Tháng Bảy, 2014 lúc 9. 38 giờ sáng #176696

PHPWord đọc docx
__

người tham gia

Rõ ràng là nó không tải đúng cách

Tại sao điều này là rõ ràng? . bạn chưa mô tả chi tiết những gì bạn đã cố gắng thực hiện, bạn cũng chưa cung cấp bất kỳ liên kết nào đến mã hoặc tài liệu có thể giúp chỉ ra cách thực hiện. Không có giải thích chi tiết, tất cả những gì chúng ta có thể làm là đưa ra những phỏng đoán hoang dã

đoán hoang dã. bạn đang tạo một thể hiện của lớp và gán nó cho $PHPWord, sau đó bạn đang tạo (tôi cho là vậy) một tài liệu và gán nó cho $document. Bạn đang đặt giá trị trên $document, nhưng có vẻ như bạn đang cố tiết kiệm $PHPWord

chỉnh sửa

Đây có phải là thư viện bạn đang sử dụng không? . Bạn đã đặt câu hỏi của mình trên diễn đàn thảo luận của PhpWord chưa?

Một đề xuất khác là đảm bảo bạn đã bật báo cáo lỗi

28 Tháng Bảy, 2014 lúc 9. 44 giờ sáng #176697

PHPWord đọc docx
Harris Christiansen

người tham gia

Thư viện cho phpWord có thể được tìm thấy ở đây. https. //github. com/PHPOffice/PHPWord

Có thể tìm thấy một ví dụ về cách sử dụng Mẫu phpWord tại đây. http. //phpword. đọcthedocs. org/vi/mới nhất/mẫu. html

Đối với tôi, rõ ràng là nó không tải tệp mẫu bởi vì, theo các ví dụ về phpWords, nếu tôi thêm các phần và văn bản vào tệp, thì phần/văn bản đó sẽ hiển thị trong tệp đầu ra. Nhưng không có gì từ tệp mẫu đã tải hiển thị trong tệp đầu ra

Báo cáo lỗi được bật để hiển thị tất cả các lỗi và cảnh báo, nhưng không có gì được hiển thị. Mặc dù nó cũng hơi khó chịu với cú pháp đối với tôi, nhưng bạn thực sự giả sử lưu biến $phpWord chứ không phải $document đã tạo. Các phần được thêm vào tệp theo cùng một cách và lưu chúng bằng cách tham khảo $phpWord thực sự hoạt động

Tôi có xu hướng tránh xa trang web bạn đã liên kết vì có vẻ như dự án đã trôi dạt khỏi trang web đó, vì phiên bản được lưu trữ ở đó rất cũ so với phiên bản chính thức hiện tại trên github

28 Tháng Bảy, 2014 lúc 9. 51 giờ sáng #176698

__

người tham gia

Đối với tôi, rõ ràng là nó không tải tệp mẫu bởi vì, theo các ví dụ về phpWords, nếu tôi thêm các phần và văn bản vào tệp, thì phần/văn bản đó sẽ hiển thị trong tệp đầu ra. Nhưng không có gì từ tệp mẫu đã tải hiển thị trong tệp đầu ra

À - theo cách tôi đọc OP của bạn, tệp đầu ra là "một tài liệu từ trống, kích thước 7kb", bất kể

Nhìn sơ qua mã nguồn, có vẻ như các tác giả sử dụng các ngoại lệ để xử lý lỗi. (Bạn có đang sử dụng các khối try

composer require zendframework/zend-stdlib
0 không?) Đảm bảo rằng bạn đã bật báo cáo lỗi trên máy chủ của mình và xem có thông báo lỗi nào hiển thị không — nếu tải mẫu không thành công, có ba hoặc bốn điểm mà bạn sẽ bị ném ngoại lệ

28 Tháng Bảy, 2014 lúc 9. 56 giờ sáng #176699

Harris Christiansen

người tham gia

Tôi xin lỗi vì sự nhầm lẫn tiếp tục. Tệp đầu ra là một tài liệu từ trống, kích thước 7kb, khi tất cả những gì tôi làm là tải mẫu và cố gắng đặt giá trị. Chỉ cần thông qua thử nghiệm, chẳng hạn như thêm các phần và văn bản bổ sung vào “tệp mẫu”, mọi thứ (và chỉ văn bản được thêm vào) sẽ hiển thị trên tệp đầu ra

Nó không tải mẫu bị lỗi, ngoài ra không có gì hiển thị. Báo cáo lỗi được bật hoàn toàn và nếu tôi thay đổi đường dẫn tệp tải thành tệp không tồn tại, nó sẽ đưa ra ngoại lệ

28 Tháng Bảy, 2014 lúc 9. 58 giờ sáng #176700

__

người tham gia

Tôi có xu hướng tránh xa trang web bạn đã liên kết vì có vẻ như dự án đã trôi dạt khỏi trang web đó, vì phiên bản được lưu trữ ở đó rất cũ so với phiên bản chính thức hiện tại trên github

…Điều mà tôi nhận thấy sau khi theo liên kết của bạn. Mặc dù vậy, repo github dường như có một trang Sự cố. Bạn có thể bắt đầu bằng cách xem qua các báo cáo đó để xem liệu bạn có thể tìm thấy sự cố tương tự không. (Tuy nhiên, lưu ý rằng đây là các báo cáo lỗi; đây không phải là nơi thích hợp để yêu cầu trợ giúp về một đoạn mã cụ thể. *)

* mặc dù mọi người có vẻ hỏi rất nhiều câu hỏi ở đó, nên có lẽ các tác giả không bận tâm…

Báo cáo lỗi được bật để hiển thị tất cả các lỗi và cảnh báo, nhưng không có gì được hiển thị

Được chứ

Mặc dù nó cũng hơi khó chịu với cú pháp đối với tôi, nhưng bạn thực sự giả sử lưu biến $phpWord chứ không phải $document đã tạo

Nó liên quan nhiều hơn đến cách mã thực sự hoạt động. Ví dụ

composer require zendframework/zend-stdlib
1 đại diện cho toàn bộ tài liệu, trong khi các tài liệu, phần, v.v. đại diện cho các phần của tài liệu (thực ra là “lồng nhau” bên trong đối tượng PhpWord). Khi biết điều này, bạn nên lưu đối tượng PhpWord thay vì một trong các thành phần

Tôi sẽ dành chút thời gian để xem xét cách thức hoạt động của tính năng này, nhưng tôi có thể không có thời gian ngay để thực sự tải xuống và kiểm tra mọi thứ. Tôi sẽ cho bạn biết nếu tôi tìm thấy bất kỳ manh mối nào

28 Tháng Bảy, 2014 lúc 10. 16 giờ sáng #176701

Harris Christiansen

người tham gia

Được rồi, cảm ơn bạn. Hiện tại để bạn có thể sao chép nhiều nhất có thể, tôi sẽ đưa tất cả mã cho những gì tôi đã làm và cho bạn biết tệp của tôi trông như thế nào

Tôi đã thử nghiệm kịch bản với nhiều. docx, tất cả những tệp này tôi tải xuống từ trực tuyến hoặc nhập nội dung nào đó vào Microsoft Word. Tôi đã thử những thứ thậm chí cơ bản như Hello World. Tôi đang lưu các tệp của mình vì tôi sẽ lưu bất kỳ tệp Microsoft Word nào, không phải theo bất kỳ kiểu mẫu, đặc biệt nào, vì tôi không thấy bất kỳ dấu hiệu nào cho thấy tôi nên làm như vậy

mã của tôi là


require_once $_SERVER['DOCUMENT_ROOT'].'/Resources/plugins/PhpWord/Autoloader.php';
\PhpOffice\PhpWord\Autoloader::register();
$PHPWord = new \PhpOffice\PhpWord\PhpWord();

$document = $PHPWord->loadTemplate('Resources/documents/test.docx');

$document->setValue('theDate', '2014-07-25');

$file = 'testFile.docx';
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="' . $file . '"');
header("Content-Type: application/docx");
header('Content-Transfer-Encoding: binary');
header("Cache-Control: public");
header('Expires: 0');
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($PHPWord, 'Word2007');
$xmlWriter->save("php://output");

28 Tháng Bảy, 2014 lúc 12. 26 giờ chiều #176709

Harris Christiansen

người tham gia

giải quyết. Vì một số lý do, PHPWord không thích tạo tệp đầu ra để tải xuống từ các mẫu. Tôi đã có thể lưu tài liệu vào máy chủ ($document, not $PHPWord) và sau đó đọc tệp tài liệu để bắt đầu tải xuống

composer require zendframework/zend-stdlib
2

28 Tháng Bảy, 2014 lúc 12. 29 giờ tối #176710

__

người tham gia

Mát mẻ. Tôi đã thắc mắc về điều đó, nhưng tôi không tìm thấy bất kỳ tài liệu nào về nó và có vẻ như nó sẽ hoạt động. Vui vì bạn đã giải quyết nó

Làm cách nào để đọc nội dung của tệp docx trong PHP?

Bạn có thể sử dụng PHPOffice để đọc nội dung docx bằng PHP . và sau đó print_r $content để xem nội dung dưới dạng chuỗi.

Làm cách nào để cài đặt PHPWord mà không cần Composer?

Đối với PHPWord, tôi sẽ tải xuống tệp zip từ GitHub và chuyển nội dung của thư mục src sang thư mục có tên "lib\PhpOffice\PhpWord". Sau đó, bạn sẽ cần một trình nạp lớp PHP. .
PHP5. 3. .
Tiện ích mở rộng Trình phân tích cú pháp XML
Thành phần Zend\Escaper
Thành phần Zend\Stdlib
Thành phần Zend\Validator

PHPWord là gì?

PHPWord là một thư viện được viết bằng PHP thuần cung cấp một tập hợp các lớp để ghi và đọc từ các định dạng tệp tài liệu khác nhau .

Làm cách nào để cài đặt PHPWord?

PHPWord được cài đặt thông qua Trình soạn thảo . Bạn chỉ cần thêm phần phụ thuộc vào PHPWord vào gói của mình. Nếu bạn là nhà phát triển hoặc nếu bạn muốn giúp chúng tôi thử nghiệm thì hãy tìm nạp nhánh mới nhất dành cho nhà phát triển. Lưu ý. tất cả các đóng góp phải được thực hiện đối với chi nhánh nhà phát triển.