ввода PDF документа с комментариемExtract PDF комментарии в HTML
У меня есть PDF-документ с подсветкой и комментариями по блику ("мой комментарий") (downlload).
Желаемая выход
Я хочу, чтобы преобразовать PDF в текст, где комментарий в теги, что-то вроде этого:
ONE TWO THREE
FOUR <b id="my comment">FIVE</b> SIX SEVEN
Вопрос
Может кто-нибудь помочь мне, как реализовать метод:
private double getDistance(PDAnnotation ann, TextPosition firstProsition) {...}
или метод
private boolean isTextAnnotated()
, чтобы определить, является ли аннотация апп находится в позиции текста? Если возможно, также будет полезно определить текстовую позицию комментария.
JAVA код
Во всяком случае я заблудился о том, как определить, если аннотаций связан с перерабатываемой в настоящее время текст. Я также не знаю, если можно определить точную часть текста.
PDFParser parser = new PDFParser(new FileInputStream(file));
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper()
{
List<PDAnnotation> la;
private boolean closeWithEnd;
@Override
protected void startPage(PDPage page) throws IOException
{
la = page.getAnnotations(); // init pages
startOfLine = true;
super.startPage(page);
}
@Override
protected void writeLineSeparator() throws IOException
{
startOfLine = true;
super.writeLineSeparator();
if(closeWithEnd) {
writeString(" </b> ");
}
}
@Override
protected void writeString(String text, List<TextPosition> textPositions) throws IOException
{
if (startOfLine)
{
TextPosition firstProsition = textPositions.get(0);
PDAnnotation ann;
if((ann = isTextAnnotated(firstProsition, text)) != null) {
writeString(" <b id='"+ann.getAnnotationName()+"'> ");
closeWithEnd = true;
} else {
closeWithEnd = false;
}
startOfLine = false;
}
super.writeString(text+" ", textPositions);
}
private PDAnnotation isTextAnnotated(TextPosition firstProsition, String text) {
for (PDAnnotation ann : la) {
System.out.println(text+" ------------- "+getDistance(ann, firstProsition));
}
return null;
}
private double getDistance(PDAnnotation ann, TextPosition firstProsition) {
TODO - how to get distance
return 0.0;
}
boolean startOfLine = true;
};
pdDoc = new PDDocument(cosDoc);
pdfStripper.setStartPage(0);
pdfStripper.setEndPage(pdDoc.getNumberOfPages());
String parsedText = pdfStripper.getText(pdDoc);
Maven зависимостей
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- http://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>1.8.10</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.apache.tika/tika-core -->
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.13</version>
</dependency>
<!-- http://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- http://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>info.debatty</groupId>
<artifactId>java-string-similarity</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.opennlp</groupId>
<artifactId>opennlp-tools</artifactId>
<version>1.6.0</version>
</dependency>
Я не думаю, что на ваш вопрос есть «идеальный ответ». Аннотации имеют прямоугольник, который вы можете получить, но это не означает, что вся поверхность прямоугольника над текстом. Существует много разных типов аннотаций, см. Http://www.pdfill.com/example/pdf_commenting_new.pdf –
Действительно ли ваш план делает текст жирным? Просто интересно, что именно вы пытаетесь сделать, если есть другой способ сделать это, что будет иметь больше смысла. Если вы просто хотите узнать, подсвечена ли какая-либо часть текста, вы можете обнаружить это, но, как отмечено в предыдущем комментарии, возможно, что выделена только часть текста. – Amber
Кроме того, вас интересуют только аннотации выделения? – Amber