You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/07/09 17:59:00 UTC
svn commit: r1609211 -
/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
Author: tilman
Date: Wed Jul 9 15:59:00 2014
New Revision: 1609211
URL: http://svn.apache.org/r1609211
Log:
PDFBOX-283: more fix convertToMultiLine bug, as suggested by Marco Primiceri; some minor cleanup
Modified:
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java?rev=1609211&r1=1609210&r2=1609211&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java Wed Jul 9 15:59:00 2014
@@ -69,12 +69,12 @@ import org.apache.pdfbox.util.PDFOperato
*/
public class PDAppearance
{
- private PDVariableText parent;
+ private final PDVariableText parent;
private String value;
- private COSString defaultAppearance;
+ private final COSString defaultAppearance;
- private PDAcroForm acroForm;
+ private final PDAcroForm acroForm;
private List<COSObjectable> widgets = new ArrayList<COSObjectable>();
@@ -209,19 +209,13 @@ public class PDAppearance
*/
public void setAppearanceValue(String apValue) throws IOException
{
- // MulitLine check and set
- if ( parent.isMultiline() && apValue.indexOf('\n') != -1 )
- {
- apValue = convertToMultiLine( apValue );
- }
-
value = apValue;
Iterator<COSObjectable> widgetIter = widgets.iterator();
while( widgetIter.hasNext() )
{
COSObjectable next = widgetIter.next();
PDField field = null;
- PDAnnotationWidget widget = null;
+ PDAnnotationWidget widget;
if( next instanceof PDField )
{
field = (PDField)next;
@@ -355,8 +349,7 @@ public class PDAppearance
{
PrintWriter printWriter = new PrintWriter( output, true );
float fontSize = 0.0f;
- PDRectangle boundingBox = null;
- boundingBox = appearanceStream.getBoundingBox();
+ PDRectangle boundingBox = appearanceStream.getBoundingBox();
if( boundingBox == null )
{
boundingBox = fieldWidget.getRectangle().createRetranslatedRectangle();
@@ -402,14 +395,26 @@ public class PDAppearance
throw new IOException( "Error: Unknown justification value:" + q );
}
// add the value as hex string to deal with non ISO-8859-1 data values
- printWriter.println("<" + new COSString(value).getHexString() + "> Tj");
- printWriter.println("ET" );
+ if (!isMultiLineValue(value))
+ {
+ printWriter.println("<" + new COSString(value).getHexString() + "> Tj");
+ }
+ else
+ {
+ String[] lines = value.split("\n");
+ for (int i = 0; i < lines.length; i++)
+ {
+ boolean lastLine = i == (lines.length - 1);
+ String endingTag = lastLine ? "> Tj\n" : "> Tj 0 -13 Td";
+ printWriter.print("<" + new COSString(lines[i]).getHexString() + endingTag);
+ }
+ }
+ printWriter.println("ET");
printWriter.flush();
}
private PDFont getFontAndUpdateResources( List tokens, PDAppearanceStream appearanceStream ) throws IOException
{
-
PDFont retval = null;
PDResources streamResources = appearanceStream.getResources();
PDResources formResources = acroForm.getDefaultResources();
@@ -444,19 +449,9 @@ public class PDAppearance
return retval;
}
- private String convertToMultiLine( String line )
+ private boolean isMultiLineValue(String value)
{
- int currIdx = 0;
- int lastIdx = 0;
- StringBuffer result = new StringBuffer(line.length() + 64);
- while( (currIdx = line.indexOf('\n',lastIdx )) > -1 )
- {
- result.append(line.substring(lastIdx,currIdx));
- result.append(" > Tj\n0 -13 Td\n<");
- lastIdx = currIdx + 1;
- }
- result.append(line.substring(lastIdx));
- return result.toString();
+ return (parent.isMultiline() && value.contains("\n"));
}
/**
@@ -471,7 +466,6 @@ public class PDAppearance
out.flush();
}
-
/**
* w in an appearance stream represents the lineWidth.
* @return the linewidth