精华内容
下载资源
问答
  • phpword 模板替换文字和图片

    千次阅读 2018-06-23 10:32:43
    个人建议使用composer下载phpword找到phpword/src/PhpWord/TemplateProcessor.php  修改为<?php /** * This file is part of PHPWord - A pure PHP library for reading and writing * word processing ...

    个人建议使用composer下载phpword

    找到phpword/src/PhpWord/TemplateProcessor.php    修改为

    <?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.
     *
     * @link        https://github.com/PHPOffice/PHPWord
     * @copyright   2010-2016 PHPWord contributors
     * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
     */
    
    namespace PhpOffice\PhpWord;
    
    use PhpOffice\PhpWord\Escaper\RegExp;
    use PhpOffice\PhpWord\Escaper\Xml;
    use PhpOffice\PhpWord\Exception\CopyFileException;
    use PhpOffice\PhpWord\Exception\CreateTemporaryFileException;
    use PhpOffice\PhpWord\Exception\Exception;
    use PhpOffice\PhpWord\Shared\ZipArchive;
    use Zend\Stdlib\StringUtils;
    
    class TemplateProcessor
    {
        const MAXIMUM_REPLACEMENTS_DEFAULT = -1;
    
        /**
         * ZipArchive object.
         *
         * @var mixed
         */
        protected $zipClass;
    
        /**
         * @var string Temporary document filename (with path).
         */
        protected $tempDocumentFilename;
    
        /**
         * Content of main document part (in XML format) of the temporary document.
         *
         * @var string
         */
        protected $tempDocumentMainPart;
    
        /**
         * Content of headers (in XML format) of the temporary document.
         *
         * @var string[]
         */
        protected $tempDocumentHeaders = array();
    
        /**
         * Content of footers (in XML format) of the temporary document.
         *
         * @var string[]
         */
        protected $tempDocumentFooters = array();
       protected $_rels;
       protected $_types;
        /**
         * @since 0.12.0 Throws CreateTemporaryFileException and CopyFileException instead of Exception.
         *
         * @param string $documentTemplate The fully qualified template filename.
         *
         * @throws \PhpOffice\PhpWord\Exception\CreateTemporaryFileException
         * @throws \PhpOffice\PhpWord\Exception\CopyFileException
         */
        public function __construct($documentTemplate)
        {
          $this->_countRels=100;
            // Temporary document filename initialization
            $this->tempDocumentFilename = tempnam(Settings::getTempDir(), 'PhpWord');
            if (false === $this->tempDocumentFilename) {
                throw new CreateTemporaryFileException();
            }
    
            // Template file cloning
            if (false === copy($documentTemplate, $this->tempDocumentFilename)) {
                throw new CopyFileException($documentTemplate, $this->tempDocumentFilename);
            }
    
            // Temporary document content extraction
            $this->zipClass = new ZipArchive();
            $this->zipClass->open($this->tempDocumentFilename);
            $index = 1;
            while (false !== $this->zipClass->locateName($this->getHeaderName($index))) {
                $this->tempDocumentHeaders[$index] = $this->fixBrokenMacros(
                    $this->zipClass->getFromName($this->getHeaderName($index))
                );
                $index++;
            }
            $index = 1;
            while (false !== $this->zipClass->locateName($this->getFooterName($index))) {
                $this->tempDocumentFooters[$index] = $this->fixBrokenMacros(
                    $this->zipClass->getFromName($this->getFooterName($index))
                );
                $index++;
            }
            $this->tempDocumentMainPart = $this->fixBrokenMacros($this->zipClass->getFromName($this->getMainPartName()));
        }
    
        /**
         * @param string $xml
         * @param \XSLTProcessor $xsltProcessor
         *
         * @return string
         *
         * @throws \PhpOffice\PhpWord\Exception\Exception
         */
        protected function transformSingleXml($xml, $xsltProcessor)
        {
            $domDocument = new \DOMDocument();
            if (false === $domDocument->loadXML($xml)) {
                throw new Exception('Could not load the given XML document.');
            }
    
            $transformedXml = $xsltProcessor->transformToXml($domDocument);
            if (false === $transformedXml) {
                throw new Exception('Could not transform the given XML document.');
            }
    
            return $transformedXml;
        }
    
        /**
         * @param mixed $xml
         * @param \XSLTProcessor $xsltProcessor
         *
         * @return mixed
         */
        protected function transformXml($xml, $xsltProcessor)
        {
            if (is_array($xml)) {
                foreach ($xml as &$item) {
                    $item = $this->transformSingleXml($item, $xsltProcessor);
                }
            } else {
                $xml = $this->transformSingleXml($xml, $xsltProcessor);
            }
    
            return $xml;
        }
    
        /**
         * Applies XSL style sheet to template's parts.
         * 
         * Note: since the method doesn't make any guess on logic of the provided XSL style sheet,
         * make sure that output is correctly escaped. Otherwise you may get broken document.
         *
         * @param \DOMDocument $xslDomDocument
         * @param array $xslOptions
         * @param string $xslOptionsUri
         *
         * @return void
         *
         * @throws \PhpOffice\PhpWord\Exception\Exception
         */
        public function applyXslStyleSheet($xslDomDocument, $xslOptions = array(), $xslOptionsUri = '')
        {
            $xsltProcessor = new \XSLTProcessor();
    
            $xsltProcessor->importStylesheet($xslDomDocument);
            if (false === $xsltProcessor->setParameter($xslOptionsUri, $xslOptions)) {
                throw new Exception('Could not set values for the given XSL style sheet parameters.');
            }
    
            $this->tempDocumentHeaders = $this->transformXml($this->tempDocumentHeaders, $xsltProcessor);
            $this->tempDocumentMainPart = $this->transformXml($this->tempDocumentMainPart, $xsltProcessor);
            $this->tempDocumentFooters = $this->transformXml($this->tempDocumentFooters, $xsltProcessor);
        }
    
        /**
         * @param string $macro
         *
         * @return string
         */
        protected static function ensureMacroCompleted($macro)
        {
            if (substr($macro, 0, 2) !== '${' && substr($macro, -1) !== '}') {
                $macro = '${' . $macro . '}';
            }
    
            return $macro;
        }
    
        /**
         * @param string $subject
         *
         * @return string
         */
        protected static function ensureUtf8Encoded($subject)
        {
            if (!StringUtils::isValidUtf8($subject)) {
                $subject = utf8_encode($subject);
            }
    
            return $subject;
        }
    
        /**
         * @param mixed $search
         * @param mixed $replace
         * @param integer $limit
         *
         * @return void
         */
        public function setValue($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT)
        {
            if (is_array($search)) {
                foreach ($search as &$item) {
                    $item = self::ensureMacroCompleted($item);
                }
            } else {
                $search = self::ensureMacroCompleted($search);
            }
    
            if (is_array($replace)) {
                foreach ($replace as &$item) {
                    $item = self::ensureUtf8Encoded($item);
                }
            } else {
                $replace = self::ensureUtf8Encoded($replace);
            }
    
            if (Settings::isOutputEscapingEnabled()) {
                $xmlEscaper = new Xml();
                $replace = $xmlEscaper->escape($replace);
            }
    
            $this->tempDocumentHeaders = $this->setValueForPart($search, $replace, $this->tempDocumentHeaders, $limit);
            $this->tempDocumentMainPart = $this->setValueForPart($search, $replace, $this->tempDocumentMainPart, $limit);
            $this->tempDocumentFooters = $this->setValueForPart($search, $replace, $this->tempDocumentFooters, $limit);
        }
    
        /**
         * Returns array of all variables in template.
         *
         * @return string[]
         */
        public function getVariables()
        {
            $variables = $this->getVariablesForPart($this->tempDocumentMainPart);
    
            foreach ($this->tempDocumentHeaders as $headerXML) {
                $variables = array_merge($variables, $this->getVariablesForPart($headerXML));
            }
    
            foreach ($this->tempDocumentFooters as $footerXML) {
                $variables = array_merge($variables, $this->getVariablesForPart($footerXML));
            }
    
            return array_unique($variables);
        }
    
        /**
         * Clone a table row in a template document.
         *
         * @param string $search
         * @param integer $numberOfClones
         *
         * @return void
         *
         * @throws \PhpOffice\PhpWord\Exception\Exception
         */
        public function cloneRow($search, $numberOfClones)
        {
            if ('${' !== substr($search, 0, 2) && '}' !== substr($search, -1)) {
                $search = '${' . $search . '}';
            }
    
            $tagPos = strpos($this->tempDocumentMainPart, $search);
            if (!$tagPos) {
                throw new Exception("Can not clone row, template variable not found or variable contains markup.");
            }
    
            $rowStart = $this->findRowStart($tagPos);
            $rowEnd = $this->findRowEnd($tagPos);
            $xmlRow = $this->getSlice($rowStart, $rowEnd);
    
            // Check if there's a cell spanning multiple rows.
            if (preg_match('#<w:vMerge w:val="restart"/>#', $xmlRow)) {
                // $extraRowStart = $rowEnd;
                $extraRowEnd = $rowEnd;
                while (true) {
                    $extraRowStart = $this->findRowStart($extraRowEnd + 1);
                    $extraRowEnd = $this->findRowEnd($extraRowEnd + 1);
    
                    // If extraRowEnd is lower then 7, there was no next row found.
                    if ($extraRowEnd < 7) {
                        break;
                    }
    
                    // If tmpXmlRow doesn't contain continue, this row is no longer part of the spanned row.
                    $tmpXmlRow = $this->getSlice($extraRowStart, $extraRowEnd);
                    if (!preg_match('#<w:vMerge/>#', $tmpXmlRow) &&
                        !preg_match('#<w:vMerge w:val="continue" />#', $tmpXmlRow)) {
                        break;
                    }
                    // This row was a spanned row, update $rowEnd and search for the next row.
                    $rowEnd = $extraRowEnd;
                }
                $xmlRow = $this->getSlice($rowStart, $rowEnd);
            }
    
            $result = $this->getSlice(0, $rowStart);
            for ($i = 1; $i <= $numberOfClones; $i++) {
                $result .= preg_replace('/\$\{(.*?)\}/', '\${\\1#' . $i . '}', $xmlRow);
            }
            $result .= $this->getSlice($rowEnd);
    
            $this->tempDocumentMainPart = $result;
        }
    
        /**
         * Clone a block.
         *
         * @param string $blockname
         * @param integer $clones
         * @param boolean $replace
         *
         * @return string|null
         */
        public function cloneBlock($blockname, $clones = 1, $replace = true)
        {
            $xmlBlock = null;
            preg_match(
                '/(<\?xml.*)(<w:p.*>\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is',
                $this->tempDocumentMainPart,
                $matches
            );
    
            if (isset($matches[3])) {
                $xmlBlock = $matches[3];
                $cloned = array();
                for ($i = 1; $i <= $clones; $i++) {
                    $cloned[] = $xmlBlock;
                }
    
                if ($replace) {
                    $this->tempDocumentMainPart = str_replace(
                        $matches[2] . $matches[3] . $matches[4],
                        implode('', $cloned),
                        $this->tempDocumentMainPart
                    );
                }
            }
    
            return $xmlBlock;
        }
    
        /**
         * Replace a block.
         *
         * @param string $blockname
         * @param string $replacement
         *
         * @return void
         */
        public function replaceBlock($blockname, $replacement)
        {
            preg_match(
                '/(<\?xml.*)(<w:p.*>\${' . $blockname . '}<\/w:.*?p>)(.*)(<w:p.*\${\/' . $blockname . '}<\/w:.*?p>)/is',
                $this->tempDocumentMainPart,
                $matches
            );
    
            if (isset($matches[3])) {
                $this->tempDocumentMainPart = str_replace(
                    $matches[2] . $matches[3] . $matches[4],
                    $replacement,
                    $this->tempDocumentMainPart
                );
            }
        }
    
        /**
         * Delete a block of text.
         *
         * @param string $blockname
         *
         * @return void
         */
        public function deleteBlock($blockname)
        {
            $this->replaceBlock($blockname, '');
        }
    
        /**
         * Saves the result document.
         *
         * @return string
         *
         * @throws \PhpOffice\PhpWord\Exception\Exception
         */
        public function save()
        {
            foreach ($this->tempDocumentHeaders as $index => $xml) {
                $this->zipClass->addFromString($this->getHeaderName($index), $xml);
            }
    
            $this->zipClass->addFromString($this->getMainPartName(), $this->tempDocumentMainPart);
    if($this->_rels!="")
    {
        $this->zipClass->addFromString('word/_rels/document.xml.rels', $this->_rels);
    }
    if($this->_types!="")
    {
        $this->zipClass->addFromString('[Content_Types].xml', $this->_types);
    }
    
            foreach ($this->tempDocumentFooters as $index => $xml) {
                $this->zipClass->addFromString($this->getFooterName($index), $xml);
            }
    
            // Close zip file
            if (false === $this->zipClass->close()) {
                throw new Exception('Could not close zip file.');
            }
    
            return $this->tempDocumentFilename;
        }
    
        /**
         * Saves the result document to the user defined file.
         *
         * @since 0.8.0
         *
         * @param string $fileName
         *
         * @return void
         */
        public function saveAs($fileName)
        {
            $tempFileName = $this->save();
    
            if (file_exists($fileName)) {
                unlink($fileName);
            }
    
            /*
             * Note: we do not use `rename` function here, because it looses file ownership data on Windows platform.
             * As a result, user cannot open the file directly getting "Access denied" message.
             *
             * @see https://github.com/PHPOffice/PHPWord/issues/532
             */
            copy($tempFileName, $fileName);
            unlink($tempFileName);
        }
    
        /**
         * Finds parts of broken macros and sticks them together.
         * Macros, while being edited, could be implicitly broken by some of the word processors.
         *
         * @param string $documentPart The document part in XML representation.
         *
         * @return string
         */
        protected function fixBrokenMacros($documentPart)
        {
            $fixedDocumentPart = $documentPart;
    
            $fixedDocumentPart = preg_replace_callback(
                '|\$[^{]*\{[^}]*\}|U',
                function ($match) {
                    return strip_tags($match[0]);
                },
                $fixedDocumentPart
            );
    
            return $fixedDocumentPart;
        }
    
        /**
         * Find and replace macros in the given XML section.
         *
         * @param mixed $search
         * @param mixed $replace
         * @param string $documentPartXML
         * @param integer $limit
         *
         * @return string
         */
        protected function setValueForPart($search, $replace, $documentPartXML, $limit)
        {
            // Note: we can't use the same function for both cases here, because of performance considerations.
            if (self::MAXIMUM_REPLACEMENTS_DEFAULT === $limit) {
                return str_replace($search, $replace, $documentPartXML);
            } else {
                $regExpEscaper = new RegExp();
                return preg_replace($regExpEscaper->escape($search), $replace, $documentPartXML, $limit);
            }
        }
    
        /**
         * Find all variables in $documentPartXML.
         *
         * @param string $documentPartXML
         *
         * @return string[]
         */
        protected function getVariablesForPart($documentPartXML)
        {
            preg_match_all('/\$\{(.*?)}/i', $documentPartXML, $matches);
    
            return $matches[1];
        }
    
        /**
         * Get the name of the header file for $index.
         *
         * @param integer $index
         *
         * @return string
         */
        protected function getHeaderName($index)
        {
            return sprintf('word/header%d.xml', $index);
        }
    
        /**
         * @return string
         */
        protected function getMainPartName()
        {
            return 'word/document.xml';
        }
    
        /**
         * Get the name of the footer file for $index.
         *
         * @param integer $index
         *
         * @return string
         */
        protected function getFooterName($index)
        {
            return sprintf('word/footer%d.xml', $index);
        }
    
        /**
         * Find the start position of the nearest table row before $offset.
         *
         * @param integer $offset
         *
         * @return integer
         *
         * @throws \PhpOffice\PhpWord\Exception\Exception
         */
        protected function findRowStart($offset)
        {
            $rowStart = strrpos($this->tempDocumentMainPart, '<w:tr ', ((strlen($this->tempDocumentMainPart) - $offset) * -1));
    
            if (!$rowStart) {
                $rowStart = strrpos($this->tempDocumentMainPart, '<w:tr>', ((strlen($this->tempDocumentMainPart) - $offset) * -1));
            }
            if (!$rowStart) {
                throw new Exception('Can not find the start position of the row to clone.');
            }
    
            return $rowStart;
        }
    
        /**
         * Find the end position of the nearest table row after $offset.
         *
         * @param integer $offset
         *
         * @return integer
         */
        protected function findRowEnd($offset)
        {
            return strpos($this->tempDocumentMainPart, '</w:tr>', $offset) + 7;
        }
    
        /**
         * Get a slice of a string.
         *
         * @param integer $startPosition
         * @param integer $endPosition
         *
         * @return string
         */
        protected function getSlice($startPosition, $endPosition = 0)
        {
            if (!$endPosition) {
                $endPosition = strlen($this->tempDocumentMainPart);
            }
    
            return substr($this->tempDocumentMainPart, $startPosition, ($endPosition - $startPosition));
        }
       public function setImg( $strKey, $img){
            $strKey = '${'.$strKey.'}';
            $relationTmpl = '<Relationship Id="RID" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/IMG"/>';
    
            $imgTmpl = '<w:pict><v:shape type="#_x0000_t75" style="width:WIDpx;height:HEIpx"><v:imagedata r:id="RID" o:title=""/></v:shape></w:pict>';
    
            $toAdd = $toAddImg = $toAddType = '';
            $aSearch = array('RID', 'IMG');
            $aSearchType = array('IMG', 'EXT');
            $countrels=$this->_countRels++;
            //I'm work for jpg files, if you are working with other images types -> Write conditions here
          $imgExt = 'jpg';
            $imgName = 'img' . $countrels . '.' . $imgExt;
    
          $this->zipClass->deleteName('word/media/' . $imgName);
          $this->zipClass->addFile($img['src'], 'word/media/' . $imgName);
    
          $typeTmpl = '<Override PartName="/word/media/'.$imgName.'" ContentType="image/EXT"/>';
    
    
          $rid = 'rId' . $countrels;
          $countrels++;
          list($w,$h) = getimagesize($img['src']);
    
           if(isset($img['swh'])) //Image proportionally larger side
           {
           if($w<=$h)
           {
             $ht=(int)$img['swh'];
             $ot=$w/$h;
             $wh=(int)$img['swh']*$ot;
             $wh=round($wh);
           }
           if($w>=$h)
           {
             $wh=(int)$img['swh'];
             $ot=$h/$w;
             $ht=(int)$img['swh']*$ot;
             $ht=round($ht);
           }
           $w=$wh;
           $h=$ht;
           }
    
          if(isset($img['size']))
          {
          $w = $img['size'][0];
          $h = $img['size'][1];           
          }
    
    
          $toAddImg .= str_replace(array('RID', 'WID', 'HEI'), array($rid, $w, $h), $imgTmpl) ;
          if(isset($img['dataImg']))
          {
             $toAddImg.='<w:br/><w:t>'.$this->limpiarString($img['dataImg']).'</w:t><w:br/>';
          }
    
          $aReplace = array($imgName, $imgExt);
          $toAddType .= str_replace($aSearchType, $aReplace, $typeTmpl) ;
    
          $aReplace = array($rid, $imgName);
          $toAdd .= str_replace($aSearch, $aReplace, $relationTmpl);
    
    
          $this->tempDocumentMainPart=str_replace('<w:t>' . $strKey . '</w:t>', $toAddImg, $this->tempDocumentMainPart);
          //print $this->tempDocumentMainPart;
    
    
    
          if($this->_rels=="")
          {
             $this->_rels=$this->zipClass->getFromName('word/_rels/document.xml.rels');
             $this->_types=$this->zipClass->getFromName('[Content_Types].xml');
          }
    
          $this->_types       = str_replace('</Types>', $toAddType, $this->_types) . '</Types>';
          $this->_rels        = str_replace('</Relationships>', $toAdd, $this->_rels) . '</Relationships>';
    }
    function limpiarString($str) {
            return str_replace(
                    array('&', '<', '>', "\n"), 
                    array('&amp;', '&lt;', '&gt;', "\n" . '<w:br/>'), 
                    $str
            );
    }
    
    }
    
    
    

    使用方法:



    可使用占位符替换文字和图片。

    注:图片路径必须是相对路径。


    展开全文
  • ASP.NET c# 操作word模板插入文字、图片及表格 这个资源第一次上传是在15年,反正离现在有点年代了,当年肯定是用的起得现在我不做保证哈,目前修改原因是积分太高了,我需要修改一下,意思意思就行,
  • 找了好久才调试成功,主要是导入图片设置图片尺寸比较麻烦,设置文字的demo比较多,但是很少有涉及到图片的demo ,好不容易找了一个分享一下
  • POI读取word模板 修改并生成新word

    千次阅读 2018-09-21 14:16:42
    首先来看docx版也就是2007版word 第一先遍历下文本内容 function docxWord(inputUrl) { ... // inputUrl为读取word模板路径 const url = Packages.org.apache.poi.POIXMLDocument.openPackage(inp...

    首先来看docx版也就是2007版word

    第一先遍历下文本内容

    function docxWord(inputUrl) {
            try {
                    // inputUrl为读取word模板路径   
                const url = Packages.org.apache.poi.POIXMLDocument.openPackage(inputUrl)
                const doc = new Packages.org.apache.poi.xwpf.usermodel.XWPFDocument(url)
    
                //整个文本
                let allText = doc.getParagraphs();
                //
                //获取参数data属性
                //替换文档
    
                for (var i = 0; i < allText.size(); i++) {
                    let paragraph = allText.get(i)
                    let runs = paragraph.getRuns();
                    for (var g = 0; g < runs.size(); g++) {
                        let run = runs.get(g);
                        let runstr = run.toString();
                            //0待变从第一位开始替换
                            run.setText("替换的内容", 0);
    
                        }
                    }
                }
    
                //表格
                let allTable = doc.getTables();
                 for (var i = 0; i < childTable.size(); i++) {
                let xwpfTbale = childTable.get(i)
                let rows = xwpfTbale.getRows();
                for (var g = 0; g < rows.size(); g++) {
                    let xwpfTableRow = rows.get(g);
                    let cells = xwpfTableRow.getTableCells();
    
                    for (var q = 0; q < cells.size(); q++) {
                        let xwpfTableCell = cells.get(q);
                           //如果表格中还有表格需要有递归
                           //xwpfTableCell.getTbales 是获取当前子表格
                           
                        //结束
                        let paragraphs = xwpfTableCell.getParagraphs();
    
                        for (var w = 0; w < paragraphs.size(); w++) {
                            let xwpfParagraph = paragraphs.get(w);
    
                            let runs = xwpfParagraph.getRuns();
                            for (var r = 0; r < runs.size(); r++) {
                                let run = runs.get(r);
    
                                let runstr = run.toString()
                                let reg = /\$\{(.+?)\}/g
    
                                 
                                    run.setText("替换的内容", 0);
                                }
                            }
                        }
                    }
                    // }
                }
    
            }
    
                let stream = new Packages.java.io.FileOutputStream(outinput)
                doc.write(stream);
                stream.close()
            } catch{
    
            }
        }

     

    再来看看doc版 2003版(简单的很)

    
            
            try {
                let fis = new Packages.java.io.FileInputStream(inputfill);
                let doc = new Packages.org.apache.poi.hwpf.HWPFDocument(fis);
                let out = new Packages.java.io.FileOutputStream(outinputfill);
    
                let rang = doc.getRange();
                 //text是整个文档 
                let text = doc.getDocumentText();
               
                  
                rang.replaceText("要替换的内容","替换的内容");
                //例如一个文档
               //  快把我换了 快把我换了
               //rang.replaceText("我","你")
               //  就变成了 快把你换了 快把你换了
               //表格中的文字也可以替换
                   
                  
              
                doc.write(out);
                out.close();
                // fis.close();
            } catch{
    
            }

    好了到此结束 

    点个赞谢谢

    展开全文
  • word模板运用

    2012-12-26 20:57:22
    大家知道,Word提供了各式各样的模板,在开始编辑Word文档尤其是专业性质... 下面就带大家来好好认识一下Word模板。 第一部分 Word模板的基础应用  Word模板的分类及存放位置  Word中的模板分为两类:一是系统
    大家知道,Word提供了各式各样的模板,在开始编辑Word文档尤其是专业性质的文档之前,先看看有没有现成的模板可用吧。如果有,那么大可以发挥“拿来主义”的精神,利用现成的模板来制作,这样一来,不但作品的质量会非常好,而且效率也高得多。
    

      下面就带大家来好好认识一下Word模板。


    第一部分 Word模板的基础应用

      Word模板的分类及存放位置

      Word中的模板分为两类:一是系统向导或模板,第二类为用户自定义模板。

      Word的系统向导或模板安装在 X:\Program Files\Microsoft Office\Templates\2052文件夹中,其扩展名是WIZ(向导)和DOT(模板)。

      用户自定义模板存放的位置会由于Windows版本的不同而不一样:对于Windows 2000/NT/XP用户,自定义模板会放到C:\Documents and Settings\用户名\Application Data\Microsoft\Templates文件夹下;如果使用Windows 9x/Me,模板会被放置到 C:\Windows\ApplicationData\Microsoft\Templates 文件夹下。(X为安装OFFICE软件的目标盘符)

      使用现成的Word模板

      Office XP本身准备了很多精美模板,只要选择“文件”→“新建”,在Word窗口右侧会出现“新建文件”窗口任务格,单击“根据模板新建”下的“通用模板”项目弹出“模板”选择窗口。

      在这里所有模板已经分门别类放置好了,有常用、Web页、报告、备忘录、出版物、其他文件、信函和传真、英文向导模板等几类向导或模板,而且可以单击相应标签打开,其中会有相应模板文件名及模板描述信息,并可预览。

      选中自己需要的模板,然后单击“确定”按钮即可打开已经套用该模板的新文件。有的模板可能还会打开向导窗口要求进行一些参数的选择与设置。如图1:

      安装外部Word模板

      模板是以文件的形式存放的。因此,如果从网上或光盘上找到一些Word模板,只要把它们拷贝到 C:\Documents andSettings\用户名\Application Data\Microsoft\Templates文件夹下(Windows2000/XP用户)或C:\Windows\ApplicationData\Microsoft\Templates文件夹下即可(Windows 9x/Me用户)。

      删除不必要的Word模板

      如果不需要太多模板,或觉得安装了太多模板,可打开“资源管理器”,进入用户自定义模板文件夹,再把相应的模板文件删除掉即可。

      对Word模板加密

      如果不想别人使用Word提供的通用模板(Normal.dot)或自己精心创作的一个模板,又该怎么办呢?这时可以对该模板进行加密:

      打开通用模板文件Narmal.dot(其它模板文件做法相同),然后在“工具”/“选项”/“安全性”选项卡中的“此文档的文件加密选项”区的“打开权限密码”中对其设置密码,再按下工具栏上的“保存”按钮。以后每次启动Word时,就会提示输入密码了。如果有密码当然可以使用,没有密码,就无法使用此模板,如图10:

      使用多个Word模板

      默认情况下,Word只能支持惟一的默认模板,这往往不能满足我们的需求。其实你可以让Word使用多个模板:

      先在一个文件夹下右击,选择“新建”→“MicrosoftWord文档”生成几个Word文件,然后分别用Word打开它们,按照自己的要求对这些文件进行处理,最后选中它们,右击鼠标,选择“属性”,在打开的“属性”窗口中选中“只读”前的小勾,把多个“模板”文件设置成只读文件。

      以后要应用某一个“模板”文件时,只要双击它,此时Word会打开一个以当前选中的“模板”文件为蓝本的“只读”文件,只要按下Ctrl+S键,Word就会弹出“另保存”对话框供我们另存文件,而且原来“模板”文件中的内容并不会被覆盖。利用这种方法理论上可以实现无数个“模板”。

      共享模板

      对局域网中的用户来说,自定义模板可以让网络上的其他用户共享。具体做法是:将自定义模板放入某个共享文件夹中,并为该共享文件夹建立一个快捷方式。网络上的其他用户可以把这个快捷方式放入自己的 C:\Program Files\MicrosoftOffice\Templates\2052 文件夹中,然后就能像本地安装的模板那样调用了。


    第二部分 Word模板的编辑与修改

      创建自己的Word模板

      有时可能对那些制作精致的样式“爱不释手”,那么可不可以把别人做好的样式引用到自己的模板文件中来呢?答案是肯定的,方法就是把其它模板或文档中样式引用到自己的模板中来,从而得到自己的模板。

      下面的操作只是简单地学习创建的方法,而实际中的运用水平如何,还取决于对样式和模板使用经验的积累程度。

      1.启动Word,进入程序主界面后,选择菜单“文件→新建”命令,显示“新建文档”任务窗格。单击任务窗格“模板”区的“本机上的模板”,打开“模板”对话框,选择“常用”选项卡,选中“空白”项,然后选中“新建”区的“模板”单选框,单击“确定”后创建了一个新的空白模板。

      2.接下来,假设要把Word提供的“典雅型报告”模板中的“块引用”和“标题2”样式引用到当前的模板,以创建自己模板。选择菜单“工具→模板和加载项”命令,打开“模板和加载项”对话框,单击“管理器”按钮,出现“管理器”对话框,如图2:

      3.单击“管理器”对话框右侧“在Normal中(N)”区下方的“关闭文件”按钮,清除标准模板Normal中的样式列表。刚才的“关闭文件”按钮并为“打开文件”按钮,单击“打开文件”按钮,在显示的“打开文件”对话框内中定位至 D:\Program Files\MicrosoftOffice\Templates\2052文件夹(假设Office安装在D盘),然后选中“典雅型报告”后,单击“打开”按钮如图3:

      小提示:C:\Program Files\Microsoft Office\Templates是Word提供模板的保存位置,注意和前面Word用户创建模板的默认保存位置区别。

      4.返回“管理器”对话框,可以看到“典雅型报告”模板中的样式均列在右边的列表中,然后选中要引用到自己模板的样式“标题2”,再单击“复制”按钮即可如图4。拖动样式框滚动条,找到“块引用”样式,用同样的方法复制到自己的模板中去。

      5.完成操作后单击“关闭”按钮,返回Word编辑窗口,打开“样式和格式”任务窗格,可以看到“标题2”和“块引用”样式,已被引入到自己的模板中如图5:

      6.用同样的方法可以引用其它模板或文档中的样式,最后单击工具栏上的“保存”按钮,在弹出的“另存为”对话框中设定好模板的名称,采用默认保存位置,即可完成模板的创建。

      7.为了使模板更加完善,大家还可以细心定义其他的细节。

      首先,一定不要忘记根据模板的性质,设计合适的样式集合。设计的时候要注意命名规则、不同段落样式的相互关系、格式的统一性等等问题。想了解样式的奥妙,可以试用一下Word提供的“中文报告”等模板,仔细揣摩一下不同样式之间的关系;

      其次,用户还可以为模板定义专门的自动图文集,供用户快速插入一些文本和图片。

      最后,大家还可以根据自己的实际水平和文档性质,重新定义工具栏按钮。这样,当使用特定模板的时候,Word的外观也会相应地起变化,把编辑此类文档最常用的按钮呈现在最合适的位置。

      小提示:直接把DOC文件另存为模板的方法是不可取的,那样做获得的模板会缺少许多功能,如“自动图文集”中的词条不能用等。

      修改、改造已有模板

      Office XP本身带有大量各式各样的文件模板,但有些在使用时可能并不尽如人意。这时,可以自己来修改已有的文件模板,使它更符合使用者的要求。

      选择“文件”→“新建”,再单击“根据模板新建”下的“通用模板”项目弹出“模板”选择窗口,从中选择一个类别,如“信函和传真”,然后选择“典雅型信函”,再依次在相应位置填入“公司名称”、“职务”、“姓名”等信息,最后单击“文件”→“另存为”,在“另存为”对话框的“保存类型”下拉框中选择“文件模板”,并默认保存在模板文件夹下。以后使用时,只要选择“文件”→“新建”,就能在“常规”模板标签中看到刚才制作的模板,双击后即可使用自己修改后的模板了,如图6:

      下面再修改一下默认页面大小,选择“文件”→“页面设置”,将页面大小及上下左右边距设置自己所需的值,再单击“纸张”标签,在其中定义页面的宽度和高度。最后按下窗口左下方的“默认”按钮,此时会出现一个修改默认模板的窗口,按下“是”按钮,如图7。

      重新启动Word,这时新建的文件已经自动缩进,且页面也窄了许多,说明刚才的设置已经生效了。

      小提示:现在网上有很多英文的Word模板文件,大家可以把其中的英文信息改为中文的,再保存成模板,这样就可以更好地为自己所用。

      生成稿纸文件模板

      选择“文件”→“新建”,在右边窗格中出现的“新建文件”窗口任务格中单击“根据模板新建”下的“通用模板”项目,然后在弹出“模板”对话框,单击“报告”标签,并双击其中的“稿纸向导”项目,系统会提示插入Office XP安装光盘,就可以成功安装稿纸模板。

      接下来,就可以顺着向导按下“下一步”按钮继续;接下来选择稿纸大小及方向,再选择稿纸网络线种类,并设置字数和行数和网格方式,设置页号位置。最后,单击“完成”按钮即可生成一个空白的个性稿纸方式文件。

      制作专业套打效果模板

      首先用扫描仪把表格扫描成图片文件,在Word中选择“插入”→“图片”→“来自文件”,然后把扫描后的表格文件插入到文件中。选择“文件”→“页面设置”,调整纸张大小与表格文件的原始尺寸一致,然后右击该图片并选择“设置图片格式”,在弹出的对话框中选择“版式”标签,然后选择“衬于文字下方”,调整图片使其正好覆盖整个页面。

      接着在需要打印的空栏处插入文本框,调整其大小正好和表格图片的空栏尺寸一致。然后右击文本框,在弹出的快捷菜单中选择“设置文本框格式”,设置该文本框的“颜色与线条”为“无线条颜色”。

      按照上述步骤插入多个文本框,最后选中所有文本框,再单击鼠标右键,选择“组合”将它们组合在一个对象。

      接着在文本框中单击左键,选择菜单“插入”→“域”,在弹出的对话框中,选择“域名”为MacroButton,宏名为AcceptAllChangeShown,在显示文字中输入提示文字。

      最后将文件中的图片删除,并把新建的文件保存为模板即可。

    下次使用时,调用此模板,将光标移到文本框中,输入相关内容确定后就可以打印了,非常方便的,如图9:

      小提示:大家也可以用它来制作多种票据的模板,并把它们拷贝给同事,就可以实现模板的共享了。

      快速修改Word默认模板

      启动Word,按下Ctrl+N键新建一个空文档,选择“工具(T)”→“自定义(C)…”,选择“命令”选项卡,在这里用户可以定制自己的工具栏,按窗口提示做就可以了。注意窗口下方的“保存于(S):”,当单击“关闭”按钮时,定制的工具栏就被保存在Normal.dot中了,如图11:

      在上面的窗口中单击“键盘(K)…”,弹出“自定义键盘”窗口,先选择“类别(C)”,再选择“命令(O)”,鼠标位于“请按新快捷键(N):”框中,这里是按住键盘上的二个键:Ctrl+D,窗口显示如图12:

      用鼠标点击左下角按钮“指定(A)”,关闭窗口回到文档编辑状态便可使用。注意窗口中的“将更改保存在(V):”框,当单击“关闭”按钮时,定制的键盘快捷键就被保存在Normal.dot中了。

      快速制作Word默认模板

      启动Word,按下Ctrl+N键新建一个空文档,选择“文件”→“页面设置”,并对页边距、纸张及版式进行设置。完成后单击一下设置对话框最左下角的“默认”按钮。并在Word弹出的提示窗口中单击“是”按钮。以后每次运行Word,Word都会以此模板为蓝本新建文件。


    第三部分 Word模板的另类应用

      使用其它模板改变当前文档样式

      文档制作完成后,可以通过“格式”菜单下的“主题”命令,使用“样式库”选择其它模板,一次性替换当前文档的样式组合,让文档以新模板中的样式风格显示。具体操作方法如下:

      在当前文档打开的情况下,选择菜单“格式→主题”命令,打开“主题”对话框,单击“样式库”按钮,显示“样式库”对话框,在左侧的“模板”列表框中选择一个模板,比如“典雅型报告”,单击“确定”按钮如图13,返回Word编辑界面,可以看到当前文档的外观按照“典雅型报告”模板的样式风格显示。

      小提示:该方法也可以用于已把文档制作完成后,发现先前为文档选择的模板并不适合,需要为文档更换一个模板的情形。

      右击建立个性Word文档

      进入C:\Documents andSettings\用户名\Templates文件夹,在空白处右击,选择“新建”→“Microsoft Word文档”新建一个Word文件,命名为winword8.doc。双击winword8.doc,然后对其中的字体、字形、页面大小等作一些个性设置,并保存该文件。

      以后在“资源管理器”中右击鼠标,选择“新建”→“Microsoft Word 文档”,再双击新建的文档,就会发现,它已经套用了在winword8.doc中的设置了,从而可以使用自己的个性化Word。

      用Word模板批量转换文件

      如果经常要一次转换多个文件,可通过Word的模板来完成:

      先把要转换的文件放到一个文件夹中,然后启动Word,再选择“文件”→“新建”,并在“新建文件”窗口任务格中选择“通用模板…”,在弹出的“模板”窗口中单击“其它文档”选项卡,双击其中的“转换向导”图标,单击“确定”按钮。此时WordXP会弹出文件转换向导,直接按“下一步”按钮继续。接下来选择转换类型,设置源文件夹和目标文件夹,再选择转换文件,进行转换即可。也可以直接双击X:\Program Files\Microsoft Office\Templates\2052\下的文件“转换向导.Wiz”,如图8:

      获得更多模板资源

      如果觉得Word中内置的模板不能满足需要,大家可以通过从网上下载更多的模板:

      选择“文件”→“新建”,就可以看到“新建文档”任务窗格,注意最下面的“Microsoft.com上的模板”链接。单击后,即可打开该站点上的中文模板库。其中提供了很多类别的模板,非常丰富。只要单击网页上的模板类型链接,就能在网页上看到该类模板的名称和提供商等内容。

      单击模板名称,并在“模板最终用户许可协议”窗口中单击“同意”按钮,同时单击“在MicrosoftWord中编辑”,IE会将模板下载到硬盘,完成后自动用WordXP打开模板。如果对模板效果满意,再用“另存为”将它保存为模板,就可以像普通模板那样调用了。

      小提示:在重新安装系统之前,必须对自定义模板文件夹中的模板文件作一个备份,否则会丢失喔。

      坏事的Normal.dot模板

      有时点击Word图标,它却没有启动,反而出现一个错误信息。重装都无济于事,严重时,甚至不能卸载和重装Word。一般情况下,这是由于Word的Normal.dot模板文件损坏所造成的,可以通过系统的查找工具找到该文件,然后将其删除,这时Word会自动重建一个新的Normal.dot文件,并恢复正常。

      利用模板让Word文件自动备份

      默认情况下Word文件是不能自动备份的。不过,可以通过下面的技巧让它具有自动备份功能:启动Word并新建一个空白文件,单击“工具”菜单中的“保存选项”,在“保存”对话框中,选中“保留备份”复选框。同时,勾选“自动保存时间间隔”复选框,再在后面设置一个时间间隔,时间越小,保存越频繁。

      完成后,单击“确定”按钮。然后单击“文件”→“另存为”,在“另存为”对话框“保存类型”下拉框中选择“文件模板”,再在“文件名”中输入:ct.dot,然后把它保存到C:\Documents and Settings\Administrator\ApplicationData\Microsoft\Templates文件夹下(Windows 9x/Me则保存到C:\Windows\ApplicationData\Microsoft\Templates文件夹中)。

      关闭Word,启动“资源管理器”,切换到C:\Documents andSettings\Administrator\ApplicationData\Microsoft\Templates文件夹下,将Normal.dot删除或者改名,将刚才保存的cfan.dot重命名为Normal.dot。以后使用Word编辑文件时,每次保存文件,Word都会保存一个副本文件,并以.wbk为扩展名与原文件保存在同一文件夹中。如果哪一次文件发生损坏,就可以选择“文件”→“打开”,在“打开”对话框的“文件类型”中选择“所有文件”,然后找到这个WBK文件,再打开即可。

    展开全文
  • 可以用C#,引用office word,通过word模板新建一个word文档。代码包括了复制,修改,插入,光标定位,可以进行word表格创建,修改,复制,粘贴,插入文字,图片。另存文件等功能。
  • Word模板导出

    2021-03-17 23:50:35
    Word模板导出 制作导出模板 1、创建word模板,添加替换数据的占位符 2、保存模板为XML格式 3、修改文件后缀,改为ftl 4、添加FreeMark标签(Ctrl+Alt+L格式化文件) 5、添加FreeMark标签 编写替换代码 /** ...

    Word模板导出

    制作导出模板

    1、创建word模板,添加替换数据的占位符

    在这里插入图片描述

    2、保存模板为XML格式

    在这里插入图片描述

    3、修改文件后缀,改为ftl

    做备份是个好习惯

    4、添加FreeMark标签(Ctrl+Alt+L格式化文件)

    在这里插入图片描述

    5、添加FreeMark标签

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    编写替换代码

    	/**
         * 导出word
         * @param dataMap 数据集
         * @param templateName 模板名称
         * @param fileName 导出的文件名
         * @param response
         * @param request
         */
        private void createDoc(Map<String, Object> dataMap, String templateName, String fileName, HttpServletResponse response,
                               HttpServletRequest request) throws IOException, TemplateException {
            String templatePath = "templates" + File.separator + templateName;
            ClassPathResource classPathResource = new ClassPathResource(templatePath);
    
            // 将模板文件拷贝到临时文件夹
            InputStream templateStream = classPathResource.getInputStream();
            String templatePrefix = "template-";
            File templateFile = File.createTempFile(templatePrefix, templateName);
            try {
                FileUtils.copyInputStreamToFile(templateStream, templateFile);
            } finally {
                IOUtils.closeQuietly(templateStream);
            }
            // freemarker 模板文件夹设置
            Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
            cfg.setDefaultEncoding("utf-8");
            cfg.setOutputEncoding("utf-8");
            cfg.setDirectoryForTemplateLoading(new File(templateFile.getParent()));
    
            // 临时文件,生成 word 文档
            File outFile = File.createTempFile("doc-" + fileName, ".doc");
            FileOutputStream fileOutputStream = new FileOutputStream(outFile);
    
            // 将模板和数据模型合并生成文件
            Writer writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8));
    
            // 生成文件
            Template template = cfg.getTemplate(templateFile.getName());
            template.process(dataMap, writer);
            // 关闭流
            writer.flush();
            writer.close();
            fileOutputStream.flush();
            fileOutputStream.close();
    
            // 文件写入输出流
            byte[] bFile = Files.readAllBytes(outFile.toPath());
            OutputStream out = response.getOutputStream();
            fileName = getFileName(fileName, request);
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName  + ".doc");
            response.setContentType("application/octet-stream;charset=UTF-8");
            out.write(bFile);
            out.flush();
            out.close();
            outFile.deleteOnExit();
        }
    	
    	/**
         * 对文件名进行转码
         * @param fileName
         * @param request
         * @return
         */
        private String getFileName(String fileName, HttpServletRequest request) {
            String header = request.getHeader("User-Agent");
            try {
                if (header.toLowerCase().indexOf("firefox") > 0) {
                    fileName = new String(fileName.getBytes(StandardCharsets.ISO_8859_1), "ISO8859-1");
                } else if (header.toUpperCase().indexOf("MSIE") > 0) {
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                } else {
                    fileName = URLEncoder.encode(fileName, "UTF-8");
                }
            } catch (UnsupportedEncodingException e) {
            	logger.debug("文件名转码失败!", e);
            }
            return fileName;
        }
    

    附录

    附录1

    word标签

      <w:body>//文档主体
        
        <w:tbl>//表格
          <w:tblPr>//表格属性
            ……
          </w:tblPr>
          <w:tblGrid>//表格列宽
            <w:gridCol w:w="xxx"/>
            <w:gridCol w:w="xxx"/>
          </w:tblGrid>
          <w:tr w:rsidR="00BD68AB">//表格的一行
            <w:trPr>//表格行属性
              <w:trHeight w:val="427"/>
            </w:trPr>
            <w:tc>//表格的一个单元格
              <w:tcPr>//单元格属性
                ……
              </w:tcPr>
              <w:p>//一个段落
                <w:pPr>//段落属性
                  <w:jc w:val="center"/>//设置内容居中
    			  <w:spacing w:line="360" w:lineRule="exact"/>//设置行距(line为行距值,240为单倍行距,以此类推)
                  <w:rPr>//设置区域内文本属性
                    ……
                  </w:rPr>
                </w:pPr>
                <w:r>//表示一个样式串,指明它包括的文本的显示样式
                  <w:rPr>//设置区域内文本属性(与<w:pPr>标签内属性一样)
                    ……
                  </w:rPr>
                  <w:t>………………</w:t>//文字内容(真正能看到的,前面的若干行都是为这一行做铺垫)
    			  //注;文字内容可以写死,也可以动态取值,如:${Detail1.companyName!}
                </w:r>
              </w:p>
            </w:tc>
          </w:tr>
        </w:tbl>
       
        <w:sectPr>//设置整个页面的属性
          <w:footerReference w:type="default" r:id="rId8"/>
          <w:pgSz w:w="16838" w:h="11906" w:orient="landscape"/>
          <w:pgMar w:top="851" w:right="851" w:bottom="851" w:left="851" w:header="851" w:footer="454" w:gutter="0"/>
        </w:sectPr>
    	
      </w:body>
    
    
    展开全文
  • 1 '''2 #word模板套用2:套用模板3 '''45 #导入所需库6 from docx importDocument7 '''8 #另存word文档后格式丢失的问题要导入库设定word文档的初始格式9 from docx.shared import Pt10 from docx.oxml.ns import qn...
  • 一、创建word模板word模板如图:二、将word模板转pdf模板。三、用Adobe Acrobat Pro打开pdf模板。四、编辑模板域,即要填写的内容。点击表单选择添加或编辑域选项:双击可以 修改域的变量名及样式字体的设置。...
  • * 模板下载 * 1.先获取模板,读取模板中的段落信息; * 2.解析段落信息,看究竟查询哪一个流程的信息(通过流程名称去380中查询id后再去500中查询具体数据) * 3.替换模板中段落里面的标签信息,例如$(A),替换为1; * ...
  • 比如说,freemaker生成word文件的版本是97-2003,而我本地word版本是2016,如果我直接将2016的word模板转化成ftl导入使用,那么freemaker不会认识2016版本的标签,会报错。 第二,word xml 不插入变量的时候,可以...
  • 通过POI可实现根据word模板替换文中或者表格的关键字(包括给定表头动态追加表格)。业务需求我是在模板中直接插入图片(例如衬于文字下方),所有代码中没有插入图片代码。
  • java基于word模板分分钟动态生成word及输出pdf
  • 此为电子小报/手抄报的word模板-关于心理健康相关的主题。有需要的可以下载使用,只需要修改文字内容,应用性良好。
  • 上一篇博客我实现了更新word模板里面的文字内容,但是,产品经理又有了新的想法,觉得只有文字的word文档看起来比较单调,需要穿插一些图片,师文字看起来更丰富多彩。 代码实现 模板的定义我们参考上一篇文章:...
  • 如何Word修改Normal样式模板

    千次阅读 2019-04-14 18:39:14
    如何在Word2016中修改Normal样式模板 word中样式的作用 样式的最大作用是帮助我们管理一篇文档中有相同格式的文字或段落,是自动生成文档目录的第一步。 可能在写几页word文档还体现不出它的优势,一旦涉及很多页的...
  • 使用word模板生成word文档的各类方案生成word的各种方案word另存xml进行后续处理2003版本word(.doc)的xml处理并生成word2007版本word(.docx)的xml处理poi直接操作word对象进行文本替换生成word使用poi-tl库对模板...
  • freemarker 简介: FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。...它不仅可以用作表现层的实现技术,而且还可以用于...找到Word模板文件,将文件另存为*xml 格式 修改xml 文件,添加...
  • java操作word模板,动态替换标识内容

    热门讨论 2012-02-28 18:51:10
    在下载word模板.rtf过程中,将模板中约定的标识内容替换为需要的信息。省时省力很方便。
  • Java导出数据到Word模板

    千次阅读 2019-09-23 18:21:46
    Java导出数据到Word模板.前言网上的方案需求介绍模板简介使用体验poi-tlFreemarker操作步骤总结 前言 相信很多人都会遇到Java导出的业务,Java导出主要有导出数据到Excel和Word,但是相比较而言对于导出数据到Excel的...
  • 在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档。如放假通知、工作日志、工作周报、合同等。以往都要打开,修改,保存,犹如机械...1在Python编程语言当中,操作Word模板,需要用到pyt...
  • Java实现freemarker生成word模板

    千次阅读 2017-06-29 15:15:31
     本文要介绍的就是如何生成模板,并将从源文件截取的内容填充到模板文件(即生成目标文件)的过程,读取源文件内容的方法请阅读博主另一篇文章《Java实现poi方式读取word文件内容》。 1.准备工作  jar包----------...
  • 简历模板-word可编辑

    2018-10-17 10:08:24
    word建立模板,可以在word修改文字,插入照片,插入学校校徽
  • .Net NPOI Word模板关键内容替换

    千次阅读 2019-04-26 17:34:32
    一、问题需求 在开发的一个项目中,需要根据给定的文档模板,将...第二页的数据会显示在封面中,而且使用SetLeading也无法把控间距,后来想到了,使用Word模板,将需要替换的内容设置成固定的标签,然后将新的word...
  • 勿在未经授权的情况下上传任何涉及著作权侵权的资源,除非该资源完全由您个人创作
  • java模板导出word

    千次阅读 2018-11-19 00:50:55
    只需配置好word模板,自动替换指定的模板变量为具体数据,自动导出word 支持导出doc和docx 支持word内有静态图片导出 支持word静态图片上有文字导出 支持中文名word文件导出 解决思路 本demo采用的解决思路...
  • POI操作word模板并生成新的word.docx

    千次阅读 2018-09-29 14:57:40
    XWPFDocument对象 ...POI是apache提供的可以操作word文档的第三方jar。POI能操作word是使用XWPFDocument对象。 XWPFDocument对象可以解析docx文件,在XWPFDocument对象通过输入流解析docx的时候,会获取...
  • 读取word模板,并写入数据到word文件中
  • C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法,在网上找到了通过模板文件导出Word的方法,记录一下过程. 一:模板的创建 ...
  • 【基础】制作word模板

    2020-06-09 19:13:37
    我发现word文档说简单也简单,说复杂也挺复杂,有些人写了很多文档,可能也只是用到了word里极少的一部分功能,因为之前有人会把一个word模板交给我去代码实现,他觉得自己做的word非常完美,但是我实际去看的时候,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,065
精华内容 6,826
关键字:

word模板修改文字