use of com.itextpdf.kernel.pdf.canvas.CanvasGraphicsState in project i7j-pdfsweep by itext.
the class PdfCleanUpProcessor method writeNotAppliedTextStateParams.
private void writeNotAppliedTextStateParams(TextRenderInfo text) {
PdfCanvas canvas = getCanvas();
CanvasGraphicsState currGs = canvas.getGraphicsState();
if (currGs.getCharSpacing() != text.getCharSpacing()) {
canvas.setCharacterSpacing(text.getCharSpacing());
}
if (currGs.getWordSpacing() != text.getWordSpacing()) {
canvas.setWordSpacing(text.getWordSpacing());
}
if (currGs.getHorizontalScaling() != text.getHorizontalScaling()) {
canvas.setHorizontalScaling(text.getHorizontalScaling());
}
// not writing leading here, it is processed along with positioning operators
PdfFont currFont = currGs.getFont();
if (currFont == null || currFont.getPdfObject() != text.getFont().getPdfObject() || currGs.getFontSize() != text.getFontSize()) {
canvas.setFontAndSize(text.getFont(), text.getFontSize());
}
if (currGs.getTextRenderingMode() != text.getTextRenderMode()) {
canvas.setTextRenderingMode(text.getTextRenderMode());
}
if (currGs.getTextRise() != text.getRise()) {
canvas.setTextRise(text.getRise());
}
}
use of com.itextpdf.kernel.pdf.canvas.CanvasGraphicsState 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());
}
}
use of com.itextpdf.kernel.pdf.canvas.CanvasGraphicsState in project i7j-pdfsweep by itext.
the class TextPositioning method writeText.
private void writeText(String operator, List<PdfObject> operands, PdfArray cleanedText, PdfCanvas canvas) {
CanvasGraphicsState canvasGs = canvas.getGraphicsState();
boolean newLineShowText = "'".equals(operator) || "\"".equals(operator);
if (newLineShowText) {
if (canvasGs.getLeading() != currLeading) {
canvas.setLeading(currLeading);
}
// after new line operator, removed text shift doesn't matter
removedTextShift = null;
}
PdfTextArray tjShiftArray = null;
if (removedTextShift != null) {
float tjShift = (float) removedTextShift * 1000 / (canvasGs.getFontSize() * canvasGs.getHorizontalScaling() / 100);
tjShiftArray = new PdfTextArray();
tjShiftArray.add(new PdfNumber(tjShift));
}
if (cleanedText != null) {
if (newLineShowText) {
// char spacing and word spacing are set via writeNotAppliedTextStateParams() method
canvas.newlineText();
}
if (removedTextShift != null) {
tjShiftArray.addAll(cleanedText);
cleanedText = tjShiftArray;
}
canvas.showText(cleanedText);
} else {
if (removedTextShift != null) {
canvas.showText(tjShiftArray);
}
PdfCleanUpProcessor.writeOperands(canvas, operands);
}
}
Aggregations