У меня есть проект java, в котором я читаю PDF и получаю координаты всех букв на каждой странице этого PDF. Сейчас я пытаюсь обновить iText5 до iText7, и координаты не совпадают, даже когда я читаю тот же PDF.
Вот мой код, используемый в iText5:
private class PageTextRenderListener implements RenderListener {
public void renderText(TextRenderInfo renderInfo) {
for (TextRenderInfo tri : renderInfo.getCharacterRenderInfos()) {
String text = tri.getText().replaceAll(WHITE_SPACE, "");
if (!text.equals("")) {
LineSegment base = tri.getBaseline();
LineSegment asc = tri.getAscentLine();
LineSegment desc = tri.getDescentLine();
final Rectangle2D r0 = base.getBoundingRectange();
final Rectangle2D r1 = asc.getBoundingRectange();
final Rectangle2D r2 = desc.getBoundingRectange();
final Rectangle2D r = r1.createUnion(r2).createUnion(r0);
Код для iText7 выглядит почти так же:
private class PageTextRenderListener implements IEventListener {
@Override
public void eventOccurred(IEventData iEventData, EventType eventType) {
List<TextRenderInfo> characterRenderInfos = ((TextRenderInfo) iEventData).getCharacterRenderInfos();
for (TextRenderInfo tri : characterRenderInfos) {
String text = tri.getText().replaceAll(WHITE_SPACE, "");
if (!text.equals("")) {
final LineSegment base = tri.getBaseline();
LineSegment baseLine = tri.getBaseline();
LineSegment ascLine = tri.getAscentLine();
LineSegment descLine = tri.getDescentLine();
Rectangle r0 = baseLine.getBoundingRectangle();
Rectangle r1 = ascLine.getBoundingRectangle();
Rectangle r2 = descLine.getBoundingRectangle();
final Rectangle r = Rectangle.getCommonRectangle(r0,r1,r2);
У меня проблема в том, что результаты не ' выходит то же самое. Я выследил проблему, чтобы быть в Vector
s, которые составляют LineSegment
. Если я go и прочитал значения там, координата Y отличается на линии подъема буквы. Как это может быть?
Я также обнаружил, что эта проблема связана со встроенным шрифтом. Если я создаю pdf с использованием iText и встраиваю шрифт, а затем создаю несколько Paragraph
с текстом, используя шрифт ebmedded, а некоторые - только базовый шрифт, то текстовые координаты, созданные с помощью встроенного шрифта, различаются. Координаты из текста, который использует базовый шрифт, получили одинаковые значения между iText5 и 7. Я не проверял это со всеми видами шрифтов и подмножеств, поэтому это не всегда может быть правдой.