Я пытаюсь прочитать одностраничный файл PDF и динамически заменить часть его содержимого (т. Е. Дату, номера страниц).
Здесь - это мой образец файла PDF.(Файл был создан с помощью MS Word
. Все элементы являются таблицами)
Я знаю, что могу сделать это с Acro Form
, но в Word
пользователям гораздо проще создавать шаблоны.
В этом примере я хочу заменить {CREATE_DATE}
на текущую дату, {DATA_AREA}
будет областью содержимого, а {PAGE_NUMBER}
- текущим номером страницы.
Что я сделал до сих пор, так это переопределил ITextExtractionStrategy
и передайте его как delegate
на GlyphTextEventListener
.Делая это, я мог прочитать каждый отдельный символ, определить его положение и рассчитать общую ширину, которую он занимает, а затем передать результаты в IEventHandler
для каждой новой страницы.
private void renderText(TextRenderInfo renderInfo) {
if (renderInfo.getText().trim().length() == 0) {
if (text.isEmpty()) {
return;
} else {
LineSegment ascent = renderInfo.getAscentLine();
endX = ascent.getEndPoint().get(0);
endY = ascent.getEndPoint().get(1);
Rectangle rectangle = new Rectangle(initX, initY, endX - initX, endY - initY);
FontFilter fontFilter = new FontFilter(rectangle);
boolean accept = fontFilter.accept(renderInfo, EventType.RENDER_TEXT);
float fontSize;
if (accept) {
fontSize = fontFilter.getFontSize();
}else {
fontSize = 8;
}
SimpleTextWithRectangle textWithRectangle = new SimpleTextWithRectangle(rectangle, text,
fontSize);
textWithRectangleList.add(textWithRectangle);
text = "";
initX = 0; initY = 0; endX = 0; endY = 0;
return;
}
}
LineSegment descent = renderInfo.getDescentLine();
if (text.isEmpty()) { // start word
initX = descent.getStartPoint().get(0);
initY = descent.getStartPoint().get(1);
}
text = text + renderInfo.getText();
}
Я пытаюсь получить границы (если возможно, линии), чтобы я мог определить область данных.
Заранее спасибо.