You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2017/06/20 08:06:24 UTC

svn commit: r1799314 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java

Author: ssteiner
Date: Tue Jun 20 08:06:24 2017
New Revision: 1799314

URL: http://svn.apache.org/viewvc?rev=1799314&view=rev
Log:
FOP-2715: Optimise PDFWriter writing out floats

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java?rev=1799314&r1=1799313&r2=1799314&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java Tue Jun 20 08:06:24 2017
@@ -21,6 +21,7 @@ import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -39,6 +40,8 @@ import org.apache.pdfbox.pdmodel.common.
 
 
 public class PDFWriter {
+    private DecimalFormat df = new DecimalFormat("#.####", new DecimalFormatSymbols(Locale.US));
+    private Map<Float, String> floatCache = new HashMap<Float, String>();
     protected StringBuilder s = new StringBuilder();
     protected UniqueName key;
     private int currentMCID;
@@ -88,8 +91,14 @@ public class PDFWriter {
             s.append(" ");
         } else if (c instanceof COSFloat) {
             float f = ((COSFloat) c).floatValue();
-            s.append(new DecimalFormat("#.####", new DecimalFormatSymbols(Locale.US)).format(f));
+            if (!floatCache.containsKey(f)) {
+                addCache(f);
+            }
+            s.append(floatCache.get(f));
             s.append(" ");
+            if (floatCache.size() > 1024) {
+                floatCache.clear();
+            }
         } else if (c instanceof COSName) {
             COSName cn = (COSName)c;
             s.append("/" + key.getName(cn));
@@ -127,6 +136,11 @@ public class PDFWriter {
         }
     }
 
+    protected void addCache(float f) {
+        String formatted = df.format(f);
+        floatCache.put(f, formatted);
+    }
+
     private void updateMCID(Map.Entry<COSName, COSBase> cn, Collection<COSBase> dictArgs) {
         COSBase cosMCID = cn.getValue();
         assert cosMCID instanceof COSInteger;

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java?rev=1799314&r1=1799313&r2=1799314&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java Tue Jun 20 08:06:24 2017
@@ -39,4 +39,26 @@ public class PDFWriterTestCase {
         Assert.assertEquals(pdfWriter.writeText(pdStream), text + "\n");
         Locale.setDefault(l);
     }
+
+    @Test
+    public void testFloatCache() throws IOException {
+        String text = "[1.1 1.1] a";
+        PDStream pdStream = new PDStream(new PDDocument(), new ByteArrayInputStream(text.getBytes("UTF-8")));
+        MyPDFWriter pdfWriter = new MyPDFWriter();
+        pdfWriter.writeText(pdStream);
+        Assert.assertEquals(pdfWriter.i, 1);
+    }
+
+    private static class MyPDFWriter extends PDFWriter {
+        int i;
+
+        public MyPDFWriter() {
+            super(null, 0);
+        }
+
+        protected void addCache(float f) {
+            super.addCache(f);
+            i++;
+        }
+    };
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org