发生异常:原因:坐标超出允许范围java.lang.IllegalStateException:坐标超出允许范围
Exception occur :Reason : Coordinate outside allowed range java.lang.IllegalStateException: Coordinate outside allowed range
我在 pdf 文档中应用修订时遇到 "Coordinate outside allowed range java.lang.IllegalStateException" 异常。
我尝试过各种坐标,但每次都出现相同的异常 showing.Could 请您帮助我们,为什么我只针对特定文档获得此异常。
异常跟踪:
原因:坐标超出允许范围
java.lang.IllegalStateException: 坐标超出允许范围
在 com.itextpdf.text.pdf.parser.clipper.ClipperBase.rangeTest(ClipperBase.java:120)
在 com.itextpdf.text.pdf.parser.clipper.ClipperBase.rangeTest(ClipperBase.java:122)
在 com.itextpdf.text.pdf.parser.clipper.ClipperBase.addPath(ClipperBase.java:194)
在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.addPath(PdfCleanUpRegionFilter.java:418)
在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.filterFillPath(PdfCleanUpRegionFilter.java:173)
在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.filterCurrentPath(PdfCleanUpRenderListener.java:368)
在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderPath(PdfCleanUpRenderListener.java:207)
在 com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.paintPath(PdfContentStreamProcessor.java:377)
使用了 itextpdf-5.5.9 和 itext-xtra-5.5.9
示例代码:
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(targetPdf));
stamper.setRotateContents(false);
List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
Rectangle rectangle = new Rectangle(400, 600, 500, 650);
cleanUpLocations.add(new PdfCleanUpLocation(1, rectangle, BaseColor.BLACK));
PdfCleanUpProcessor cleaner = new PdfCleanUpProcessor(cleanUpLocations, stamper);
cleaner.cleanUp();
stamper.close();
reader.close();
这个问题与我们itext在某些操作中使用long数据类型作为PDF中坐标的内部表示有关。做出这个决定是为了避免精度损失。
您提供的文档的内容流中包含绘制坐标为(0,0,65535,65535)的矩形的命令。在某些时候
cleaner.cleanUp();
操作,我们必须使用 PDF 内容流中指定的坐标,而不应用任何转换矩阵。为了将其转换为长整数,每个坐标都乘以一个 public 常量
PdfCleanUpProcessor.floatMultiplier
,目前等于 10^14。然后65535*10^14与最大的长数(即4611686018427387903)进行比较,认为超出范围,因为65535*10^14更大。
我们可以将 PdfCleanUpProcessor.floatMultiplier 更改为 0.5*10^14,或 10^13。这在其他情况下应该是可用的,因为 65535 对于 PDF 来说是一个巨大的数字,并且不经常遇到。遇到更大的数字的可能性很小
我在 pdf 文档中应用修订时遇到 "Coordinate outside allowed range java.lang.IllegalStateException" 异常。
我尝试过各种坐标,但每次都出现相同的异常 showing.Could 请您帮助我们,为什么我只针对特定文档获得此异常。
异常跟踪: 原因:坐标超出允许范围 java.lang.IllegalStateException: 坐标超出允许范围 在 com.itextpdf.text.pdf.parser.clipper.ClipperBase.rangeTest(ClipperBase.java:120) 在 com.itextpdf.text.pdf.parser.clipper.ClipperBase.rangeTest(ClipperBase.java:122) 在 com.itextpdf.text.pdf.parser.clipper.ClipperBase.addPath(ClipperBase.java:194) 在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.addPath(PdfCleanUpRegionFilter.java:418) 在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.filterFillPath(PdfCleanUpRegionFilter.java:173) 在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.filterCurrentPath(PdfCleanUpRenderListener.java:368) 在 com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderPath(PdfCleanUpRenderListener.java:207) 在 com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.paintPath(PdfContentStreamProcessor.java:377)
使用了 itextpdf-5.5.9 和 itext-xtra-5.5.9
示例代码:
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(targetPdf));
stamper.setRotateContents(false);
List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
Rectangle rectangle = new Rectangle(400, 600, 500, 650);
cleanUpLocations.add(new PdfCleanUpLocation(1, rectangle, BaseColor.BLACK));
PdfCleanUpProcessor cleaner = new PdfCleanUpProcessor(cleanUpLocations, stamper);
cleaner.cleanUp();
stamper.close();
reader.close();
这个问题与我们itext在某些操作中使用long数据类型作为PDF中坐标的内部表示有关。做出这个决定是为了避免精度损失。 您提供的文档的内容流中包含绘制坐标为(0,0,65535,65535)的矩形的命令。在某些时候 cleaner.cleanUp(); 操作,我们必须使用 PDF 内容流中指定的坐标,而不应用任何转换矩阵。为了将其转换为长整数,每个坐标都乘以一个 public 常量 PdfCleanUpProcessor.floatMultiplier ,目前等于 10^14。然后65535*10^14与最大的长数(即4611686018427387903)进行比较,认为超出范围,因为65535*10^14更大。 我们可以将 PdfCleanUpProcessor.floatMultiplier 更改为 0.5*10^14,或 10^13。这在其他情况下应该是可用的,因为 65535 对于 PDF 来说是一个巨大的数字,并且不经常遇到。遇到更大的数字的可能性很小