精华内容
下载资源
问答
  • word模板修改文字
    2021-04-28 10:11:16

    一、首先composer安装PHPword,就不多说了

    二、然后是把模板中要替换的部分用变量代替

    三、把原始的模板文件放入项目目录,tp框就放在了public/upload/目录下

    四、

    查看php.ini中是否已经开启了com.allow_dcom = true

    从php/ext/里面查找一下有没有这个php_com_dotnet.dll这个文件

    如果没有网上下载个,一般都会有的吧应该大概可能。。

    然后查找这个php.ini里面查找下#extension=php_com_dotnet.dll把前面的#号去掉

    如果找不到就复制,手动添加一下

    然后输出下phpinfo()

    看看有没有com_dotnet

    COM support enabled

    DCOM support enabled

    .Net support       enabled

    表示COM组件开启成功

    五、

    然后新建一个php文件在里面写上:

    $com = new COM('word.application');  (#注意word.application 是电脑中必须有word文档才可以的)

    echo $com;

    如果没错的话应该会显示    Microsoft Word

    说明COM扩展已经安装完成了!

    四、代码

    1 public function word2pdf()

    2 {

    3

    4

    5 $server=$_SERVER['DOCUMENT_ROOT'];

    6 // $filenamedoc =$server.'/upload/basedoc/one.docx';

    7 $filenamedoc =$server.'/'.$templet['url'];//模板路径

    8 $filenamepdf = $server.'/upload/basedoc/one'.$templet['id'].'_new.docx';//替换变量,新的word路径

    9 $fiel='/upload/basedoc/one'.$templet['id'].'_new'.time().'.pdf';//word转换pdf路径

    10 $pdf = $server.$fiel;

    11 $tmp=new \PhpOffice\PhpWord\TemplateProcessor($filenamedoc);//打开模板

    12 $tmp->setValue('name',$sq);

    13 $tmp->setValue('hcwz',$hcwz);

    14

    15 $tmp->setValue('ayear',$apply_date_y);

    16 $tmp->setValue('amonth',$apply_date_m);

    17 $tmp->setValue('aday',$apply_date_d);

    18

    19 $tmp->setValue('year',date("Y",time()));

    20 $tmp->setValue('month',date("m",time()));

    21 $tmp->setValue('day',date("d",time()));

    22 $tmp->setValue('mishu',$mishu);//${year}年${month}月${day}

    23 $tmp->saveAs($filenamepdf);//另存为

    24 $url=word2pdf($filenamepdf,$pdf);

    25 return config("PdfUrl").$fiel;

    26

    27 }

    function word2pdf($srcfilename,$destfilename)

    {

    try {

    if(!file_exists($srcfilename)){

    unlink($srcfilename);

    }

    $word = new \COM("word.application") or die("Can't start Word!");

    $word->Visible=0;

    $word->Documents->Open($srcfilename, false, false, false, "1", "1", true);

    $word->ActiveDocument->final = false;

    $word->ActiveDocument->Saved = true;

    $word->ActiveDocument->ExportAsFixedFormat(

    $destfilename,

    17, // wdExportFormatPDF

    false, // open file after export

    0, // wdExportOptimizeForPrint

    3, // wdExportFromTo

    1, // begin page

    5000, // end page

    7, // wdExportDocumentWithMarkup

    true, // IncludeDocProps

    true, // KeepIRM

    1 // WdExportCreateBookmarks

    );

    $word->ActiveDocument->Close();

    $word->Quit();

    } catch (\Exception $e) {

    if (method_exists($word, "Quit")){

    $word->Quit();

    }

    return;

    }

    }

    标签:tmp,setValue,word,phpword,tp5,date,php,com

    来源: https://www.cnblogs.com/wrld/p/11704389.html

    更多相关内容
  • ASP.NET c# 操作word模板插入文字、图片及表格 这个资源第一次上传是在15年,反正离现在有点年代了,当年肯定是用的起得现在我不做保证哈,目前修改原因是积分太高了,我需要修改一下,意思意思就行,
  • 可以用C#,引用office word,通过word模板新建一个word文档。代码包括了复制,修改,插入,光标定位,可以进行word表格创建,修改,复制,粘贴,插入文字,图片。另存文件等功能。
  • 修改word文档模板

    2020-07-05 00:22:52
    在使用word工作的过程中,大家会发现word模板默认的格式很多不符合我们实际工作的需求,比如标题/字体/行间距等等,那怎么修改word默认的模板呢?使得我们每次新建word都是我们自定义的格式呢?这样就不需要每次新建...

    简介

    在使用word工作的过程中,大家会发现word模板默认的格式很多不符合我们实际工作的需求,比如标题/字体/行间距等等,那怎么修改word默认的模板呢?使得我们每次新建word都是我们自定义的格式呢?这样就不需要每次新建word都重新修改字体样式等,一劳永逸~

    注意,其它比如设置ppt的模板等也是同样的的操作过程。

    方法一:直接在Word默认载入的模板文件上修改

    1. 找到新建word时默认载入的模板文件。一般情况是在
      C:\Users\Administrator\AppData\Roaming\Microsoft\Templates 文件夹下,文件名是Normal.dotm (后缀dotm就是word的模板文件)

    2. 直接点开Normal.dotm,对字体行间距等进行格式修改,之后保存。
      在这里插入图片描述
      注意!需要保存成dotm文件,另存于另外的地方,比如命名 doc1.dotm(此时不能直接改为Normal.dotm,可能会导致修改失败)。

    3. 把doc1.dotm重命名为Normal.dotm,拷贝覆盖C:\Users\Administrator\AppData\Roaming\Microsoft\Templates下的Normal.dotm

    4. 以上就大功告成了。(PS:如果怕出错可以先备份原Normal.dotm后再覆盖)
      在这里插入图片描述

    方法二:新建自定义的dotm模板,每次新建word手动选择加载

    1. 新建word,之后直接修改字体等各种格式,把文件保存为dotm文件(会自动调至自定义office模板这个文件夹)
      在这里插入图片描述
    2. 新建word,点击菜单栏的文件—新建----个人,选择之前保存的自定义模板即可~操作如下图
      在这里插入图片描述
      参考链接
      https://blog.csdn.net/zhanghm1995/article/details/81009565
    展开全文
  • 主要介绍了Java 替换word文档文字,指定位置插入图片功能,本文通过实例代码给大家讲解,需要的朋友可以参考下
  • java 制作word模板

    千次阅读 2020-10-29 16:54:49
    背景:用于实现动态调整word模板中的内容 条件:office组件中格式为docx的word文件 对象与属性关系,如图所示

    背景:用于实现动态调整word模板中的内容

    条件:office组件中格式为docx的word文件

    对象与属性关系(一个学生对应一个同桌及N门学科),如图所示

    一、原生模板

    二、配置参数属性

    1、当前对象的属性,直接写属性名称即可:${属性名}

    2、属性为多选或单选的格式:eq \o\ac(□,${属性名[从0 开始的下标]!}) 

    (1)按图所示操作,找到

    (2)打开域代码

    (3)复制格式进去,并修改属性名称和下标,调整好后记得点击“确定”按钮进行保存

    (4)效果

    (5)有了第一个样式,第1+N个的时候可以直接复制过去,然后再进行调整

    A、复制

    B、选中当前代码(上图标红的部分),右键,选择“编辑域

    C、同样打开“域代码

    D、调整下标,调整完毕后,点击“确定”按钮进行保存

    整体效果

    PS:需要注意的是,当出现这类型的属性时,需要在实体中的属性get方法上加入@WordField(title = "标题,可不写",num=个数)

    3、当前对象中对象的参数,从第二个对象开始写,且与属性之间用下划线"-"拼接:${二级对象_属性名}

    4、list数组格式,需要注意的是不用加"[]":${二级对象和下标_属性名}

    三、制作模板

    1、将文件改成zip的压缩模式,注意,直接重命名改后缀,不要使用压缩!!!另外得是zip后缀的,rar等其他压缩格式不行!!!

    2、解压文件,使用解压插件解压

    3、找到document.xml文件

    4、打开文件document.xml,进行内容调整

    (1)去除每个参数中多余的代码(图中标红所示),每个完整的参数中间不能出现任何代码(图中标绿所示)

    (2)调整完毕后要保存文件

    5、压缩文件

    6、将压缩文件重命名为docx格式,重命名!!!

    7、至此,文件模板制作完毕

    模板使用:https://blog.csdn.net/super_DuoLa/article/details/109384791

    展开全文
  • 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
            );
    }
    
    }
    
    
    

    使用方法:



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

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


    展开全文
  • 一:需要引用的主键 ... string fileName = Application.StartupPath + @"\aramexConfig\docx\templateWord.docx";//模板 Dictionary<string, object> aramexShippmentMap = (Dictionary<string, obje..
  • Aspose.Words For .NET 生成word和pdf文件,支持利用模板替换其中的关键字和关键字替换为图片等操作。
  • JAVA实现替换WORD模板中的文字和图片

    千次阅读 2021-02-26 15:08:49
    //word文档中替换文字方法 public static void replaceContent(Map map,String wordPath){ XWPFDocument document = null; try { document = new XWPFDocument(POIXMLDocument.openPackage(wordPath)); Iterator ...
  • 此为电子小报/手抄报的word模板-关于心理健康相关的主题。有需要的可以下载使用,只需要修改文字内容,应用性良好。
  • 修改word默认模板(Normal.dotm)

    千次阅读 2022-03-24 09:42:09
    2.模板修改方法 2.1部分修改 2.2直接替换 3.结语 相信很多小伙伴经常面临这样一个问题: 平时有大量的文字编辑工作要做,其中最繁琐的(尤其是论文)就是格式问题; 为了排版工整、符合要求,在每个word中都...
  • 本文将介绍报告模板的样式使用和修改方法、图题、标题格式说明、图和表以及公式的交叉引用等技巧。这些方法在网上逐一搜索也是可以找到解决方案的,这里对这些技巧进行整理,同时应用在样式上。可以说本文既是一个...
  • 本科毕业论文word模板, 论文撰写,格式很重要。标准论文模板;本标准以最新的GB论文撰写要求编制、适于论文发表,以及学术年会是使用。
  • asp.net修改word文字并另存为新的word及pdf,c#代码实现
  • 在复杂word文档场景下,使用模板引擎是比POI、easypoi更优的解决方案
  • 第一步:在项目中导入POI的jar包,以及相关的jar包。所需的jar包列表: 下载地址:...public class DocxUtil{/*** @Description: 将t中的字段转换成替换模板需要的数据${字段}-->字段值* 在word模板...
  • 本作品内容为全英文外企求职简历word简历免费模板, 格式为 docx, 大小1 MB, 页数为1,请使用软件Word打开, 作品中文字及图均可以修改和编辑,图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改...
  • ... ... 然后可以在新的文档里用代码写所需要的内容 如 表格,图表,...2 使用word模板,在模板里设置变量 然后替换变量就行了。这种方法简单快捷 大力推荐。 下面正式开始 1 安装phpword 我用的laravel框架 所以就用comp
  • 在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档。如放假通知、工作日志、工作周报、合同等。以往都要打开,修改,保存,犹如机械...1在Python编程语言当中,操作Word模板,需要用到pyt...
  • 简历模板-word可编辑

    2018-10-17 10:08:24
    word建立模板,可以在word修改文字,插入照片,插入学校校徽
  • Word模板-教育培训单页简历.docx
  • 《计算机工程与设计》《计算机工程与应用》期刊论文写作word模板
  • 第二步:将word文件另存为.xml格式 第三步:放到idea中的一个目录下 这里已src目录为例 第四步:修改占位符 第五步:代码示例 package com.example.demo.util; import org.w3c.dom.Document; import org.w3c.dom...
  • 这个需求源于要批量生成模板一样的word文档。当然可以直接使用word的邮件合并功能,点菜单就可以实现,示例代码如下: 要使用这些代码,需要引用2个库microsoft word,microsoft office,如果使用到客体界面的话,...
  • Word模板导出

    2021-03-17 23:50:35
    Word模板导出 制作导出模板 1、创建word模板,添加替换数据的占位符 2、保存模板为XML格式 3、修改文件后缀,改为ftl 4、添加FreeMark标签(Ctrl+Alt+L格式化文件) 5、添加FreeMark标签 编写替换代码 /** ...
  • 最近一直在做与导出这部分相关的事情,有一个就是需要将数据库中查询到的信息写入到word模板中再进行导出。下面的代码直接复制使用即可,没啥毛病,无论是段落中的,还是表格中的,都是有效的。使用过程中遇到的一些...
  • java利用word模板生成word文件(SpringBoot可以使用)
  • 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模板Normal.dotm文件的生成与替换

    千次阅读 2019-12-12 18:39:13
    Word样式模板的生成与替换欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,900
精华内容 8,360
关键字:

word模板修改文字