[libitext-java] 74/76: Added the modifications made by TIBCO Software for JasperReports >= 6.2
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Thu Jul 28 22:46:38 UTC 2016
This is an automated email from the git hooks/post-receive script.
ebourg-guest pushed a commit to branch master
in repository libitext-java.
commit ec2b0c9b65120c88b526e11150acce76c5dc671a
Author: Emmanuel Bourg <ebourg at apache.org>
Date: Thu Jul 28 22:53:41 2016 +0200
Added the modifications made by TIBCO Software for JasperReports >= 6.2
---
debian/changelog | 1 +
debian/patches/04_tibco-changes.patch | 313 ++++++++++++++++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 315 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 316fdb9..9ad14cd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,6 @@
libitext-java (2.1.7-11) UNRELEASED; urgency=medium
+ * Added the modifications made by TIBCO Software for JasperReports >= 6.2
* Install the Maven artifacts for libitext-rtf-java and libitext-rups-java
* Removed the libitext-java-gcj package
* Build with the DH sequencer instead of CDBS
diff --git a/debian/patches/04_tibco-changes.patch b/debian/patches/04_tibco-changes.patch
new file mode 100644
index 0000000..f63273f
--- /dev/null
+++ b/debian/patches/04_tibco-changes.patch
@@ -0,0 +1,313 @@
+Description: Modifications made by TIBCO Software for JasperReports >= 6.2 :
+ #1 Fix for transparency issue with setClip method in PdfGraphics2D
+ #2 Fix for transparency bleeding for Batik gradients
+ #3 Fix for stroke opacity state in the create() method of PdfGraphics2D
+ #4 Method to directly write AWT GlyphVectors to PDF for Indic scripts support
+ #5 No character spacing in justified lines with a single word
+Origin: other, http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/com/lowagie/itext/2.1.7.js5/itext-2.1.7.js5-sources.jar
+Forwarded: no
+--- a/core/com/lowagie/text/pdf/FontDetails.java
++++ b/core/com/lowagie/text/pdf/FontDetails.java
+@@ -245,6 +245,43 @@
+ return b;
+ }
+
++ // TIBCO Software #4 : Part 1 - START
++ byte[] convertToBytes(GlyphVector glyphVector) {
++ if (fontType != BaseFont.FONT_TYPE_TTUNI || symbolic) {
++ throw new UnsupportedOperationException("Only supported for True Type Unicode fonts");
++ }
++
++ char[] glyphs = new char[glyphVector.getNumGlyphs()];
++ int glyphCount = 0;
++ for (int i = 0; i < glyphs.length; i++) {
++ int code = glyphVector.getGlyphCode(i);
++ if (code == 0xFFFE || code == 0xFFFF) {// considered non-glyphs by AWT
++ continue;
++ }
++
++ glyphs[glyphCount++] = (char) code;// FIXME supplementary plane?
++
++ Integer codeKey = new Integer(code);
++ if (!longTag.containsKey(codeKey)) {
++ int glyphWidth = ttu.getGlyphWidth(code);
++ Integer charCode = ttu.getCharacterCode(code);
++ int[] metrics = charCode != null
++ ? new int[] { code, glyphWidth, charCode.intValue() }
++ : new int[] { code, glyphWidth };
++ longTag.put(codeKey, metrics);
++ }
++ }
++
++ String s = new String(glyphs, 0, glyphCount);
++ try {
++ byte[] b = s.getBytes(CJKFont.CJK_ENCODING);
++ return b;
++ } catch (UnsupportedEncodingException e) {
++ throw new ExceptionConverter(e);
++ }
++ }
++ // TIBCO Software #4 : Part 1 - END
++
+ /**
+ * Writes the font definition to the document.
+ * @param writer the <CODE>PdfWriter</CODE> of this document
+--- a/core/com/lowagie/text/pdf/PdfContentByte.java
++++ b/core/com/lowagie/text/pdf/PdfContentByte.java
+@@ -49,8 +49,10 @@
+
+ package com.lowagie.text.pdf;
+ import java.awt.Color;
++import java.awt.font.GlyphVector;
+ import java.awt.geom.AffineTransform;
+ import java.awt.print.PrinterJob;
++import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.Iterator;
+@@ -1433,6 +1435,14 @@
+ content.append("Tj").append_i(separator);
+ }
+
++ // TIBCO Software #4 : Part 1 - START
++ public void showText(GlyphVector glyphVector) {
++ byte[] b = state.fontDetails.convertToBytes(glyphVector);
++ escapeString(b, content);
++ content.append("Tj").append_i(separator);
++ }
++ // TIBCO Software #4 : Part 1 - END
++
+ /**
+ * Constructs a kern array for a text in a certain font
+ * @param text the text
+@@ -3014,6 +3024,13 @@
+ * @param struc the tagging structure
+ */
+ public void beginMarkedContentSequence(PdfStructureElement struc) {
++ // TIBCO Software #4 : Part 1 - START
++ PdfDictionary dict = new PdfDictionary();
++ beginMarkedContentSequence(struc, dict);
++ }
++
++ public void beginMarkedContentSequence(PdfStructureElement struc, PdfDictionary dict) {
++ // TIBCO Software #4 : Part 1 - END
+ PdfObject obj = struc.get(PdfName.K);
+ int mark = pdf.getMarkPoint();
+ if (obj != null) {
+@@ -3042,7 +3059,16 @@
+ }
+ pdf.incMarkPoint();
+ mcDepth++;
+- content.append(struc.get(PdfName.S).getBytes()).append(" <</MCID ").append(mark).append(">> BDC").append_i(separator);
++ // TIBCO Software #4 : Part 1 - START
++ dict.put(PdfName.MCID, new PdfNumber(mark));
++ content.append(struc.get(PdfName.S).getBytes()).append(" ");
++ try {
++ dict.toPdf(writer, content);
++ } catch (IOException e) {
++ throw new ExceptionConverter(e);
++ }
++ content.append(" BDC").append_i(separator);
++ // TIBCO Software #4 : Part 1 - END
+ }
+
+ /**
+--- a/core/com/lowagie/text/pdf/PdfDocument.java
++++ b/core/com/lowagie/text/pdf/PdfDocument.java
+@@ -1397,7 +1397,13 @@
+ hangingCorrection = width - oldWidth;
+ }
+ }
+- float baseFactor = width / (ratio * numberOfSpaces + lineLen - 1);
++
++ // TIBCO Software #5 : Part 1 - START
++ // if there's a single word on the line and we are using NO_SPACE_CHAR_RATIO,
++ // we don't want any character spacing
++ float baseFactor = (numberOfSpaces == 0 && ratio == PdfWriter.NO_SPACE_CHAR_RATIO)
++ ? 0f : width / (ratio * numberOfSpaces + lineLen - 1);
++ // TIBCO Software #5 : Part 1 - END
+ baseWordSpacing = ratio * baseFactor;
+ baseCharacterSpacing = baseFactor;
+ lastBaseFactor = baseFactor;
+--- a/core/com/lowagie/text/pdf/PdfGraphics2D.java
++++ b/core/com/lowagie/text/pdf/PdfGraphics2D.java
+@@ -189,6 +189,9 @@
+ * Constructor for PDFGraphics2D.
+ *
+ */
++ // TIBCO Software #4 : Part 1 - START
++ protected
++ // TIBCO Software #4 : Part 1 - END
+ PdfGraphics2D(PdfContentByte cb, float width, float height, FontMapper fontMapper, boolean onlyShapes, boolean convertImagesToJPEG, float quality) {
+ super();
+ dg2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
+@@ -909,6 +912,9 @@
+ g2.paint = this.paint;
+ g2.fillGState = this.fillGState;
+ g2.currentFillGState = this.currentFillGState;
++ // TIBCO Software #3 : Part 1 - START
++ g2.currentStrokeGState = this.currentStrokeGState;
++ // TIBCO Software #3 : Part 1 - END
+ g2.strokeGState = this.strokeGState;
+ g2.background = this.background;
+ g2.mediaTracker = this.mediaTracker;
+@@ -1086,7 +1092,9 @@
+ followPath(s, CLIP);
+ }
+ paintFill = paintStroke = null;
+- currentFillGState = currentStrokeGState = 255;
++ // TIBCO Software #1 : Part 1 - START
++ currentFillGState = currentStrokeGState = -1; // 255;
++ // TIBCO Software #1 : Part 1 - END
+ oldStroke = strokeOne;
+ }
+
+@@ -1487,7 +1495,9 @@
+ } catch (Exception ex) {
+ throw new IllegalArgumentException();
+ }
+- if (currentFillGState != 255) {
++ // TIBCO Software #1 : Part 2 - START
++ if (currentFillGState != 255 && currentFillGState != -1) {
++ // TIBCO Software #1 : Part 2 - END
+ PdfGState gs = fillGState[currentFillGState];
+ cb.setGState(gs);
+ }
+@@ -1613,8 +1623,21 @@
+ PdfPatternPainter pattern = cb.createPattern(width, height);
+ image.setAbsolutePosition(0,0);
+ pattern.addImage(image);
+- if (fill)
++ // TIBCO Software #2 : Part 1 - START
++ if (fill) {
++ if (currentFillGState != 255) {
++ currentFillGState = 255;
++ PdfGState gs = fillGState[255];
++ if (gs == null) {
++ gs = new PdfGState();
++ gs.setFillOpacity(1);
++ fillGState[255] = gs;
++ }
++ cb.setGState(gs);
++ }
+ cb.setPatternFill(pattern);
++ }
++ // TIBCO Software #2 : Part 1 - END
+ else
+ cb.setPatternStroke(pattern);
+ } catch (Exception ex) {
+--- a/core/com/lowagie/text/pdf/TrueTypeFont.java
++++ b/core/com/lowagie/text/pdf/TrueTypeFont.java
+@@ -671,7 +671,9 @@
+ readCMaps();
+ readKerning();
+ readBbox();
+- GlyphWidths = null;
++ // TIBCO Software #4 : Part 1 - START
++ //GlyphWidths = null;
++ // TIBCO Software #4 : Part 1 - END
+ }
+ }
+ finally {
+--- a/core/com/lowagie/text/pdf/TrueTypeFontUnicode.java
++++ b/core/com/lowagie/text/pdf/TrueTypeFontUnicode.java
+@@ -50,9 +50,13 @@
+ package com.lowagie.text.pdf;
+
+ import java.io.IOException;
++import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Comparator;
+ import java.util.HashMap;
++import java.util.Iterator;
++import java.util.List;
++import java.util.Map;
+
+ import com.lowagie.text.DocumentException;
+ import com.lowagie.text.Utilities;
+@@ -70,6 +74,10 @@
+ */
+ boolean vertical = false;
+
++ // TIBCO Software #4 : Part 1 - START
++ HashMap inverseCmap;
++ // TIBCO Software #4 : Part 1 - END
++
+ /**
+ * Creates a new TrueType font addressed by Unicode characters. The font
+ * will always be embedded.
+@@ -116,6 +124,33 @@
+ vertical = enc.endsWith("V");
+ }
+
++ // TIBCO Software #4 : Part 1 - START
++ void readCMaps() throws DocumentException, IOException {
++ super.readCMaps();
++
++ HashMap cmap = null;
++ if (cmapExt != null) {
++ cmap = cmapExt;
++ } else if (cmap31 != null) {
++ cmap = cmap31;
++ }
++
++ if (cmap != null) {
++ inverseCmap = new HashMap();
++ for (Iterator iterator = cmap.entrySet().iterator(); iterator.hasNext();) {
++ Map.Entry entry = (Map.Entry) iterator.next();
++ Integer code = (Integer) entry.getKey();
++ int[] metrics = (int[]) entry.getValue();
++ inverseCmap.put(new Integer(metrics[0]), code);
++ }
++ }
++ }
++
++ protected Integer getCharacterCode(int code) {
++ return inverseCmap == null ? null : (Integer) inverseCmap.get(new Integer(code));
++ }
++ // TIBCO Software #4 : Part 1 - END
++
+ /**
+ * Gets the width of a <CODE>char</CODE> in normalized 1000 units.
+ * @param char1 the unicode <CODE>char</CODE> to get the width of
+@@ -173,6 +208,9 @@
+ * @return the stream representing this CMap or <CODE>null</CODE>
+ */
+ private PdfStream getToUnicode(Object metrics[]) {
++ // TIBCO Software #4 : Part 1 - START
++ metrics = filterCmapMetrics(metrics);
++ // TIBCO Software #4 : Part 1 - END
+ if (metrics.length == 0)
+ return null;
+ StringBuffer buf = new StringBuffer(
+@@ -214,6 +252,30 @@
+ return stream;
+ }
+
++ // TIBCO Software #4 : Part 1 - START
++ private Object[] filterCmapMetrics(Object[] metrics) {
++ if (metrics.length == 0) {
++ return metrics;
++ }
++
++ List cmapMetrics = new ArrayList(metrics.length);
++ for (int i = 0; i < metrics.length; i++) {
++ int metric[] = (int[]) metrics[i];
++ // PdfContentByte.showText(GlyphVector) uses glyphs that might not map to a character.
++ // the glyphs are included in the metrics array, but we need to exclude them from the cmap.
++ if (metric.length >= 3) {
++ cmapMetrics.add(metric);
++ }
++ }
++
++ if (cmapMetrics.size() == metrics.length) {
++ return metrics;
++ }
++
++ return cmapMetrics.toArray();
++ }
++ // TIBCO Software #4 : Part 1 - END
++
+ private static String toHex4(int n) {
+ String s = "0000" + Integer.toHexString(n);
+ return s.substring(s.length() - 4);
diff --git a/debian/patches/series b/debian/patches/series
index 9c2118b..2f3e899 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
01_allow_standard_input.patch
02_bouncycastle_compatibility.patch
03_bouncycastle-1.51.patch
+04_tibco-changes.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libitext-java.git
More information about the pkg-java-commits
mailing list