private void counttomark() { // check behaviour in case of missing mark long res = 0; for (int i = operandStack.size() - 1; i >= 0; --i) { if (operandStack.get(i) == PSStackMark.getInstance() || i == 0) { operandStack.push(COSInteger.construct(res)); return; } res++; } }
public static COSObject construct(final long initValue) { return new COSObject(new COSInteger(initValue)); }
public Double getReal() { return (double) get(); }
public boolean setReal(final double value) { set((long) value); return true; }
public void visitFromInteger(COSInteger obj) { try { this.write(obj.toString()); } catch (IOException e) { e.printStackTrace(); } }
public Long getInteger() { return get(); }
public boolean setInteger(final long value) { set(value); return true; }
private static List<CosNumber> getNumbersFromArray(COSObject array) { if (array.size().intValue() > 0) { List<CosNumber> color = new ArrayList<>(); for (COSObject colorValue : (COSArray) array.getDirectBase()) { if (colorValue.getType().isNumber()) { color.add(GFCosNumber.fromPDFParserNumber(colorValue.get())); } } return Collections.unmodifiableList(color); } else { // Array size is 0 but it is present List<CosNumber> res = new ArrayList<>(1); res.add(GFCosNumber.fromPDFParserNumber(COSInteger.construct(0).getDirectBase())); return res; } }
/** * This method calculates object ID for all objects, described in this xref * stream using Index array. */ private void initializeObjIDs() { objIDs = new ArrayList<>(); for (int i = 0; i < index.size() / 2; ++i) { COSInteger firstID = (COSInteger) index.at(2 * i).getDirectBase(); COSInteger lengthOfSubsection = (COSInteger) index.at(2 * i + 1).getDirectBase(); for (int j = 0; j < lengthOfSubsection.get(); ++j) { objIDs.add(firstID.get() + j); } } }
public void setInteger(final long value) { if (this.base == null || !this.base.setInteger(value)) { this.base = new COSInteger(value); } }
private void executeOperatorOnOneTopNumber(String operator) throws PostScriptException { try { COSObject argument = getTopNumber(); COSObject res; switch (operator) { case "abs": res = COSReal.construct(Math.abs(argument.getReal())); break; case "neg": res = COSReal.construct(-argument.getReal()); break; case "ceiling": res = COSInteger.construct((long) Math.ceil(argument.getReal())); break; case "floor": res = COSInteger.construct((long) Math.floor(argument.getReal())); break; case "round": res = COSInteger.construct(Math.round(argument.getReal())); break; default: throw new PostScriptException("Unknown operator " + operator); } operandStack.push(res); } catch (PostScriptException e) { throw new PostScriptException("Can't execute " + operator + " operator", e); } }
private void calculateInternalOffsets() throws IOException { int n = (int) ((COSInteger) this.objectStream.getKey(ASAtom.N).getDirectBase()).get(); long first = ((COSInteger) this.objectStream.getKey(ASAtom.FIRST).getDirectBase()).get(); for (int i = 0; i < n; ++i) { Long objNum, objOffset; skipSpaces(false); readNumber(); objNum = getToken().integer; skipSpaces(false); readNumber(); objOffset = getToken().integer; internalOffsets.put(objNum.intValue(), objOffset + first); } }
private void length() throws PostScriptException { COSObject topObject = popTopObject(); if (topObject.getType().isDictionaryBased() || topObject.getType() == COSObjType.COS_ARRAY) { operandStack.push(COSInteger.construct(topObject.size())); return; } throw new PostScriptException("Can't execute length operator"); }
/** * This method puts all necessary information into trailer of this xref * section. */ private void setTrailer() { COSTrailer trailer = section.getTrailer(); if (xrefCOSStream.getKey(ASAtom.SIZE).get() != null) { trailer.setSize(((COSInteger) xrefCOSStream.getKey(ASAtom.SIZE).get()).get()); } if (xrefCOSStream.getKey(ASAtom.PREV).get() != null) { trailer.setPrev(((COSInteger) xrefCOSStream.getKey(ASAtom.PREV).get()).get()); } if (xrefCOSStream.getKey(ASAtom.ROOT).get() != null) { trailer.setRoot(xrefCOSStream.getKey(ASAtom.ROOT)); } if (xrefCOSStream.getKey(ASAtom.ENCRYPT).get() != null) { trailer.setEncrypt(xrefCOSStream.getKey(ASAtom.ENCRYPT)); } if (xrefCOSStream.getKey(ASAtom.INFO).get() != null) { trailer.setInfo(xrefCOSStream.getKey(ASAtom.INFO)); } if (xrefCOSStream.getKey(ASAtom.ID).get() != null) { trailer.setID(xrefCOSStream.getKey(ASAtom.ID)); } }
/** * This method makes sure that Index array is correctly initialized. * * @throws IOException */ private void initializeIndex() throws IOException { index = (COSArray) xrefCOSStream.getKey(ASAtom.INDEX).getDirectBase(); if (index == null) { COSObject[] defaultIndex = new COSObject[2]; defaultIndex[0] = COSInteger.construct(0); defaultIndex[1] = xrefCOSStream.getKey(ASAtom.SIZE); index = (COSArray) COSArray.construct(2, defaultIndex).getDirectBase(); } else if (index.size() % 2 != 0) { throw new IOException("Index array in xref stream has odd amount of elements."); } }
this.integers.add(Long.valueOf(token.integer)); if (this.integers.size() == 3) { COSObject result = COSInteger.construct(this.integers.peek().longValue()); this.integers.remove(); return result; COSObject result = COSInteger.construct(this.integers.peek().longValue()); this.integers.remove(); while (!this.integers.isEmpty()) { this.objects.add(COSInteger.construct(this.integers.peek().longValue())); this.integers.remove();
private void opFor() throws PostScriptException { try { if (operandStack.empty()) { throw new PostScriptException("Problem with stack"); } COSObject proc = operandStack.pop(); if (!(proc instanceof PSProcedure)) { throw new PostScriptException("Object is not a procedure"); } COSObject limit = getTopNumber(); COSObject increment = getTopNumber(); COSObject initial = getTopNumber(); for (long i = initial.getInteger(); i <= limit.getInteger(); i += increment.getInteger()) { operandStack.push(COSInteger.construct(i)); ((PSProcedure) proc).executeProcedure(operandStack, userDict); } } catch (PostScriptException e) { throw new PostScriptException("Can't execute for operator", e); } }
this.integers.add(Long.valueOf(token.integer)); if (this.integers.size() == 3) { COSObject result = COSInteger.construct(this.integers.peek().longValue()); this.integers.remove(); return result; COSObject result = COSInteger.construct(this.integers.peek().longValue()); this.integers.remove(); while (!this.integers.isEmpty()) { this.objects.add(COSInteger.construct(this.integers.peek().longValue())); this.integers.remove();
break; case "count": COSObject stackSize = COSInteger.construct(this.operandStack.size()); this.operandStack.push(stackSize); break;