From 91b2d64cadb410be7797023aa630a99a1b9a7648 Mon Sep 17 00:00:00 2001 From: wlx Date: Thu, 3 Nov 2011 02:37:24 +0000 Subject: [PATCH] add docAction --- .../default/controllers/ServiceController.php | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/application/default/controllers/ServiceController.php b/application/default/controllers/ServiceController.php index 2de371fb..020d1368 100644 --- a/application/default/controllers/ServiceController.php +++ b/application/default/controllers/ServiceController.php @@ -255,6 +255,95 @@ class ServiceController extends Zend_Controller_Action } + /* + * 转换元数据为WORD DOC格式 + */ + public function docAction() + { + $this->_helper->layout->disableLayout(); + $this->_helper->viewRenderer->setNoRender(); + $uuid=$this->_request->getParam('uuid'); + $review=$this->_request->getParam('review'); + if (!empty($uuid)) + { + $sql="select x.data,m.title,m.description,g.id,m.projection from xml x left join metadata m on m.id=x.id left join geonetworkmetadata g on g.uuid=m.uuid where m.uuid=".$this->db->quote($uuid); + $row=$this->db->fetchRow($sql); + $sql="select r.* from reference r left join mdref m on m.refid=r.id where m.uuid=?"; + $sql=$this->db->quoteInto($sql,$uuid); + $ref=$this->db->fetchAll($sql); + $reference='
    '; + foreach($ref as $refer) + { + $reference.='
  1. '.$refer['reference'].'
  2. '; + } + $reference.='
'; + if (is_numeric($row['projection'])) + { + $sql="select proj4text from spatial_ref_sys where auth_srid=?"; + $rs=$this->db->fetchRow($sql,array($row['projection'])); + if ($rs) $projection=$rs['proj4text']; + } + if (empty($projection)) $projection=$row['projection']; + } else + $projection=''; + + $dom = new DOMDocument(); + $dom->loadXML($row['data']); + //提前对表格进行预处理 + $wiki=new WikiFormat(); + $abs=$wiki->parseTable($this->view->escape($row["description"])); + //处理外部链接 + $abs=preg_replace('/\[\s*(http:\/\/.+?)\s+(.*?)\]/m','$2',$abs); + $abs=str_replace(array("\r\n", "\n", "\r"),'

',$abs); + $abs=str_replace("'","'",$abs);//not needed? + $id = $row['id']; + $thumburl=sprintf('%05d',floor(($id+0.1)/100)*100).'-'.sprintf('%05d',ceil(($id+0.1)/100)*100-1)."/".$id; + $xslt = new XSLTProcessor(); + $xslt->registerPHPFunctions(); + $xslt->setParameter('', 'thumburl', $thumburl); + $xslt->setParameter('', 'abstract', $abs); + $xslt->setParameter('','projection',$projection); + $xslt->setParameter('','reference',$reference); + $XSL = new DOMDocument(); + $XSL->load( '../data/doc.xsl', LIBXML_NOCDATA); + $xslt->importStylesheet($XSL); + $content=' +'; + $content.=''.$row['title'].''; + $content.=' + + '; + $content.=$xslt->transformToXML($dom); + if ($review==1) $content.=file_get_contents('../data/review-table.htm',true); + $content.=""; + $this->getResponse()->setHeader('Content-Type', 'application/vnd.ms-doc') + ->setHeader('Content-Disposition','attachment; filename="'.$row['title'].'.doc"') + ->setHeader('Content-Length', strlen($content)) + ->setHeader('Content-Type','application/force-download') + ->setHeader('Content-Type','application/download') + ->setHeader('Content-Description','File Transfer') + ->setHeader('Content-Transfer-Encoding','binary') + ->setHeader('Expires',0) + ->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0') + ->setHeader('Pragma','public') + ->setBody($content); + } /* * 转换元数据为PDF格式