2016-07-25 7 views
0

Ich erhalte "Ausnahme außerhalb des zulässigen Bereichs java.lang.IllegalStateException" Ausnahme beim Anwenden von Redaktion im PDF-Dokument.Ausnahme auftreten: Ursache: Koordinate außerhalb zulässigen Bereich java.lang.IllegalStateException: Koordinate außerhalb zulässigen Bereich

Ich habe versucht mit verschiedenen Koordinaten, aber jedes Mal die gleiche Ausnahme zeigt. Könnten Sie uns bitte helfen, warum ich diese Ausnahme nur für bestimmte Dokumente bekomme.

Exception Trace: Grund: Koordinieren außerhalb des zulässigen Bereichs java.lang.IllegalStateException: Koordinate außerhalb des zulässigen Bereichs bei com.itextpdf.text.pdf.parser.clipper.ClipperBase.rangeTest (ClipperBase.java:120) at com.itextpdf.text.pdf.parser.clipper.ClipperBase.rangeTest (ClipperBase.java:122) bei com.itextpdf.text.pdf.parser.clipper.ClipperBase.addPath (ClipperBase.java:194) at com .itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.addPath (PdfCleanUpRegionFilter.java:418) bei com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.filterFillPath (PdfCleanUpRegionFilter.java:173) bei com.itextpdf.text.pdf .pdfcleanup.PdfC leanUpRenderListener.filterCurrentPath (PdfCleanUpRenderListener.java:368) bei com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderPath (PdfCleanUpRenderListener.java:207) bei com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.paintPath (PdfContentStreamProcessor. java: 377)

Gebrauchte itextpdf-5.5.9 und itext-xtra-5.5.9

Beispielcode:

 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(); 
+0

Bitte teilen Sie Ihren zentralen Code und die PDF-Datei zur Analyse. – mkl

+0

@mkl, PDF finden Sie hier: https://drive.google.com/open?id=0B1tCWBHptWpuLXc5R2NkQ2U1NWM –

Antwort

0

Dieses Problem auf die Tatsache bezieht, dass wir itext verwendeten langen Datentyp als interne Darstellung für Koordinaten in PDF während bestimmter Ope Verpflegung. Diese Entscheidung wurde getroffen, um einen vorzeitigen Verlust zu vermeiden. Der Inhaltsdatenstrom des von Ihnen bereitgestellten Dokuments enthält den Befehl zum Zeichnen eines Rechtecks ​​mit Koordinaten (0,0,65535,65535). An einem bestimmten Punkt der cleaner.cleanUp(); Operation müssen wir die im PDF-Inhaltsstrom angegebenen Koordinaten verwenden, ohne Transformationsmatrizen anzuwenden. Um es in long zu konvertieren, wird jede Koordinate mit einer öffentlichen Konstante PdfCleanUpProcessor.floatMultiplier multipliziert, die derzeit gleich 10^14 ist. Dann wird 65535 * 10^14 mit der größten langen Zahl (nämlich 4611686018427387903) verglichen und gilt als außerhalb des Bereichs, da 65535 * 10^14 größer ist. Wir können PdfCleanUpProcessor.floatMultiplier zu 0,5 * 10^14 oder 10^13 ändern. Dies sollte in anderen Situationen nützlich sein, da 65535 eine enorme Zahl für ein PDF ist und nicht häufig angetroffen wird. Es ist extrem unwahrscheinlich, noch größere Zahlen zu finden.

Verwandte Themen