0

我一直在努力使用 PDFClown 突出显示 pdf,并且大部分工作正常,但在少数情况下,它会给出以下堆栈跟踪中提供的异常:

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.util.TimSort.mergeLo(Unknown Source)
    at java.util.TimSort.mergeAt(Unknown Source)
    at java.util.TimSort.mergeCollapse(Unknown Source)
    at java.util.TimSort.sort(Unknown Source)
    at java.util.TimSort.sort(Unknown Source)
    at java.util.Arrays.sort(Unknown Source)
    at java.util.Collections.sort(Unknown Source)
    at org.pdfclown.tools.TextExtractor.sort(TextExtractor.java:633)
    at org.pdfclown.tools.TextExtractor.extract(TextExtractor.java:284)
    at org.pdfclown.samples.cli.TextHighlightSample.run(TextHighlightSample.java:60)
    at com.dhawan.poc.Highlight.main(Highlight.java:9)

链接到 PDF 文件

知道如何解决这个问题吗?

4

1 回答 1

0

您使用哪个版本的 PDFClown?您的堆栈跟踪与http://svn.code.sf.net/p/clown/code/trunk/java/pdfclown.lib上的当前代码不匹配,而是包含以下用于排序的比较:

public int compare(
  ITextString textString1,
  ITextString textString2
  )
{
  Rectangle2D box1 = textString1.getBox();
  Rectangle2D box2 = textString2.getBox();
  if(isOnTheSameLine(box1,box2))
  {
    /*
      [FIX:55:0.1.3] In order not to violate the transitive condition, equivalence on x-axis
      MUST fall back on y-axis comparison.
    */
    int xCompare = Double.compare(box1.getX(), box2.getX());
    if(xCompare != 0)
      return xCompare;
  }
  return Double.compare(box1.getY(), box2.getY());
}

http://svn.code.sf.net/p/clown/code/trunk/java/pdfclown.lib/src/org/pdfclown/tools/TextExtractor.java,第 121 版)

此修复已于 2014 年 5 月 5 日推出。如果您拥有 0.1.3 之前的 PDFClown 版本或在该日期之前构建的 0.1.3 版本,您应该更新 PDFClown。

于 2014-07-09T11:09:55.903 回答