diff --git a/jasperreports/docs/config.reference.xml b/jasperreports/docs/config.reference.xml
index 3f599f2fe5..f59be90a61 100644
--- a/jasperreports/docs/config.reference.xml
+++ b/jasperreports/docs/config.reference.xml
@@ -7589,9 +7589,9 @@ Flag that determines whether glyph substitution based on Apache FOP is enabled.
The flag is set to false
by default, disabling glyph substitution.
When Apache FOP is present on the classpath, glyph substitution can only be disabled
-by using a patched version of OpenPDF (1.3.30.jaspersoft.x from
+when using OpenPDF 1.3.32 and newer, or a version patched by Jaspersoft (1.3.30.jaspersoft.x from
https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/com/github/librepdf/openpdf/).
-The property needs to be explicitly set to true
when using a standard/unpatched version of OpenPDF together with Apache FOP.
+The property needs to be explicitly set to true
when using an unpatched version of OpenPDF older than 1.3.32 together with Apache FOP.
Also see the net.sf.jasperreports.export.pdf.classic.document.language diff --git a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/PdfXmpCreator.java b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/PdfXmpCreator.java index f1e33bf95a..094484cf41 100644 --- a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/PdfXmpCreator.java +++ b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/PdfXmpCreator.java @@ -181,7 +181,11 @@ else if (this.conformance == PdfaConformanceEnum.PDFA_3U) } xmp.setProperty(XMPConst.NS_XMP, XMP_CREATE_DATE, ((PdfDate) info.get(PdfName.CREATIONDATE)).getW3CDate()); - xmp.setProperty(XMPConst.NS_XMP, XMP_MODIFY_DATE, ((PdfDate) info.get(PdfName.MODDATE)).getW3CDate()); + PdfDate modifiedDate = (PdfDate) info.get(PdfName.MODDATE); + if (modifiedDate != null) + { + xmp.setProperty(XMPConst.NS_XMP, XMP_MODIFY_DATE, modifiedDate.getW3CDate()); + } String title = extractInfo(PdfName.TITLE); if (title != null) diff --git a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicPdfProducer.java b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicPdfProducer.java index 6bb1a3cd11..c63da0d68f 100644 --- a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicPdfProducer.java +++ b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicPdfProducer.java @@ -27,8 +27,6 @@ import java.awt.geom.Rectangle2D; import java.io.IOException; import java.io.OutputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.text.AttributedCharacterIterator.Attribute; import java.util.HashMap; import java.util.Locale; @@ -61,7 +59,6 @@ import net.sf.jasperreports.engine.JRPrintImage; import net.sf.jasperreports.engine.JRPrintText; import net.sf.jasperreports.engine.JRPropertiesUtil; -import net.sf.jasperreports.engine.JRRuntimeException; import net.sf.jasperreports.engine.PrintPageFormat; import net.sf.jasperreports.engine.type.ModeEnum; import net.sf.jasperreports.engine.util.JRStyledText; @@ -125,21 +122,6 @@ public class ClassicPdfProducer implements PdfProducer ) public static final String PROPERTY_DOCUMENT_LANGUAGE = JRPropertiesUtil.PROPERTY_PREFIX + "export.pdf.classic.document.language"; - private final static Method SET_GLYPH_SUBSTITUTION_ENABLED_METHOD; - static - { - Method setGlyphSubstitutionEnabledMethod = null; - try - { - setGlyphSubstitutionEnabledMethod = Document.class.getMethod("setGlyphSubstitutionEnabled", Boolean.TYPE); - } - catch (NoSuchMethodException | SecurityException e) - { - log.debug("Failed to detect com.lowagie.text.Document.setGlyphSubstitutionEnabled method: " + e); - } - SET_GLYPH_SUBSTITUTION_ENABLED_METHOD = setGlyphSubstitutionEnabledMethod; - } - private PdfProducerContext context; private ClassicPdfStructure pdfStructure; @@ -206,19 +188,7 @@ protected void setDocumentProperties(Document pdfDocument) PROPERTY_FOP_GLYPH_SUBSTITUTION_ENABLED, false); if (!glyphSubstitutionEnabled && FopGlyphProcessor.isFopSupported()) { - if (SET_GLYPH_SUBSTITUTION_ENABLED_METHOD == null) - { - throw new PatchedPdfLibraryUnavailableException(); - } - - try - { - SET_GLYPH_SUBSTITUTION_ENABLED_METHOD.invoke(pdfDocument, false); - } - catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) - { - throw new JRRuntimeException("Failed to invoke com.lowagie.text.Document.setGlyphSubstitutionEnabled", e); - } + pdfDocument.setGlyphSubstitutionEnabled(false); } } diff --git a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicRadioCheck.java b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicRadioCheck.java index 55c125db1f..9932c50dc7 100644 --- a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicRadioCheck.java +++ b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/ClassicRadioCheck.java @@ -76,7 +76,7 @@ public void add() { try { - PdfFormField ck = radioCheckField.getCheckField(); + PdfFormField ck = radioCheckField.getFullField(); pdfProducer.getPdfWriter().addAnnotation(ck); } catch (Exception e) diff --git a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/PatchedPdfLibraryUnavailableException.java b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/PatchedPdfLibraryUnavailableException.java index 15dd46ea4d..83bd232136 100644 --- a/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/PatchedPdfLibraryUnavailableException.java +++ b/jasperreports/ext/pdf/src/main/java/net/sf/jasperreports/pdf/classic/PatchedPdfLibraryUnavailableException.java @@ -26,9 +26,15 @@ import net.sf.jasperreports.engine.JRConstants; import net.sf.jasperreports.engine.JRRuntimeException; +//TODO delete? + /** + * No longer used, OpenPDF 1.3.32 supports disabling glyph substitution. + * + *
* Exception raised when Apache FOP based glyph substitution is disabled, but * the patched version OpenPDF library has not been detected. + *
* *
* The OpenPDF library (used by the JasperReports PDF exporter) performs glyph
diff --git a/jasperreports/src/net/sf/jasperreports/components/ComponentsXmlWriter.java b/jasperreports/src/net/sf/jasperreports/components/ComponentsXmlWriter.java
index 97295ed4d7..eb5f600df0 100644
--- a/jasperreports/src/net/sf/jasperreports/components/ComponentsXmlWriter.java
+++ b/jasperreports/src/net/sf/jasperreports/components/ComponentsXmlWriter.java
@@ -29,6 +29,7 @@
import net.sf.jasperreports.components.items.Item;
import net.sf.jasperreports.components.items.ItemData;
import net.sf.jasperreports.components.items.ItemProperty;
+import net.sf.jasperreports.components.items.ItemXmlFactory;
import net.sf.jasperreports.components.list.ListComponent;
import net.sf.jasperreports.components.list.ListContents;
import net.sf.jasperreports.components.map.MapComponent;
@@ -285,7 +286,7 @@ private void writeMarkerItemDataContent(String name, MarkerItemData markerItemDa
private void writeItem(Item item, JRXmlWriteHelper writer, JRXmlWriter reportWriter, XmlNamespace namespace, JRComponentElement componentElement) throws IOException
{
- writer.startElement(MapXmlFactory.ELEMENT_item, namespace);
+ writer.startElement(ItemXmlFactory.ELEMENT_item, namespace);
List