You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/11/01 14:57:11 UTC
svn commit: r1635948 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java
Author: lehmi
Date: Sat Nov 1 13:57:10 2014
New Revision: 1635948
URL: http://svn.apache.org/r1635948
Log:
PDFBOX-1036: replace the first part of a multipart text only, reuse font size of an existing appearance stream
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java?rev=1635948&r1=1635947&r2=1635948&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAppearanceString.java Sat Nov 1 13:57:10 2014
@@ -285,21 +285,38 @@ public final class PDAppearanceString
float fontSize = calculateFontSize(pdFont,
appearanceStream.getBBox(), tokens, null);
boolean foundString = false;
+ int indexOfString = -1;
for (Object token : tokens)
{
if (token instanceof COSString)
{
foundString = true;
+ indexOfString = tokens.indexOf(token);
COSString drawnString = (COSString) token;
drawnString.reset();
drawnString.append(apValue.getBytes("ISO-8859-1"));
+ // replace the first string only if the appearance stream
+ // consists of more than one text
+ break;
}
}
int setFontIndex = tokens.indexOf(Operator.getOperator("Tf"));
tokens.set(setFontIndex - 1, new COSFloat(fontSize));
if (foundString)
{
- writer.writeTokens(tokens);
+ int indexOfET = tokens.indexOf(Operator.getOperator("ET"));
+ // the existing appearance stream may contain more than one text
+ // so that we shall replace the first with the new value
+ // and skip the remaining parts
+ if (indexOfString+2 != indexOfET)
+ {
+ writer.writeTokens(tokens, 0, indexOfString+2);
+ writer.writeTokens(tokens, indexOfET, tokens.size());
+ }
+ else
+ {
+ writer.writeTokens(tokens);
+ }
}
else
{
@@ -550,9 +567,19 @@ public final class PDAppearanceString
List<Object> daTokens) throws IOException
{
float fontSize = 0;
- if (daTokens != null)
+ if (tokens != null)
+ {
+ // reuse the fontsize of an existing apperance stream
+ int fontIndex = tokens.indexOf(Operator.getOperator("Tf"));
+ if (fontIndex != -1)
+ {
+ fontSize = ((COSNumber) tokens.get(fontIndex - 1)).floatValue();
+ }
+ }
+ else if (daTokens != null)
{
// daString looks like "BMC /Helv 3.4 Tf EMC"
+ // use the fontsize of the default existing apperance stream
int fontIndex = daTokens.indexOf(Operator.getOperator("Tf"));
if (fontIndex != -1)
{