DocProps.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. class PHPExcel_Writer_Excel2007_DocProps extends PHPExcel_Writer_Excel2007_WriterPart
  8. {
  9. /**
  10. * Write docProps/app.xml to XML format
  11. *
  12. * @param PHPExcel $pPHPExcel
  13. * @return string XML Output
  14. * @throws PHPExcel_Writer_Exception
  15. */
  16. public function writeDocPropsApp(PHPExcel $pPHPExcel = null)
  17. {
  18. // Create XML writer
  19. $objWriter = null;
  20. if ($this->getParentWriter()->getUseDiskCaching()) {
  21. $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
  22. } else {
  23. $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  24. }
  25. // XML header
  26. $objWriter->startDocument('1.0', 'UTF-8', 'yes');
  27. // Properties
  28. $objWriter->startElement('Properties');
  29. $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties');
  30. $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes');
  31. // Application
  32. $objWriter->writeElement('Application', 'Microsoft Excel');
  33. // DocSecurity
  34. $objWriter->writeElement('DocSecurity', '0');
  35. // ScaleCrop
  36. $objWriter->writeElement('ScaleCrop', 'false');
  37. // HeadingPairs
  38. $objWriter->startElement('HeadingPairs');
  39. // Vector
  40. $objWriter->startElement('vt:vector');
  41. $objWriter->writeAttribute('size', '2');
  42. $objWriter->writeAttribute('baseType', 'variant');
  43. // Variant
  44. $objWriter->startElement('vt:variant');
  45. $objWriter->writeElement('vt:lpstr', 'Worksheets');
  46. $objWriter->endElement();
  47. // Variant
  48. $objWriter->startElement('vt:variant');
  49. $objWriter->writeElement('vt:i4', $pPHPExcel->getSheetCount());
  50. $objWriter->endElement();
  51. $objWriter->endElement();
  52. $objWriter->endElement();
  53. // TitlesOfParts
  54. $objWriter->startElement('TitlesOfParts');
  55. // Vector
  56. $objWriter->startElement('vt:vector');
  57. $objWriter->writeAttribute('size', $pPHPExcel->getSheetCount());
  58. $objWriter->writeAttribute('baseType', 'lpstr');
  59. $sheetCount = $pPHPExcel->getSheetCount();
  60. for ($i = 0; $i < $sheetCount; ++$i) {
  61. $objWriter->writeElement('vt:lpstr', $pPHPExcel->getSheet($i)->getTitle());
  62. }
  63. $objWriter->endElement();
  64. $objWriter->endElement();
  65. // Company
  66. $objWriter->writeElement('Company', $pPHPExcel->getProperties()->getCompany());
  67. // Company
  68. $objWriter->writeElement('Manager', $pPHPExcel->getProperties()->getManager());
  69. // LinksUpToDate
  70. $objWriter->writeElement('LinksUpToDate', 'false');
  71. // SharedDoc
  72. $objWriter->writeElement('SharedDoc', 'false');
  73. // HyperlinksChanged
  74. $objWriter->writeElement('HyperlinksChanged', 'false');
  75. // AppVersion
  76. $objWriter->writeElement('AppVersion', '12.0000');
  77. $objWriter->endElement();
  78. // Return
  79. return $objWriter->getData();
  80. }
  81. /**
  82. * Write docProps/core.xml to XML format
  83. *
  84. * @param PHPExcel $pPHPExcel
  85. * @return string XML Output
  86. * @throws PHPExcel_Writer_Exception
  87. */
  88. public function writeDocPropsCore(PHPExcel $pPHPExcel = null)
  89. {
  90. // Create XML writer
  91. $objWriter = null;
  92. if ($this->getParentWriter()->getUseDiskCaching()) {
  93. $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
  94. } else {
  95. $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  96. }
  97. // XML header
  98. $objWriter->startDocument('1.0', 'UTF-8', 'yes');
  99. // cp:coreProperties
  100. $objWriter->startElement('cp:coreProperties');
  101. $objWriter->writeAttribute('xmlns:cp', 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties');
  102. $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
  103. $objWriter->writeAttribute('xmlns:dcterms', 'http://purl.org/dc/terms/');
  104. $objWriter->writeAttribute('xmlns:dcmitype', 'http://purl.org/dc/dcmitype/');
  105. $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
  106. // dc:creator
  107. $objWriter->writeElement('dc:creator', $pPHPExcel->getProperties()->getCreator());
  108. // cp:lastModifiedBy
  109. $objWriter->writeElement('cp:lastModifiedBy', $pPHPExcel->getProperties()->getLastModifiedBy());
  110. // dcterms:created
  111. $objWriter->startElement('dcterms:created');
  112. $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF');
  113. $objWriter->writeRawData(date(DATE_W3C, $pPHPExcel->getProperties()->getCreated()));
  114. $objWriter->endElement();
  115. // dcterms:modified
  116. $objWriter->startElement('dcterms:modified');
  117. $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF');
  118. $objWriter->writeRawData(date(DATE_W3C, $pPHPExcel->getProperties()->getModified()));
  119. $objWriter->endElement();
  120. // dc:title
  121. $objWriter->writeElement('dc:title', $pPHPExcel->getProperties()->getTitle());
  122. // dc:description
  123. $objWriter->writeElement('dc:description', $pPHPExcel->getProperties()->getDescription());
  124. // dc:subject
  125. $objWriter->writeElement('dc:subject', $pPHPExcel->getProperties()->getSubject());
  126. // cp:keywords
  127. $objWriter->writeElement('cp:keywords', $pPHPExcel->getProperties()->getKeywords());
  128. // cp:category
  129. $objWriter->writeElement('cp:category', $pPHPExcel->getProperties()->getCategory());
  130. $objWriter->endElement();
  131. // Return
  132. return $objWriter->getData();
  133. }
  134. /**
  135. * Write docProps/custom.xml to XML format
  136. *
  137. * @param PHPExcel $pPHPExcel
  138. * @return string XML Output
  139. * @throws PHPExcel_Writer_Exception
  140. */
  141. public function writeDocPropsCustom(PHPExcel $pPHPExcel = null)
  142. {
  143. $customPropertyList = $pPHPExcel->getProperties()->getCustomProperties();
  144. if (empty($customPropertyList)) {
  145. return;
  146. }
  147. // Create XML writer
  148. $objWriter = null;
  149. if ($this->getParentWriter()->getUseDiskCaching()) {
  150. $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
  151. } else {
  152. $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  153. }
  154. // XML header
  155. $objWriter->startDocument('1.0', 'UTF-8', 'yes');
  156. // cp:coreProperties
  157. $objWriter->startElement('Properties');
  158. $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties');
  159. $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes');
  160. foreach ($customPropertyList as $key => $customProperty) {
  161. $propertyValue = $pPHPExcel->getProperties()->getCustomPropertyValue($customProperty);
  162. $propertyType = $pPHPExcel->getProperties()->getCustomPropertyType($customProperty);
  163. $objWriter->startElement('property');
  164. $objWriter->writeAttribute('fmtid', '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}');
  165. $objWriter->writeAttribute('pid', $key+2);
  166. $objWriter->writeAttribute('name', $customProperty);
  167. switch ($propertyType) {
  168. case 'i':
  169. $objWriter->writeElement('vt:i4', $propertyValue);
  170. break;
  171. case 'f':
  172. $objWriter->writeElement('vt:r8', $propertyValue);
  173. break;
  174. case 'b':
  175. $objWriter->writeElement('vt:bool', ($propertyValue) ? 'true' : 'false');
  176. break;
  177. case 'd':
  178. $objWriter->startElement('vt:filetime');
  179. $objWriter->writeRawData(date(DATE_W3C, $propertyValue));
  180. $objWriter->endElement();
  181. break;
  182. default:
  183. $objWriter->writeElement('vt:lpwstr', $propertyValue);
  184. break;
  185. }
  186. $objWriter->endElement();
  187. }
  188. $objWriter->endElement();
  189. return $objWriter->getData();
  190. }
  191. }