126 lines
4.9 KiB
PHP
Raw Normal View History

<?php
/**
* PHPWord
*
2014-03-27 23:55:06 +07:00
* @link https://github.com/PHPOffice/PHPWord
* @copyright 2014 PHPWord
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
*/
namespace PhpOffice\PhpWord\Writer\Word2007;
use PhpOffice\PhpWord\Element\Footnote;
2014-04-09 21:35:55 +07:00
use PhpOffice\PhpWord\Element\Endnote;
use PhpOffice\PhpWord\Shared\XMLWriter;
/**
* Word2007 footnotes part writer
*/
2014-04-09 21:35:55 +07:00
class Notes extends Base
{
/**
2014-04-09 21:35:55 +07:00
* Write word/(footnotes|endnotes).xml
*
2014-04-09 21:35:55 +07:00
* @param array $elements
* @param string $notesTypes
*/
2014-04-09 21:35:55 +07:00
public function writeNotes($elements, $notesTypes = 'footnotes')
{
2014-04-09 21:35:55 +07:00
$isFootnote = $notesTypes == 'footnotes';
$rootNode = $isFootnote ? 'w:footnotes' : 'w:endnotes';
$elementNode = $isFootnote ? 'w:footnote' : 'w:endnote';
$xmlWriter = $this->getXmlWriter();
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
2014-04-09 21:35:55 +07:00
$xmlWriter->startElement($rootNode);
$xmlWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
$xmlWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
$xmlWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
$xmlWriter->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math');
$xmlWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml');
$xmlWriter->writeAttribute('xmlns:wp', 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing');
$xmlWriter->writeAttribute('xmlns:w10', 'urn:schemas-microsoft-com:office:word');
$xmlWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
$xmlWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml');
// Separator and continuation separator
2014-04-09 21:35:55 +07:00
$xmlWriter->startElement($elementNode);
$xmlWriter->writeAttribute('w:id', -1);
$xmlWriter->writeAttribute('w:type', 'separator');
$xmlWriter->startElement('w:p');
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:separator');
$xmlWriter->endElement(); // w:separator
$xmlWriter->endElement(); // w:r
$xmlWriter->endElement(); // w:p
2014-04-09 21:35:55 +07:00
$xmlWriter->endElement(); // $elementNode
$xmlWriter->startElement($elementNode);
$xmlWriter->writeAttribute('w:id', 0);
$xmlWriter->writeAttribute('w:type', 'continuationSeparator');
$xmlWriter->startElement('w:p');
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:continuationSeparator');
$xmlWriter->endElement(); // w:continuationSeparator
$xmlWriter->endElement(); // w:r
$xmlWriter->endElement(); // w:p
2014-04-09 21:35:55 +07:00
$xmlWriter->endElement(); // $elementNode
// Content
2014-04-09 21:35:55 +07:00
foreach ($elements as $element) {
if ($element instanceof Footnote || $element instanceof Endnote) {
$this->writeNote($xmlWriter, $element, $notesTypes);
}
}
2014-04-09 21:35:55 +07:00
$xmlWriter->endElement(); // $rootNode
return $xmlWriter->getData();
}
/**
2014-04-09 21:35:55 +07:00
* Write note item
*
* @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
* @param \PhpOffice\PhpWord\Element\Footnote|\PhpOffice\PhpWord\Element\Endnote $element
* @param string $notesTypes
*/
protected function writeNote(XMLWriter $xmlWriter, $element, $notesTypes = 'footnotes')
{
2014-04-09 21:35:55 +07:00
$isFootnote = ($notesTypes == 'footnotes');
$elementNode = $isFootnote ? 'w:footnote' : 'w:endnote';
$refNode = $isFootnote ? 'w:footnoteRef' : 'w:endnoteRef';
$styleName = $isFootnote ? 'FootnoteReference' : 'EndnoteReference';
$xmlWriter->startElement($elementNode);
$xmlWriter->writeAttribute('w:id', $element->getRelationId());
$xmlWriter->startElement('w:p');
2014-04-09 21:35:55 +07:00
// Paragraph style
2014-04-09 21:35:55 +07:00
$styleParagraph = $element->getParagraphStyle();
2014-03-30 18:51:25 +07:00
$this->writeInlineParagraphStyle($xmlWriter, $styleParagraph);
2014-04-09 21:35:55 +07:00
// Reference symbol
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:rPr');
$xmlWriter->startElement('w:rStyle');
2014-04-09 21:35:55 +07:00
$xmlWriter->writeAttribute('w:val', $styleName);
$xmlWriter->endElement(); // w:rStyle
$xmlWriter->endElement(); // w:rPr
2014-04-09 21:35:55 +07:00
$xmlWriter->writeElement($refNode);
$xmlWriter->endElement(); // w:r
2014-04-09 21:35:55 +07:00
// Empty space after refence symbol
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:t');
$xmlWriter->writeAttribute('xml:space', 'preserve');
$xmlWriter->writeRaw(' ');
$xmlWriter->endElement(); // w:t
$xmlWriter->endElement(); // w:r
2014-04-09 21:35:55 +07:00
$this->writeContainerElements($xmlWriter, $element);
$xmlWriter->endElement(); // w:p
2014-04-09 21:35:55 +07:00
$xmlWriter->endElement(); // $elementNode
}
}