Skip to content

Commit

Permalink
[BP] Switch from itext to openpdf for PDF map rendering
Browse files Browse the repository at this point in the history
Backport of geonetwork#6343
  • Loading branch information
juanluisrp committed Jun 14, 2022
1 parent 559946a commit debcc00
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 160 deletions.
11 changes: 10 additions & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (C) 2001-2016 Food and Agriculture Organization of the
~ Copyright (C) 2001-2022 Food and Agriculture Organization of the
~ United Nations (FAO-UN), United Nations World Food Programme (WFP)
~ and United Nations Environment Programme (UNEP)
~
Expand Down Expand Up @@ -390,10 +390,19 @@
</dependency>

<!-- Print service: MapFish -->
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
</dependency>
<dependency>
<groupId>org.mapfish.print</groupId>
<artifactId>print-lib</artifactId>
<exclusions>
<exclusion>
<!-- provided by openpdf -->
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
</exclusion>
<exclusion>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//=============================================================================
//=== Copyright (C) 2001-2014 Food and Agriculture Organization of the
//=== Copyright (C) 2001-2022 Food and Agriculture Organization of the
//=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
//=== and United Nations Environment Programme (UNEP)
//===
Expand All @@ -24,8 +24,6 @@
package org.fao.geonet.kernel.thumbnail;

import jeeves.server.context.ServiceContext;

import org.dom4j.DocumentException;
import org.fao.geonet.constants.Geonet;
import org.fao.geonet.utils.IO;
import org.fao.geonet.utils.Log;
Expand All @@ -36,20 +34,14 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;

import java.awt.Graphics2D;
import java.awt.Transparency;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;

import javax.imageio.ImageIO;

