⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exportpdf.java

📁 联合国农粮署牵头开发的geonetwork源代码最新版
💻 JAVA
字号:
package org.wfp.vam.intermap.services.export;import com.lowagie.text.*;import com.lowagie.text.pdf.*;import java.awt.Color;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.util.HashMap;import java.util.Map;import jeeves.interfaces.Service;import jeeves.server.ServiceConfig;import jeeves.server.context.ServiceContext;import org.jdom.Element;import org.wfp.vam.intermap.kernel.GlobalTempFiles;import org.wfp.vam.intermap.kernel.map.MapMerger;import org.wfp.vam.intermap.kernel.map.images.ImageMerger;import org.wfp.vam.intermap.kernel.map.images.ImageUtils;import org.wfp.vam.intermap.kernel.map.images.ScaleBar;import org.wfp.vam.intermap.kernel.map.mapServices.BoundingBox;import org.wfp.vam.intermap.services.map.MapUtil;import org.wfp.vam.intermap.util.Util;public class ExportPDF implements Service{	private final static int MAP_WIDTH_PX = 1160;	private final static int MAP_HEIGHT_PX = 870;	private String _northarrowfile;	public void init(String appPath, ServiceConfig config) throws Exception	{		_northarrowfile = config.getMandatoryValue("northArrowImage");	}	public Element exec(Element params, ServiceContext context) throws Exception	{		MapMerger mm = MapUtil.getMapMerger(context);		Rectangle pagesize 	= parsePagesize(params.getChildText("pagesize"));		boolean isLandscape  = isLandscape(params.getChildText("orientation"));		if(isLandscape)			pagesize = pagesize.rotate();		BoundingBox bb = Util.parseBoundingBox(params); // search bb in params		if( bb != null)			mm.setBoundingBox(bb);		String title = params.getChildText("title");		String copyright = params.getChildText("copyright");		boolean drawScale = "on".equals(params.getChildText("scalebar"));		boolean drawArrow = "on".equals(params.getChildText("arrow"));		boolean showLayerList = "on".equals(params.getChildText("layerlist"));		boolean showDetails = "on".equals(params.getChildText("details"));		Document document = new Document(pagesize);		File pdfFile = GlobalTempFiles.getInstance().getFile(".pdf");		PdfWriter pw = PdfWriter.getInstance(document, new FileOutputStream(pdfFile));		document.addTitle(title!=null? title: "GeoNetwork opensource Map");		document.addSubject("");		document.addCreator("GeoNetwork opensource map viewer");		document.addCreationDate();		document.addAuthor("ETj");		document.addProducer();		document.addKeywords(getKeywords(mm));		if(copyright!=null)			document.addHeader("Copyright note", copyright);		if(copyright != null)			pw.setPageEvent(new PE(copyright));      document.open();		// TITLE		if( title != null)		{			Font font = new Font(Font.HELVETICA, 20, Font.NORMAL);			Paragraph para = new Paragraph(title, font);			para.setAlignment(Paragraph.ALIGN_CENTER);			document.add(para);		}		// IMAGE		String map = mm.merge(MAP_WIDTH_PX, MAP_HEIGHT_PX);		String mapImageFullPath = mm.getImageLocalPath().getAbsolutePath() + File.separatorChar + map;		if(drawArrow)		{			BufferedImage arrow = ImageUtils.load(_northarrowfile);			BufferedImage mapimage = ImageUtils.load(mapImageFullPath);			BufferedImage rect = ImageUtils.createRect(mapimage.getWidth() +arrow.getWidth() +10,													   mapimage.getHeight(),													   Color.WHITE);			BufferedImage merged;			merged = ImageMerger.merge(rect, mapimage, 0, 0);			merged = ImageMerger.merge(merged, arrow, -1, 5);//			BufferedImage merged = ImageMerger.merge(mapImageFullPath, _northarrowfile, -5, 5);			mapImageFullPath = GlobalTempFiles.getInstance().getFile().getPath(); // we need a new file: MapMerger could reuse its own file			ImageMerger.saveImage(merged, mapImageFullPath, ImageMerger.PNG);		}		if(drawScale)		{			BufferedImage sb = ScaleBar.getScaleBar(mm.getBoundingBox(), MAP_WIDTH_PX, 150);			BufferedImage rect = ImageUtils.createRect(sb.getWidth()+10, sb.getHeight()+10, Color.WHITE);			BufferedImage merged;			merged = ImageMerger.merge(mapImageFullPath, rect, 1, -1, .5f);			merged = ImageMerger.merge(merged, sb, 5, -5);			mapImageFullPath = GlobalTempFiles.getInstance().getFile().getPath(); // we need a new file: drawArrow may be not requested			ImageMerger.saveImage(merged, mapImageFullPath, ImageMerger.PNG);		}		Image mapImage = Image.getInstance(mapImageFullPath);		mapImage.scaleToFit(500,400);		mapImage.setAlignment(Image.MIDDLE);		document.add(mapImage);		if(showLayerList)		{			document.add(new Paragraph("Layers list:")); // FIXME: i18n me!			List llist = new List(true, 20);			for (int i = 0; i < mm.size(); i++)			{				ListItem litem = getLayerPara(mm, i, showDetails);				llist.add(litem);			}			document.add(llist);		}		if(params.getChildText("boundingbox") != null) // the user wants the bbox		{			// Be careful: the requested bbox may have been reaspected to keep the image dimensions ratio			// Let's say we'll print the reaspected bbox			PdfPTable t = getBBTable(mm.getBoundingBox());			t.setSpacingBefore(30);			document.add(t);		}		document.close();		return new Element("response")			.addContent(new Element("pdf")				.addContent(new Element("url").setText(MapUtil.getTempUrl() + "/" + pdfFile.getName())));	}	private ListItem getLayerPara(MapMerger mm, int layerRank, boolean showDetails)	{		ListItem litem = new ListItem();		// Add layer name		String servicename = mm.getServiceRanked(layerRank).getTitle();		Chunk name = new Chunk(servicename);		if( ! mm.isVisibleRanked(layerRank) )		{			Font font = new Font();			font.setStyle(Font.STRIKETHRU);			name.setFont(font);		}		litem.add(name);		if(showDetails) // the user wants details		{			// Add transparency info			Font font = new Font();			font.setSize(Font.DEFAULTSIZE*0.8f);			font.setStyle(Font.ITALIC);			int trasp = mm.getLayerTransparencyRanked(layerRank);			if(trasp != 100)			{				Chunk transp = new Chunk( "   (" + mm.getLayerTransparencyRanked(layerRank)+"%)", font);				litem.add(transp);			}		}		return litem;	}	private String getKeywords(MapMerger mm)	{		StringBuffer sb = new StringBuffer("GeoNetwork opensource, OSGeo");		for (int layerRank = 0; layerRank < mm.size(); layerRank++)		{			if( mm.isVisibleRanked(layerRank) )			{				String servicename = mm.getServiceRanked(layerRank).getName();				sb.append(", ").append(servicename);			}		}		return sb.toString();	}	private static PdfPTable getBBTable(BoundingBox bb)	{		PdfPTable t = new PdfPTable(3);		PdfPCell empty = new PdfPCell(new Paragraph(""));		empty.setBorder(0);		PdfPCell n = new PdfPCell(new Paragraph("N: " + bb.getNorth()));		n.setVerticalAlignment(Cell.ALIGN_MIDDLE);		n.setHorizontalAlignment(Cell.ALIGN_CENTER);		PdfPCell e = new PdfPCell(new Paragraph("E: " + bb.getEast()));		e.setVerticalAlignment(Cell.ALIGN_MIDDLE);		e.setHorizontalAlignment(Cell.ALIGN_LEFT);		PdfPCell w = new PdfPCell(new Paragraph("W: " + bb.getWest()));		w.setVerticalAlignment(Cell.ALIGN_MIDDLE);		w.setHorizontalAlignment(Cell.ALIGN_RIGHT);		PdfPCell s = new PdfPCell(new Paragraph("S: " + bb.getSouth()));		s.setVerticalAlignment(Cell.ALIGN_MIDDLE);		s.setHorizontalAlignment(Cell.ALIGN_CENTER);		t.addCell(new PdfPCell(empty));		t.addCell(n);		t.addCell(new PdfPCell(empty));		t.addCell(w);		t.addCell(new PdfPCell(empty));		t.addCell(e);		t.addCell(new PdfPCell(empty));		t.addCell(s);		t.addCell(new PdfPCell(empty));		return t;	}	private boolean isLandscape(String o)	{		if(o.equalsIgnoreCase("landscape"))			return true;		else if(o.equalsIgnoreCase("portrait"))			return false;		else			return false; // Set the default value to your liking	}	private static final Map<String, Rectangle> PAGESIZE = new HashMap<String, Rectangle>();	static	{		PAGESIZE.put("a4", PageSize.A4);		PAGESIZE.put("a3", PageSize.A3);		PAGESIZE.put("letter", PageSize.LETTER);		PAGESIZE.put("legal", PageSize.LEGAL);		// This list may be extended with other pagesize values	}	private Rectangle parsePagesize(String ps)	{		Rectangle ret = PAGESIZE.get(ps);		if(ret == null)			ret = PageSize.A4; // set the default pagesize as you like		return ret;	}	static class PE extends PdfPageEventHelper	{		protected PdfTemplate total;		protected BaseFont _watermarkFont;		protected PdfGState gstate;		protected Phrase footer;		protected String _watermarkText;		public PE(String watermark)		{			this._watermarkText = watermark;			footer = new Phrase(watermark);			Font font = new Font();			font.setSize(Font.DEFAULTSIZE * 0.9f);			font.setStyle(Font.ITALIC);			footer.setFont(font);		}		public void onOpenDocument(PdfWriter writer, Document document)		{			total = writer.getDirectContent().createTemplate(100, 100);			total.setBoundingBox(new Rectangle(-20, -20, 100, 100));			try			{				_watermarkFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);			}			catch (Exception e)			{				throw new ExceptionConverter(e);			}			gstate = new PdfGState();			gstate.setFillOpacity(0.3f);			gstate.setStrokeOpacity(0.3f);		}		public void onEndPage(PdfWriter writer, Document document)		{			boolean showWaterMark = false;			if(showWaterMark)			{				// Draw watermark				PdfContentByte contentunder = writer.getDirectContent();				contentunder.saveState();				contentunder.setGState(gstate);				contentunder.setColorFill(Color.blue);				contentunder.beginText();				contentunder.setFontAndSize(_watermarkFont, 48);				contentunder.showTextAligned(com.lowagie.text.Element.ALIGN_CENTER,													  _watermarkText,													  document.getPageSize().getWidth() / 2,													  document.getPageSize().getHeight() / 2, 45);				contentunder.endText();				contentunder.restoreState();			}				// Draw footer				PdfContentByte cb = writer.getDirectContent();				ColumnText.showTextAligned(cb,													com.lowagie.text.Element.ALIGN_CENTER,													footer,													(document.right() - document.left()) / 2 + document.leftMargin(),													document.bottom() - 10, 0);			}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -