Eingang PDF-Dokument mit KommentarenExtract PDF-Kommentare in HTML
Ich habe ein PDF-Dokument mit Highlight und kommentiert die Highlight ("meinen Kommentar") (downlload).
Wunsch Ausgang
ich die PDF in Text konvertieren möchten, wo Kommentar in Tags ist, so etwas wie dieses:
ONE TWO THREE
FOUR <b id="my comment">FIVE</b> SIX SEVEN
Frage
Kann mir jemand helfen, wie Verfahren zu implementieren:
private double getDistance(PDAnnotation ann, TextPosition firstProsition) {...}
oder der Methode
private boolean isTextAnnotated()
zu bestimmen, ob die Anmerkung ann an der Position des Textes? Wenn möglich, wäre auch die Textposition des Kommentars schön zu bestimmen.
JAVA-Code
Auf jeden Fall habe ich verloren darüber, wie um zu bestimmen, ob Anmerkung zu dem aktuell bearbeiteten Text bezogen ist. Ich weiß auch nicht, ob es möglich ist, den genauen Teil des Textes zu identifizieren.
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 Abhängigkeiten
<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>
Ich denke nicht, dass es "die perfekte Antwort" auf Ihre Frage gibt. Beschriftungen haben ein Rechteck, das Sie erhalten können. Dies bedeutet jedoch nicht, dass die gesamte Fläche des Rechtecks über dem Text liegt. Es gibt viele verschiedene Arten von Anmerkungen, siehe http://www.pdfill.com/example/pdf_commentment_new.pdf –
Ist Ihr Plan wirklich, den Text fett zu machen? Ich frage mich genau, was Sie zu tun versuchen, falls es einen anderen Weg gibt, der sinnvoller wäre. Wenn Sie nur wissen möchten, ob ein Teil des Textes hervorgehoben ist, können Sie dies erkennen, aber wie im vorherigen Kommentar erwähnt, ist es möglich, dass nur ein Teil des Textes hervorgehoben ist. – Amber
Sind Sie auch nur an Highlight-Annotationen interessiert? – Amber