use of com.itextpdf.kernel.pdf.canvas.CanvasArtifact in project i7j-pdfsweep by itext.
the class PdfCleanUpTool method drawOverlayText.
private void drawOverlayText(PdfCanvas canvas, String overlayText, Rectangle annotRect, PdfBoolean repeat, PdfString defaultAppearance, int justification) throws IOException {
Map<String, List> parsedDA;
try {
parsedDA = parseDAParam(defaultAppearance);
} catch (NullPointerException npe) {
throw new PdfException(CleanupExceptionMessageConstant.DEFAULT_APPEARANCE_NOT_FOUND);
}
PdfFont font;
float fontSize = 12;
List fontArgs = parsedDA.get("Tf");
PdfDictionary formDictionary = pdfDocument.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
if (fontArgs != null && formDictionary != null) {
font = getFontFromAcroForm((PdfName) fontArgs.get(0));
fontSize = ((PdfNumber) fontArgs.get(1)).floatValue();
} else {
font = PdfFontFactory.createFont();
}
if (pdfDocument.isTagged()) {
canvas.openTag(new CanvasArtifact());
}
Canvas modelCanvas = new Canvas(canvas, annotRect, false);
Paragraph p = new Paragraph(overlayText).setFont(font).setFontSize(fontSize).setMargin(0);
TextAlignment textAlignment = TextAlignment.LEFT;
switch(justification) {
case 1:
textAlignment = TextAlignment.CENTER;
break;
case 2:
textAlignment = TextAlignment.RIGHT;
break;
default:
}
p.setTextAlignment(textAlignment);
List strokeColorArgs = parsedDA.get("StrokeColor");
if (strokeColorArgs != null) {
p.setStrokeColor(getColor(strokeColorArgs));
}
List fillColorArgs = parsedDA.get("FillColor");
if (fillColorArgs != null) {
p.setFontColor(getColor(fillColorArgs));
}
modelCanvas.add(p);
if (repeat != null && repeat.getValue()) {
boolean hasFull = modelCanvas.getRenderer().hasProperty(Property.FULL);
boolean isFull = hasFull ? (boolean) modelCanvas.getRenderer().getPropertyAsBoolean(Property.FULL) : false;
while (!isFull) {
p.add(overlayText);
LayoutArea previousArea = modelCanvas.getRenderer().getCurrentArea().clone();
modelCanvas.relayout();
if (modelCanvas.getRenderer().getCurrentArea().equals(previousArea)) {
// Avoid infinite loop. This might be caused by the fact that the font does not support the text we want to show
break;
}
hasFull = modelCanvas.getRenderer().hasProperty(Property.FULL);
isFull = hasFull ? (boolean) modelCanvas.getRenderer().getPropertyAsBoolean(Property.FULL) : false;
}
}
modelCanvas.getRenderer().flush();
if (pdfDocument.isTagged()) {
canvas.closeTag();
}
}
use of com.itextpdf.kernel.pdf.canvas.CanvasArtifact in project i7j-pdfsweep by itext.
the class PdfCleanUpTool method addColoredRectangle.
/**
* Draws a colored rectangle on the PdfCanvas correponding to a PdfCleanUpLocation.
*
* @param canvas the PdfCanvas on which to draw
* @param location the PdfCleanUpLocation
*/
private void addColoredRectangle(PdfCanvas canvas, PdfCleanUpLocation location) {
if (pdfDocument.isTagged()) {
canvas.openTag(new CanvasArtifact());
}
// To avoid the float calculation precision differences in Java and .Net,
// the values of rectangles to be drawn are rounded
float x = (float) (Math.floor(location.getRegion().getX() * 2.0) / 2.0);
float y = (float) (Math.floor(location.getRegion().getY() * 2.0) / 2.0);
float width = (float) (Math.floor(location.getRegion().getWidth() * 2.0) / 2.0);
float height = (float) (Math.floor(location.getRegion().getHeight() * 2.0) / 2.0);
Rectangle rect = new Rectangle(x, y, width, height);
canvas.saveState().setFillColor(location.getCleanUpColor()).rectangle(rect).fill().restoreState();
if (pdfDocument.isTagged()) {
canvas.closeTag();
}
}
use of com.itextpdf.kernel.pdf.canvas.CanvasArtifact in project i7j-pdfsweep by itext.
the class PdfCleanUpTool method drawRolloverAppearance.
private void drawRolloverAppearance(PdfCanvas canvas, PdfStream redactRolloverAppearance, Rectangle annotRect, List<Rectangle> cleanedRegions) {
if (pdfDocument.isTagged()) {
canvas.openTag(new CanvasArtifact());
}
canvas.saveState();
for (Rectangle rect : cleanedRegions) {
canvas.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
}
canvas.clip().endPath();
PdfFormXObject formXObject = new PdfFormXObject(redactRolloverAppearance);
canvas.addXObjectWithTransformationMatrix(formXObject, 1, 0, 0, 1, annotRect.getLeft(), annotRect.getBottom());
canvas.restoreState();
if (pdfDocument.isTagged()) {
canvas.closeTag();
}
}
Aggregations