westdc-zf1/application/models/MetadataPDF.php

205 lines
6.7 KiB
PHP
Raw Normal View History

<?php
//生成西部数据中心离线申请表
require_once('fpdf/chinese-unicode.php');
require_once('fpdi/fpdi.php');
class MetadataPDF extends PDF_Unicode
{
public $metadata;
public $fontsize=10;
function draw()
{
$this->init();
$this->drawTitlePage();
$this->drawContent();
}
function init()
{
//$this->AddUniGBhwFont('ugb','AdobeSongStd-Light-Acro');
//$this->AddUniGBhwFont('ugh','AdobeHeitiStd-Light');
$this->AddUniGBhwFont('uGB');
$this->AddFont('uGB');
}
function DrawTitlePage()
{
$this->AddPage();
$this->Image('http://westdc.westgis.ac.cn/images/westdc_logo_white.gif',80,30,0,0,'','http://westdc.westgis.ac.cn/');
$this->SetFont('uGB','B',20);
$this->setXY(0,70);
$this->Cell(0,0,'中国西部环境与生态科学数据中心',0,2,'C',false,'http://westdc.westgis.ac.cn/');
$imgurl='http://'.$_SERVER['SERVER_NAME'].'/service/bigthumb/uuid/'.$this->metadata['uuid'];
$imgsize=getimagesize($imgurl);
if ($imgsize)
{
if ($imgsize[0]/$imgsize[1]>200/180)
$this->Image($imgurl,5,110,200,0,$this->metadata['filetype']);
else
$this->Image($imgurl,100-round(90.0*$imgsize[0]/$imgsize[1]),110,0,180,$this->metadata['filetype']);
}
$this->SetFont('uGB','B',20);
$this->setXY(0,80);
2011-11-03 04:01:13 +00:00
$this->multicell(0,10,$this->metadata['title'],0,'C');
//$this->setFont('Arial','',12);
$this->ln(10);
$this->SetFont('uGB','B',12);
$this->Cell(0,0,'UUID: '.$this->metadata['uuid'],0,2,'C',false,'http://westdc.westgis.ac.cn/data/'.$this->metadata['uuid']);
}
function DrawContent()
{
$this->addPage();
$this->setfont('uGB','',12);
//$this->setXY(15,80);
$this->multicell(0,10,$this->metadata['title'],0,'C','http://'.$_SERVER['SERVER_NAME'].'/data/'.$this->metadata['uuid']);
if ($this->metadata['title_en'])
{
//$this->setFont('times','',12);
$this->multicell(0,5,$this->metadata['title_en'],0,'C','http://'.$_SERVER['SERVER_NAME'].'/data/'.$this->metadata['uuid']);
}
$this->ln(10);
$this->setfont('uGB','',10);
$this->setFillColor(200,200,200);
$this->Cell(0,8,' 摘要',0,1,'L',true);
//$this->write(5,$this->metadata['description']);
$this->DrawTable($this->metadata['description']);
//todo: table in abstract
$this->ln(5);
$this->Cell(0,8,' 关键词',0,1,'L',true);
$this->write(5,'主题:'.$this->metadata['keyword']['theme']);
$this->ln(5);
$this->write(5,'位置:'.$this->metadata['keyword']['place']);
$this->ln(5);
$this->write(5,'时间:'.$this->metadata['keyword']['temporal']);
$this->ln(5);
$this->write(5,'学科:'.$this->metadata['keyword']['discipline']);
$this->ln(5);
$this->write(5,'地层:'.$this->metadata['keyword']['stratum']);
$this->ln(5);
$this->Cell(0,8,' 数据分类',0,1,'L',true);
$this->write(5,'分类:'.$this->metadata['category'].' '.$this->metadata['category_zh']);
$this->ln(5);
$this->Cell(0,8,' 数据细节',0,1,'L',true);
if ($this->metadata['rfdenom'])
{
$this->write(5,'比例尺:'.$this->metadata['rfdenom']);
$this->ln(5);
}
if ($this->metadata['resolution'])
{
$this->write(5,'分辨率:'.$this->metadata['resolution']);
$this->ln(5);
}
$this->write(5,'投影:'.$this->metadata['projection']);
$this->ln(5);
$this->write(5,'数据大小(MB)'.$this->metadata['filesize']);
$this->ln(5);
$this->write(5,'数据格式:'.$this->metadata['fileformat']);
$this->ln(5);
$this->Cell(0,8,' 缩略图和空间范围',0,1,'L',true);
$this->ln(5);
$x=$this->getX();$y=$this->getY();
$w=50*abs(($this->metadata['north']-$this->metadata['south'])/($this->metadata['west']-$this->metadata['east']));
$this->Image('http://'.$_SERVER['SERVER_NAME'].'/service/thumb/uuid/'.$this->metadata['uuid'],$x+80+$w,$y,0,50,$this->metadata['filetype']);
$this->rect($x+50,$y,$w,50);
$this->setXY($x+55,$y-4);
$this->write(5,'N:'.$this->metadata['north']);
$this->setXY($x+40,$y+20);
$this->write(5,'W:'.$this->metadata['west']);
$this->setXY($x+50+$w,$y+20);
$this->write(5,'E:'.$this->metadata['east']);
$this->setXY($x+55,$y+50);
$this->write(5,'S:'.$this->metadata['south']);
$this->ln(5);
$this->Cell(0,8,' 时间范围',0,1,'L',true);
$this->write(5,'开始时间:'.$this->metadata['timebegin']);
$this->ln(5);
$this->write(5,'结束时间:'.$this->metadata['timeend']);
$this->ln(5);
$this->Cell(0,8,' 本数据引用方式',0,1,'L',true);
$this->write(5,$this->metadata['citation']);
$this->ln(5);
$this->Cell(0,8,' 建议参考文献',0,1,'L',true);
$this->write(5,$this->metadata['reference']);
//$this->ln(5);
$this->Cell(0,8,' 数据DOI',0,1,'L',true);
$this->write(5,$this->metadata['doi']);
$this->ln(5);
$this->Cell(0,8,' 项目支持信息',0,1,'L',true);
$this->write(5,$this->metadata['suppinfo']);
$this->ln(5);
$this->Cell(0,8,' 使用限制',0,1,'L',true);
$this->write(5,$this->metadata['uselimits']);
$this->Cell(0,8,' 相关链接',0,1,'L',true);
foreach($this->metadata['resources'] as $k=>$r)
{
$this->write(5,($k+1).'. '.$r['name'].' '.$r['linkage'],$r['linkage']);
$this->ln(5);
}
$this->Cell(0,8,' 相关联系人',0,1,'L',true);
$party_zh=array('resourceProvider'=>'资源提供者','custodian'=>'维护者','owner'=>'拥有者','user'=>'用户','distributor'=>'数据服务联系人','originator'=>'创建者','pointOfContact'=>'联系人','principalInvestigator'=>'数据调查与处理者','processor'=>'处理者','publisher'=>'元数据发布者','author'=>'元数据作者');
foreach($this->metadata['contacts'] as $k=>$c)
{
$this->write(5,($k+1).'. '.$party_zh[$c['role']]);$this->ln(5);
$this->write(5,$c['individual'].' 单位:'.$c['organisation']);$this->ln(5);
$this->write(5,'地址:'.$c['country'].' '.$c['administractive'].' '.$c['city'].' '.$c['delivery']);$this->ln(5);
$this->write(5,'邮编:'.$c['postal'].' 电话:'.$c['phone'].' 邮件:'.$c['email']);
$this->ln(5);
$this->ln(5);
}
}
function DrawTable($text)
{
2011-11-04 09:54:15 +00:00
$table=explode("{|",$text);
$this->write(5,$table[0]);
2011-11-04 09:54:15 +00:00
$table1=explode("|}",$table[1]);
$table=explode("|-",$table1[0]);
$header=explode("!",str_replace(array("\r\n", "\n", "\r"),'',$table[0]));
$data=array();
foreach($table as $line=>$tr)
{
if ($line>0 && !empty($tr))
{
2011-11-04 09:54:15 +00:00
$tr=substr(trim($tr),1);
$data[]=explode("||",$tr);
}
}
//Header
foreach($header as $k=>$col)
if ($k>0) $this->Cell(40,7,$col,1);
$this->Ln();
//Data
foreach($data as $row)
{
foreach($row as $col)
$this->Cell(40,6,$col,1);
$this->Ln();
}
$this->write(5,$table1[1]);
}
function Footer()
{
//Page footer
$this->SetY(-15);
$this->SetFont('Arial','I',8);
$this->SetTextColor(128);
if ($this->PageNo()>1) $this->Cell(0,10,' - '.($this->PageNo()-1).' - ',0,0,'C');
}
}
?>