use of com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo 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.parser.data.TextRenderInfo in project i7j-pdfsweep by itext.
the class PdfCleanUpEventListener method getEncounteredText.
/**
* Get the last encountered TextRenderInfo objects, then clears the internal buffer
*
* @return the TextRenderInfo objects that were encountered when processing the last text rendering operation
*/
List<TextRenderInfo> getEncounteredText() {
if (content.size() == 0) {
throw new PdfException(textDataExpected);
}
ArrayList<TextRenderInfo> text = new ArrayList<>(content.size());
for (IEventData data : content) {
if (data instanceof TextRenderInfo) {
text.add((TextRenderInfo) data);
} else {
throw new PdfException(textDataExpected);
}
}
content.clear();
return text;
}
Aggregations