Hi Jeremias, I’d have a couple of comments regarding your changes. I’ve only had a quick look and don’t understand this part of the code well, but following the principle of pair review, here they are:
- at several places there is code like the following: private void checkInTextObject() { if (!inTextObject) { throw new IllegalStateException("Not in text object"); } } I understand and don’t criticise the need for safety checks, especially if the code is new or complex. Only, since we now have Java 1.4 as a minimal requirement, why not use assert statements? They were created exactly for that. - in PDFTextUtil: - the setTextRenderingMode(int) method is only used within PDFTextUtil; why then not making it private? The other setTextRenderingMode method will still be available and seems to be much safer to use anyway. - it seems to me that a bit more of the internal state of a PDFTextUtil object could be controlled by the object itself, especially in the following piece of code (PDFTextPainter, l.220): Font f = textUtil.selectFontForChar(ch); if (f != textUtil.getCurrentFont()) { textUtil.writeTJ(); textUtil.setCurrentFont(f); textUtil.writeTf(f); textUtil.writeTextMatrix(localTransform); } A signalFontUsed(f) method might make sense. Basically doing the same test as above, but inside PDFTextUtil. The code would be better encapsulated, so more maintainable. WDYT? - in PDFTextPainter: now that the code is working, you probably want to remove the DEBUG variable and all the statements displaying stuff to System.out; or replace them with proper log.debug statements ;-) For the rest I believe when you say it’s working... Congrats! Vincent