You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2015/01/27 23:10:15 UTC
svn commit: r1655173 - in /pdfbox/trunk/pdfbox/src:
main/java/org/apache/pdfbox/pdmodel/interactive/form/
main/java/org/apache/pdfbox/service/interactive/form/
test/java/org/apache/pdfbox/pdmodel/interactive/form/
Author: msahyoun
Date: Tue Jan 27 22:10:15 2015
New Revision: 1655173
URL: http://svn.apache.org/r1655173
Log:
PDFBOX-2333 use inheritable attribute; use font encoding
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/service/interactive/form/PDAppearanceString.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java?rev=1655173&r1=1655172&r2=1655173&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java Tue Jan 27 22:10:15 2015
@@ -80,9 +80,10 @@ public abstract class PDVariableText ext
*
* @return the DA element of the dictionary object
*/
- public COSString getDefaultAppearance()
+ public String getDefaultAppearance()
{
- return (COSString) getInheritableAttribute(COSName.DA);
+ COSString defaultAppearance = (COSString) getInheritableAttribute(COSName.DA);
+ return defaultAppearance.getString();
}
/**
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/service/interactive/form/PDAppearanceString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/service/interactive/form/PDAppearanceString.java?rev=1655173&r1=1655172&r2=1655173&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/service/interactive/form/PDAppearanceString.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/service/interactive/form/PDAppearanceString.java Tue Jan 27 22:10:15 2015
@@ -22,9 +22,12 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.nio.charset.Charset;
+import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.Deque;
import java.util.Iterator;
import java.util.List;
+import java.util.Stack;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -34,7 +37,6 @@ import org.apache.pdfbox.cos.COSFloat;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSNumber;
import org.apache.pdfbox.cos.COSStream;
-import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.pdfparser.PDFStreamParser;
import org.apache.pdfbox.pdfwriter.COSWriter;
import org.apache.pdfbox.pdfwriter.ContentStreamWriter;
@@ -69,7 +71,7 @@ public final class PDAppearanceString
private final PDVariableText parent;
private String value;
- private final COSString defaultAppearance;
+ private final String defaultAppearance;
private final PDAcroForm acroForm;
private List<COSObjectable> widgets = new ArrayList<COSObjectable>();
@@ -100,23 +102,9 @@ public final class PDAppearanceString
*
* @return The DA element
*/
- private COSString getDefaultAppearance()
+ private String getDefaultAppearance()
{
- COSString dap = parent.getDefaultAppearance();
- if (dap == null)
- {
- COSArray kids = (COSArray) parent.getDictionary().getDictionaryObject(COSName.KIDS);
- if (kids != null && kids.size() > 0)
- {
- COSDictionary firstKid = (COSDictionary) kids.getObject(0);
- dap = (COSString) firstKid.getDictionaryObject(COSName.DA);
- }
- if (dap == null)
- {
- dap = (COSString) acroForm.getDictionary().getDictionaryObject(COSName.DA);
- }
- }
- return dap;
+ return parent.getDefaultAppearance();
}
private int getQ()
@@ -153,19 +141,20 @@ public final class PDAppearanceString
return tokens;
}
- private List<Object> getStreamTokens(COSString string) throws IOException
+ private List<Object> getStreamTokens(String defaultAppearanceString) throws IOException
{
List<Object> tokens = new ArrayList<Object>();
- if (string != null)
+ if (defaultAppearanceString != null && !defaultAppearanceString.isEmpty())
{
- ByteArrayInputStream stream = new ByteArrayInputStream(string.getBytes());
+ ByteArrayInputStream stream = new ByteArrayInputStream(defaultAppearanceString.getBytes());
PDFStreamParser parser = new PDFStreamParser(stream);
parser.parse();
tokens = parser.getTokens();
+ parser.close();
}
return tokens;
}
-
+
private List<Object> getStreamTokens(COSStream stream) throws IOException
{
List<Object> tokens = new ArrayList<Object>();
@@ -174,6 +163,7 @@ public final class PDAppearanceString
PDFStreamParser parser = new PDFStreamParser(stream);
parser.parse();
tokens = parser.getTokens();
+ parser.close();
}
return tokens;
}
@@ -360,6 +350,7 @@ public final class PDAppearanceString
// Acrobat aligns left regardless of the quadding if the text is wider than the remaining width
float stringWidth = (font.getStringWidth(value) / 1000) * fontSize;
+
int q = getQ();
if (q == PDTextField.QUADDING_LEFT
|| stringWidth > borderEdge.getWidth() - paddingLeft - paddingRight)
@@ -388,8 +379,7 @@ public final class PDAppearanceString
paddingRight)
{
printWriter.flush();
- // TODO use font's encoding
- COSWriter.writeString(value.getBytes(Charset.forName("ISO-8859-1")), output);
+ COSWriter.writeString(font.encode(value), output);
printWriter.println(" Tj");
}
else
@@ -399,8 +389,7 @@ public final class PDAppearanceString
{
boolean lastLine = i == paragraphs.length - 1;
printWriter.flush();
- // TODO use font's encoding
- COSWriter.writeString(value.getBytes(Charset.forName("ISO-8859-1")), output);
+ COSWriter.writeString(font.encode(value), output);
printWriter.println(lastLine ? " Tj\n" : "> Tj 0 -13 Td");
}
}
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java?rev=1655173&r1=1655172&r2=1655173&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestFields.java Tue Jan 27 22:10:15 2015
@@ -177,7 +177,7 @@ public class TestFields extends TestCase
assertEquals(field.getDefaultValue(),"DefaultValue");
assertEquals(field.getDefaultValue(),
((COSString)field.getDictionary().getDictionaryObject(COSName.DV)).getString());
- assertEquals(((PDVariableText)field).getDefaultAppearance().getString(),"/Helv 12 Tf 0 g");
+ assertEquals(((PDVariableText)field).getDefaultAppearance(),"/Helv 12 Tf 0 g");
// get a rich text field with a DV entry
field = form.getField("RichTextField-DefaultValue");
@@ -186,7 +186,7 @@ public class TestFields extends TestCase
assertEquals(field.getDefaultValue(),
((COSString)field.getDictionary().getDictionaryObject(COSName.DV)).getString());
assertEquals(field.getValue(), "DefaultValue");
- assertEquals(((PDVariableText)field).getDefaultAppearance().getString(), "/Helv 12 Tf 0 g");
+ assertEquals(((PDVariableText)field).getDefaultAppearance(), "/Helv 12 Tf 0 g");
assertEquals(((PDVariableText)field).getDefaultStyleString(),
"font: Helvetica,sans-serif 12.0pt; text-align:left; color:#000000 ");
// do not test for the full content as this is a rather long xml string