/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.compiere.print.layout; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.geom.Point2D; import java.util.Properties; import java.util.logging.Level; import java.util.regex.Pattern; /** * HTML ELement. *

* Restrictions: *

* * * @author Jorg Janke * @version $Id: HTMLElement.java,v 1.2 2006/07/30 00:53:02 jjanke Exp $ */ public class HTMLElement extends PrintElement { /** * generated serial id */ private static final long serialVersionUID = -7752468251586676726L; /** * HTML String Constructor * @param html html code */ public HTMLElement (String html) { if (html == null || html.equals("")) throw new IllegalArgumentException("HTMLElement is null"); if (log.isLoggable(Level.FINE)) log.fine("Length=" + html.length()); // Create View m_renderer = HTMLRenderer.get(html); } // HTMLElement /** View for Printing */ private HTMLRenderer m_renderer; /** * Layout and Calculate Size. * Set p_width and p_height * @return Size */ protected boolean calculateSize() { if (p_sizeCalculated) return true; // p_height = m_renderer.getHeight(); p_width = m_renderer.getWidth(); // Limits if (p_maxWidth != 0f) p_width = p_maxWidth; if (p_maxHeight != 0f) { if (p_maxHeight == -1f) // one line only p_height = m_renderer.getHeightOneLine(); else p_height = p_maxHeight; } // m_renderer.setAllocation((int)p_width, (int)p_height); return true; } // calculateSize /** * Paint/Print.
* Calculate actual Size.
* The text is printed in the topmost left position - i.e. the leading is below the line. * @param g2D Graphics * @param pageNo page number for multi page support (0 = header/footer) - ignored * @param pageStart top left Location of page * @param ctx print context * @param isView true if online view (IDs are links) */ public void paint (Graphics2D g2D, int pageNo, Point2D pageStart, Properties ctx, boolean isView) { Point2D.Double location = getAbsoluteLocation(pageStart); // Rectangle allocation = m_renderer.getAllocation(); g2D.translate(location.x, location.y); m_renderer.paint(g2D, allocation); g2D.translate(-location.x, -location.y); } // paint /** * String Representation * @return info */ public String toString() { StringBuilder sb = new StringBuilder("HTMLElement["); sb.append("Bounds=").append(getBounds()) .append(",Height=").append(p_height).append("(").append(p_maxHeight) .append("),Width=").append(p_width).append("(").append(p_maxHeight) .append("),PageLocation=").append(p_pageLocation).append(" - "); sb.append("]"); return sb.toString(); } // toString /** * Is content HTML * @param content content * @return true if HTML */ public static boolean isHTML (Object content) { if (content == null) return false; // code borrowed from https://denofdevelopers.com/how-to-detect-if-string-is-html-or-not-in-android/ final String TAG_START = "<\\w+((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)>"; final String TAG_END = ""; final String TAG_SELF_CLOSING = "<\\w+((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)/>"; final String HTML_ENTITY = "&[a-zA-Z][a-zA-Z0-9]+;"; final Pattern htmlPattern = Pattern .compile("(" + TAG_START + ".*" + TAG_END + ")|(" + TAG_SELF_CLOSING + ")|(" + HTML_ENTITY + ")", Pattern.DOTALL); boolean isHTML = false; String htmlString = content.toString(); if (htmlString != null) { isHTML = htmlPattern.matcher(htmlString).find(); } return isHTML; } // isHTML } // HTMLElement