All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ofdrw.layout.engine.render.ImgRender Maven / Gradle / Ivy

The newest version!
package org.ofdrw.layout.engine.render;

import org.ofdrw.core.basicStructure.pageObj.layer.block.CT_PageBlock;
import org.ofdrw.core.basicStructure.pageObj.layer.block.ImageObject;
import org.ofdrw.core.basicType.ST_Array;
import org.ofdrw.core.basicType.ST_ID;
import org.ofdrw.core.basicType.ST_Loc;
import org.ofdrw.layout.element.Div;
import org.ofdrw.layout.element.Img;
import org.ofdrw.layout.engine.ResManager;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 图片渲染对象
 * 

* {@link org.ofdrw.layout.element.Img} 的渲染器 * * @author 权观宇 * @since 2020-03-22 13:17:52 */ public class ImgRender implements Processor { /** * 执行图片渲染 * * @param pageLoc 页面在虚拟容器中绝对路径。 * @param layer 图片将要放置的图层 * @param resManager 资源管理器 * @param e 图片对象 * @param maxUnitID 最大元素ID提供器 * @throws RenderException 渲染发生错误 */ @Override public void render(ST_Loc pageLoc, CT_PageBlock layer, ResManager resManager, Div e, AtomicInteger maxUnitID)throws RenderException { if (e instanceof Img) { render(layer, resManager, (Img) e, maxUnitID); } } /** * 渲染图片对象 *

* 由于图片对象有图片资源所以需要放入到文档容器中 * * @param layer 图片将要放置的图层 * @param resManager 资源管理器 * @param e 图片对象 * @param maxUnitID 最大元素ID提供器 */ public static void render(CT_PageBlock layer, ResManager resManager, Img e, AtomicInteger maxUnitID) { if (e == null) { return; } // 图片存储路径 Path p = e.getSrc(); if (p == null || Files.notExists(p)) { throw new IllegalArgumentException("图片对象(Img)路径非法"); } // 加入图片资源 ST_ID id = null; try { id = resManager.addImage(p); } catch (IOException ex) { throw new RenderException("渲染图片复制失败:" + ex.getMessage(), ex); } // 在公共资源中加入图片 ImageObject imgObj = new ImageObject(maxUnitID.incrementAndGet()); imgObj.setResourceID(id.ref()); double x = e.getX() + e.getMarginLeft() + e.getBorderLeft() + e.getPaddingLeft(); double y = e.getY() + e.getMarginTop() + e.getBorderTop() + e.getPaddingTop(); imgObj.setBoundary(x, y, e.getWidth(), e.getHeight()); imgObj.setCTM(new ST_Array(e.getWidth(), 0, 0, e.getHeight(), 0, 0)); if (e.getOpacity() != null) { // 图元透明度 imgObj.setAlpha((int) (e.getOpacity() * 255)); } layer.addPageBlock(imgObj); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy