PDInkAppearanceHandler.java (pdfbox-2.0.23-src) | : | PDInkAppearanceHandler.java (pdfbox-2.0.24-src) | ||
---|---|---|---|---|
skipping to change at line 28 | skipping to change at line 28 | |||
import java.io.IOException; | import java.io.IOException; | |||
import org.apache.commons.logging.Log; | import org.apache.commons.logging.Log; | |||
import org.apache.commons.logging.LogFactory; | import org.apache.commons.logging.LogFactory; | |||
import org.apache.pdfbox.pdmodel.graphics.color.PDColor; | import org.apache.pdfbox.pdmodel.graphics.color.PDColor; | |||
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; | import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; | |||
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup; | import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup; | |||
import org.apache.pdfbox.io.IOUtils; | import org.apache.pdfbox.io.IOUtils; | |||
import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; | import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; | |||
import org.apache.pdfbox.pdmodel.PDDocument; | import org.apache.pdfbox.pdmodel.PDDocument; | |||
import org.apache.pdfbox.pdmodel.common.PDRectangle; | ||||
/** | /** | |||
* Handler to generate the ink annotations appearance. | * Handler to generate the ink annotations appearance. | |||
* | * | |||
*/ | */ | |||
public class PDInkAppearanceHandler extends PDAbstractAppearanceHandler | public class PDInkAppearanceHandler extends PDAbstractAppearanceHandler | |||
{ | { | |||
private static final Log LOG = LogFactory.getLog(PDInkAppearanceHandler.clas s); | private static final Log LOG = LogFactory.getLog(PDInkAppearanceHandler.clas s); | |||
public PDInkAppearanceHandler(PDAnnotation annotation) | public PDInkAppearanceHandler(PDAnnotation annotation) | |||
skipping to change at line 67 | skipping to change at line 68 | |||
{ | { | |||
PDAnnotationMarkup ink = (PDAnnotationMarkup) getAnnotation(); | PDAnnotationMarkup ink = (PDAnnotationMarkup) getAnnotation(); | |||
// PDF spec does not mention /Border for ink annotations, but it is used if /BS is not available | // PDF spec does not mention /Border for ink annotations, but it is used if /BS is not available | |||
AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(ink, ink.getB orderStyle()); | AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(ink, ink.getB orderStyle()); | |||
PDColor color = ink.getColor(); | PDColor color = ink.getColor(); | |||
if (color == null || color.getComponents().length == 0 || Float.compare( ab.width, 0) == 0) | if (color == null || color.getComponents().length == 0 || Float.compare( ab.width, 0) == 0) | |||
{ | { | |||
return; | return; | |||
} | } | |||
// Adjust rectangle even if not empty | ||||
// file from PDF.js issue 13447 | ||||
//TODO in a class structure this should be overridable | ||||
float minX = Float.MAX_VALUE; | ||||
float minY = Float.MAX_VALUE; | ||||
float maxX = Float.MIN_VALUE; | ||||
float maxY = Float.MIN_VALUE; | ||||
for (float[] pathArray : ink.getInkList()) | ||||
{ | ||||
int nPoints = pathArray.length / 2; | ||||
for (int i = 0; i < nPoints; ++i) | ||||
{ | ||||
float x = pathArray[i * 2]; | ||||
float y = pathArray[i * 2 + 1]; | ||||
minX = Math.min(minX, x); | ||||
minY = Math.min(minY, y); | ||||
maxX = Math.max(maxX, x); | ||||
maxY = Math.max(maxY, y); | ||||
} | ||||
} | ||||
PDRectangle rect = ink.getRectangle(); | ||||
rect.setLowerLeftX(Math.min(minX - ab.width * 2, rect.getLowerLeftX())); | ||||
rect.setLowerLeftY(Math.min(minY - ab.width * 2, rect.getLowerLeftY())); | ||||
rect.setUpperRightX(Math.max(maxX + ab.width * 2, rect.getUpperRightX()) | ||||
); | ||||
rect.setUpperRightY(Math.max(maxY + ab.width * 2, rect.getUpperRightY()) | ||||
); | ||||
ink.setRectangle(rect); | ||||
PDAppearanceContentStream cs = null; | PDAppearanceContentStream cs = null; | |||
try | try | |||
{ | { | |||
cs = getNormalAppearanceAsContentStream(); | cs = getNormalAppearanceAsContentStream(); | |||
setOpacity(cs, ink.getConstantOpacity()); | setOpacity(cs, ink.getConstantOpacity()); | |||
cs.setStrokingColor(color); | cs.setStrokingColor(color); | |||
if (ab.dashArray != null) | if (ab.dashArray != null) | |||
End of changes. 2 change blocks. | ||||
0 lines changed or deleted | 30 lines changed or added |