use of com.itextpdf.kernel.pdf.PdfObject in project i7j-pdfsweep by itext.
the class PdfCleanUpProcessor method applyGsParams.
private void applyGsParams(boolean fill, boolean stroke, NotAppliedGsParams gsParams) {
for (PdfDictionary extGState : gsParams.extGStates) {
getCanvas().setExtGState(extGState);
}
gsParams.extGStates.clear();
if (gsParams.ctms.size() > 0) {
Matrix m = new Matrix();
for (List<PdfObject> ctm : gsParams.ctms) {
m = operandsToMatrix(ctm).multiply(m);
}
getCanvas().concatMatrix(m.get(Matrix.I11), m.get(Matrix.I12), m.get(Matrix.I21), m.get(Matrix.I22), m.get(Matrix.I31), m.get(Matrix.I32));
gsParams.ctms.clear();
}
if (stroke) {
for (List<PdfObject> strokeState : gsParams.lineStyleOperators.values()) {
writeOperands(getCanvas(), strokeState);
}
gsParams.lineStyleOperators.clear();
}
if (fill) {
if (gsParams.fillColor != null) {
getCanvas().setFillColor(gsParams.fillColor);
}
gsParams.fillColor = null;
}
if (stroke) {
if (gsParams.strokeColor != null) {
getCanvas().setStrokeColor(gsParams.strokeColor);
}
gsParams.strokeColor = null;
}
}
use of com.itextpdf.kernel.pdf.PdfObject in project i7j-pdfsweep by itext.
the class PdfCleanUpProcessor method cleanText.
private void cleanText(String operator, List<PdfObject> operands) {
List<TextRenderInfo> textChunks = null;
PdfArray cleanedText = null;
if ("TJ".equals(operator)) {
PdfArray originalTJ = (PdfArray) operands.get(0);
if (originalTJ.isEmpty()) {
// we can safely ignore it
return;
}
// text chunk index in original TJ
int i = 0;
PdfTextArray newTJ = new PdfTextArray();
for (PdfObject e : originalTJ) {
if (e.isString()) {
if (null == textChunks) {
textChunks = ((PdfCleanUpEventListener) getEventListener()).getEncounteredText();
}
PdfArray filteredText = filter.filterText(textChunks.get(i++)).getFilterResult();
newTJ.addAll(filteredText);
} else {
newTJ.add(e);
}
}
cleanedText = newTJ;
} else {
// if operator is Tj or ' or "
textChunks = ((PdfCleanUpEventListener) getEventListener()).getEncounteredText();
PdfCleanUpFilter.FilterResult<PdfArray> filterResult = filter.filterText(textChunks.get(0));
if (filterResult.isModified()) {
cleanedText = filterResult.getFilterResult();
}
}
// if text wasn't modified cleanedText is null
if (cleanedText == null || cleanedText.size() != 1 || !cleanedText.get(0).isNumber()) {
if (null == textChunks) {
textChunks = ((PdfCleanUpEventListener) getEventListener()).getEncounteredText();
}
// all text chunks even in case of TJ have the same graphics state
TextRenderInfo text = textChunks.get(0);
writeNotAppliedGsParamsForText(text);
beginTextObjectAndOpenNotWrittenTags();
writeNotAppliedTextStateParams(text);
textPositioning.writePositionedText(operator, operands, cleanedText, getCanvas());
} else {
// cleaned text is tj array with single number - it means that the whole text chunk was removed
CanvasGraphicsState gs = getCanvas().getGraphicsState();
// process new lines if necessary
if ("'".equals(operator) || "\"".equals(operator)) {
List<PdfObject> newLineList = new ArrayList<>();
newLineList.add(new PdfLiteral("T*"));
textPositioning.appendPositioningOperator("T*", newLineList);
}
textPositioning.appendTjArrayWithSingleNumber(cleanedText, gs.getFontSize(), gs.getHorizontalScaling());
}
}
Aggregations