/**
* Use MapFish print module to generate thumbnail.
*
Expand Down Expand Up @@ -155,7 +147,7 @@ private MapPrinter getMapPrinter() {
}

public Path generateThumbnail(String jsonConfig, Integer rotationAngle)
throws IOException, DocumentException, com.itextpdf.text.DocumentException {
throws IOException {

PJsonObject specJson = MapPrinter.parseSpec(jsonConfig);
if (Log.isDebugEnabled(LOGGER_NAME)) {
Expand Down
108 changes: 35 additions & 73 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -422,11 +422,6 @@
</dependency>

<!-- PDF stuff: Managed by Mapfish -->
<!--dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.6</version>
</dependency-->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
Expand Down Expand Up @@ -858,10 +853,15 @@
<artifactId>dlib</artifactId>
<version>1.0</version> <!-- FIXME totally unknown -->
</dependency>
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.26</version>
</dependency>
<dependency>
<groupId>org.mapfish.print</groupId>
<artifactId>print-lib</artifactId>
<version>2.1.6</version>
<version>2.2.0</version>
</dependency>

<!-- Lib utils -->
Expand Down Expand Up @@ -958,20 +958,12 @@
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- Not permitted under oracle licensing rules
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
<version>14</version>
</dependency>
-->
<!-- Oracle changed policy, this is from maven central -->
<!-- Oracle Free Use Terms and Conditions (FUTC) -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.6.0.0</version>
</dependency>
<!-- Oracle Free Use Terms and Conditions (FUTC) -->
</dependency>
<dependency>
<groupId>org.codehaus.izpack</groupId>
<artifactId>izpack-standalone-compiler</artifactId>
Expand Down Expand Up @@ -1120,14 +1112,8 @@
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>${flying-saucer}</version>
<exclusions>
<exclusion>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
</exclusion>
</exclusions>
<artifactId>flying-saucer-pdf-openpdf</artifactId>
<version>${flying-saucer.version}</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -1231,66 +1217,42 @@

<!-- ================================================================== -->
<!-- Repositories. This is where Maven looks for dependencies. The -->
<!-- Maven repository is implicit and doesn't need to be specified. -->
<!-- Maven central repo is implicit and doesn't need to be listed. -->
<!-- -->
<!-- Please do not add additional repositories as this increases -->
<!-- build times, instead upload third-party dependencies to osgeo -->
<!-- repo.osgeo.org geonetwork-cache repository, or configure osgeo -->
<!-- releases repository to cache additional repos of interest: -->
<!-- -->
<!-- The following are cached for geonetwork: -->
<!-- http://maven.k-int.com/content/repositories/releases/ -->
<!-- repo.osgeo.org geonetwork-cache -->
<!-- https://github.com/geonetwork/core-maven-repo/ -->
<!-- http://maven.seasar.org/maven2 -->
<!-- ================================================================== -->
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>osgeo</id>
<name>OSGeo repository</name>
<name>OSGeo Release repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
</repository>

<!-- managed by repo.osgeo.org k-int-cache -->
<!-- /marcxml/marcxml/* -->
<!-- /marc4j/marc4j/* -->
<!--repository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>k-int</id>
<name>Developer k-int repository</name>
<url>http://maven.k-int.com/content/repositories/releases/</url>
</repository-->

<!-- managed by repo.osgeo.org geonetwork-cache -->
<!-- third party jar upload -->
<!-- TODO: move this content to geonetwork-releases -->
<!--
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>osgeo-snapshot</id>
<name>OSGeo Snapshot repository</name>
<url>https://repo.osgeo.org/repository/snapshot/</url>
<releases>
<enabled>true</enabled>
<enabled>false</enabled>
</releases>
<id>core-maven-repo</id>
<name>GeoNetwork remote repository</name>
<url>https://github.com/geonetwork/core-maven-repo/master</url>
</repository>
-->
<!-- managed by repo.osgeo.org seasar-cache -->
<!-- /net.arnx.jsonic/jsonic/* -->
<!-- seasar repo, has jsonic - used by langdetect -->
<!--
<repository>
<id>maven.seasar.org</id>
<name>The Seasar Foundation Maven2 Repository</name>
<url>http://maven.seasar.org/maven2</url>
</repository>
-->
<!-- managed by repo.osgeo.org geonetwork-releases -->
<!-- third party jar upload -->
<!-- org.mapfish.print:print-lib-2.1.6.jar -->
<!--
<repository>
<id>georchestra-mfprint</id>
<name>build-releases</name>
<url>https://packages.georchestra.org/artifactory/mapfish-print</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
-->
</repositories>


Expand Down Expand Up @@ -1589,7 +1551,7 @@
<npm.version>5.8.0</npm.version>
<xmlunit.version>2.1.1</xmlunit.version>
<jackson.version>2.10.3</jackson.version>
<flying-saucer>9.0.7</flying-saucer>
<flying-saucer.version>9.1.22</flying-saucer.version>
<camel.version>2.14.4</camel.version>
<log4j.version>1.2.17</log4j.version>
<log4j2.version>2.17.1</log4j2.version>
Expand Down
4 changes: 2 additions & 2 deletions services/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (C) 2001-2016 Food and Agriculture Organization of the
~ Copyright (C) 2001-2022 Food and Agriculture Organization of the
~ United Nations (FAO-UN), United Nations World Food Programme (WFP)
~ and United Nations Environment Programme (UNEP)
~
Expand Down Expand Up @@ -142,7 +142,7 @@

<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<artifactId>flying-saucer-pdf-openpdf</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//==============================================================================
//=== Copyright (C) 2001-2008 Food and Agriculture Organization of the
//=== Copyright (C) 2001-2022 Food and Agriculture Organization of the
//=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
//=== and United Nations Environment Programme (UNEP)
//===
Expand All @@ -23,31 +23,6 @@

package org.fao.geonet.api.records.formatters;

import static com.google.common.io.Files.getNameWithoutExtension;
import static org.fao.geonet.api.ApiParams.API_PARAM_RECORD_UUID;
import static org.fao.geonet.api.records.formatters.FormatterConstants.SCHEMA_PLUGIN_FORMATTER_DIR;
import static org.springframework.data.jpa.domain.Specifications.where;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.DirectoryStream;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.concurrent.Callable;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
Expand All @@ -66,28 +41,13 @@
import org.fao.geonet.SystemInfo;
import org.fao.geonet.api.API;
import org.fao.geonet.api.ApiUtils;
import org.fao.geonet.api.records.formatters.cache.CacheConfig;
import org.fao.geonet.api.records.formatters.cache.ChangeDateValidator;
import org.fao.geonet.api.records.formatters.cache.FormatterCache;
import org.fao.geonet.api.records.formatters.cache.Key;
import org.fao.geonet.api.records.formatters.cache.NoCacheValidator;
import org.fao.geonet.api.records.formatters.cache.StoreInfoAndDataLoadResult;
import org.fao.geonet.api.records.formatters.cache.Validator;
import org.fao.geonet.api.records.extent.MapRenderer;
import org.fao.geonet.api.records.formatters.cache.*;
import org.fao.geonet.api.records.formatters.groovy.ParamValue;
import org.fao.geonet.api.tools.i18n.LanguageUtils;
import org.fao.geonet.constants.Geonet;
import org.fao.geonet.domain.AbstractMetadata;
import org.fao.geonet.domain.ISODate;
import org.fao.geonet.domain.Metadata;
import org.fao.geonet.domain.MetadataType;
import org.fao.geonet.domain.OperationAllowed;
import org.fao.geonet.domain.Pair;
import org.fao.geonet.domain.ReservedOperation;
import org.fao.geonet.kernel.AccessManager;
import org.fao.geonet.kernel.DataManager;
import org.fao.geonet.kernel.GeonetworkDataDirectory;
import org.fao.geonet.kernel.SchemaManager;
import org.fao.geonet.kernel.XmlSerializer;
import org.fao.geonet.domain.*;
import org.fao.geonet.kernel.*;
import org.fao.geonet.kernel.datamanager.IMetadataUtils;
import org.fao.geonet.kernel.search.SearchManager;
import org.fao.geonet.kernel.setting.SettingManager;
Expand All @@ -96,7 +56,6 @@
import org.fao.geonet.repository.MetadataRepository;
import org.fao.geonet.repository.OperationAllowedRepository;
import org.fao.geonet.repository.specification.OperationAllowedSpecs;
import org.fao.geonet.api.records.extent.MapRenderer;
import org.fao.geonet.util.XslUtil;
import org.fao.geonet.utils.GeonetHttpRequestFactory;
import org.fao.geonet.utils.IO;
Expand All @@ -118,17 +77,27 @@
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.WebRequest;
import org.xhtmlrenderer.pdf.ITextRenderer;
import springfox.documentation.annotations.ApiIgnore;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
import java.util.concurrent.Callable;

import static com.google.common.io.Files.getNameWithoutExtension;
import static org.fao.geonet.api.ApiParams.API_PARAM_RECORD_UUID;
import static org.fao.geonet.api.records.formatters.FormatterConstants.SCHEMA_PLUGIN_FORMATTER_DIR;
import static org.springframework.data.jpa.domain.Specifications.where;

/**
* Allows a user to display a metadata with a particular formatters
*
Expand Down Expand Up @@ -570,7 +539,7 @@ private String getXmlFromUrl(ServiceContext context, String lang, String url, We
return new String(ByteStreams.toByteArray(execute.getBody()), Constants.CHARSET);
}

private void writerAsPDF(ServiceContext context, HttpServletResponse response, byte[] bytes, String lang) throws IOException, com.itextpdf.text.DocumentException {
private void writerAsPDF(ServiceContext context, HttpServletResponse response, byte[] bytes, String lang) throws IOException, com.lowagie.text.DocumentException {
final String htmlContent = new String(bytes, Constants.CHARSET);
try {
XslUtil.setNoScript();
Expand Down
Loading

0 comments on commit debcc00

Please sign in to comment.