我一直在使用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文件
知道我该怎么解决这个问题吗?
发布于 2014-07-09 11:09:55
您使用哪个版本的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。
https://stackoverflow.com/questions/24646724
复制相似问题