public void setMKIconFit(PdfName scale, PdfName scalingType, float leftoverLeft, float leftoverBottom, boolean fitInBounds) { PdfDictionary dic = new PdfDictionary(); if (!scale.equals(PdfName.A)) dic.put(PdfName.SW, scale); if (!scalingType.equals(PdfName.P)) dic.put(PdfName.S, scalingType); if (leftoverLeft != 0.5f || leftoverBottom != 0.5f) { PdfArray array = new PdfArray(new PdfNumber(leftoverLeft)); array.add(new PdfNumber(leftoverBottom)); dic.put(PdfName.A, array); } if (fitInBounds) dic.put(PdfName.FB, PdfBoolean.PDFTRUE); getMK().put(PdfName.IF, dic); }
static Integer getFlags(PdfDictionary field) { PdfName type = field.getAsName(PdfName.FT); if (!PdfName.BTN.equals(type)) return null; PdfNumber flags = field.getAsNumber(PdfName.FF); if (flags == null) return null; return flags.intValue(); }
/** * * @return this PdfArray's values as a double[] * @since 5.5.6 */ public double[] asDoubleArray() { double[] rslt = new double[size()]; for (int k = 0; k < rslt.length; ++k) { rslt[k] = getAsNumber(k).doubleValue(); } return rslt; } }
/** * Returns the PDF representation of this <CODE>PdfArray</CODE>. */ public void toPdf(PdfWriter writer, OutputStream os) throws IOException { os.write('['); if (dash >= 0) { new PdfNumber(dash).toPdf(writer, os); if (gap >= 0) { os.write(' '); new PdfNumber(gap).toPdf(writer, os); } } os.write(']'); if (phase >=0) { os.write(' '); new PdfNumber(phase).toPdf(writer, os); } } }
public void transformDestination(float a, float b, float c, float d, float e, float f) { if (!isInternal()) throw new IllegalArgumentException(MessageLocalization.getComposedMessage("cannot.change.destination.of.external.link")); if (destination.getAsName(1).equals(PdfName.XYZ)) { float x = destination.getAsNumber(2).floatValue(); float y = destination.getAsNumber(3).floatValue(); float xx = x * a + y * c + e; float yy = x * b + y * d + f; destination.set(2, new PdfNumber(xx)); destination.set(3, new PdfNumber(yy)); } }
/** * Adds keys to the signature dictionary that define * the field permissions. * This method is only used for signatures that lock fields. * @param crypto the signature dictionary */ private void addFieldMDP(PdfDictionary crypto, PdfDictionary fieldLock) { PdfDictionary reference = new PdfDictionary(); PdfDictionary transformParams = new PdfDictionary(); transformParams.putAll(fieldLock); transformParams.put(PdfName.TYPE, PdfName.TRANSFORMPARAMS); transformParams.put(PdfName.V, new PdfName("1.2")); reference.put(PdfName.TRANSFORMMETHOD, PdfName.FIELDMDP); reference.put(PdfName.TYPE, PdfName.SIGREF); reference.put(PdfName.TRANSFORMPARAMS, transformParams); reference.put(new PdfName("DigestValue"), new PdfString("aa")); PdfArray loc = new PdfArray(); loc.add(new PdfNumber(0)); loc.add(new PdfNumber(0)); reference.put(new PdfName("DigestLocation"), loc); reference.put(new PdfName("DigestMethod"), new PdfName("MD5")); reference.put(PdfName.DATA, writer.reader.getTrailer().get(PdfName.ROOT)); PdfArray types = crypto.getAsArray(PdfName.REFERENCE); if (types == null) types = new PdfArray(); types.add(reference); crypto.put(PdfName.REFERENCE, types); }
int lengthValue = 0; PdfObject filter = getPdfObjectRelease(enc.get(PdfName.FILTER)); s = enc.get(PdfName.U).toString(); pValue = ((PdfNumber)o).longValue(); throw new InvalidPdfException(MessageLocalization.getComposedMessage("illegal.r.value")); rValue = ((PdfNumber)o).intValue(); lengthValue = ( (PdfNumber) o).intValue(); if (lengthValue > 128 || lengthValue < 40 || lengthValue % 8 != 0) throw new InvalidPdfException(MessageLocalization.getComposedMessage("illegal.length.value")); int vValue = ((PdfNumber)o).intValue(); switch(vValue) { case 1: lengthValue = ( (PdfNumber) o).intValue(); if (lengthValue > 128 || lengthValue < 40 || lengthValue % 8 != 0) throw new InvalidPdfException(MessageLocalization.getComposedMessage("illegal.length.value")); if (!equalsArray(uValue, decrypt.userKey, rValue == 3 || rValue == 4 ? 16 : 32)) { str.decrypt(this);
stm.setLength(((PdfNumber)stm.get(PdfName.LENGTH)).intValue()); int size = ((PdfNumber)stm.get(PdfName.SIZE)).intValue(); PdfArray index; PdfObject obj = stm.get(PdfName.INDEX); if (obj == null) { index = new PdfArray(); index.add(new int[]{0, size}); obj = stm.get(PdfName.PREV); if (obj != null) prev = ((PdfNumber)obj).longValue(); ensureXrefSize(size * 2); if (objStmMark == null && !partial) objStmMark = new HashMap<Integer, IntHashtable>(); if (objStmToOffset == null && partial) objStmToOffset = new LongHashtable(); byte b[] = getStreamBytes(stm, tokens.getFile()); int bptr = 0; int wc[] = new int[3]; for (int k = 0; k < 3; ++k) wc[k] = w.getAsNumber(k).intValue(); for (int idx = 0; idx < index.size(); idx += 2) { int start = index.getAsNumber(idx).intValue(); int length = index.getAsNumber(idx + 1).intValue();
private Image indexedModel(byte bdata[], int bpc, int paletteEntries) throws BadElementException { Image img = new ImgRaw(width, height, 1, bpc, bdata); PdfArray colorspace = new PdfArray(); colorspace.add(PdfName.INDEXED); colorspace.add(PdfName.DEVICERGB); byte np[] = getPalette(paletteEntries); int len = np.length; colorspace.add(new PdfNumber(len / 3 - 1)); colorspace.add(new PdfString(np)); PdfDictionary ad = new PdfDictionary(); ad.put(PdfName.COLORSPACE, colorspace); img.setAdditional(ad); return img; }
PdfObject v = PdfReader.getPdfObject(mergedDict.get(PdfName.V)); if (v == null) return ""; byte[] valBytes; try { valBytes = PdfReader.getStreamBytes((PRStream)v); return new String(valBytes); } catch (IOException e) { PdfName type = mergedDict.getAsName(PdfName.FT); if (PdfName.BTN.equals(type)) { PdfNumber ff = mergedDict.getAsNumber(PdfName.FF); int flags = 0; if (ff != null) flags = ff.intValue(); if ((flags & PdfFormField.FF_PUSHBUTTON) != 0) return ""; String value = ""; if (v instanceof PdfName) value = PdfName.decodeName(v.toString()); else if (v instanceof PdfString) value = ((PdfString)v).toUnicodeString();
protected PRIndirectReference getSinglePage(final int n) { PdfDictionary acc = new PdfDictionary(); PdfDictionary top = reader.rootPages; int base = 0; while (true) { for (int k = 0; k < pageInhCandidates.length; ++k) { PdfObject obj = top.get(pageInhCandidates[k]); if (obj != null) acc.put(pageInhCandidates[k], obj); PdfArray kids = (PdfArray)PdfReader.getPdfObjectRelease(top.get(PdfName.KIDS)); for (Iterator<PdfObject> it = kids.listIterator(); it.hasNext();) { PRIndirectReference ref = (PRIndirectReference)it.next(); PdfDictionary dic = (PdfDictionary)getPdfObject(ref); int last = reader.lastXrefPartial; PdfObject count = getPdfObjectRelease(dic.get(PdfName.COUNT)); reader.lastXrefPartial = last; int acn = 1; if (count != null && count.type() == PdfObject.NUMBER) acn = ((PdfNumber)count).intValue(); if (n < base + acn) { if (count == null) {
private void createWidgets(ArrayList<Object> list, AcroFields.Item item) { for (int k = 0; k < item.size(); ++k) { list.add(item.getPage(k)); PdfDictionary merged = item.getMerged(k); PdfObject dr = merged.get(PdfName.DR); if (dr != null) PdfFormField.mergeResources(resources, (PdfDictionary)PdfReader.getPdfObject(dr)); PdfDictionary widget = new PdfDictionary(); for (Object element : merged.getKeys()) { PdfName key = (PdfName)element; if (widgetKeys.contains(key)) widget.put(key, merged.get(key)); } widget.put(iTextTag, new PdfNumber(item.getTabOrder(k).intValue() + 1)); list.add(widget); } }
private void writeMultipleValues( PdfFormField field, String mix[][] ) { PdfArray indexes = new PdfArray(); PdfArray values = new PdfArray(); for (int i = 0; i < choiceSelections.size(); ++i) { int idx = (choiceSelections.get( i )).intValue(); indexes.add( new PdfNumber( idx ) ); if (mix != null) values.add( new PdfString( mix[idx][0] ) ); else if (choices != null) values.add( new PdfString( choices[ idx ] ) ); } field.put( PdfName.V, values ); field.put( PdfName.I, indexes ); }
if (value2 == null) return false; if (value1.type() != value2.type()) return false; if (value1.isBoolean()) { if (value1 == value2) return true; return true; if (value2 instanceof PdfNumber) { return ((PdfNumber) value1).doubleValue() == ((PdfNumber) value2).doubleValue(); PdfArray array1 = (PdfArray) value1; PdfArray array2 = (PdfArray) value2; if (array1.size() != array2.size()) return false; for (int i = 0; i < array1.size(); ++i) if (!compareObjects(array1.getPdfObject(i), array2.getPdfObject(i))) return false; PdfDictionary first = (PdfDictionary) value1; PdfDictionary second = (PdfDictionary) value2; if (first.size() != second.size()) return false; for (PdfName name : first.hashMap.keySet()) { if (!compareObjects(first.get(name), second.get(name))) return false;
if (obj1 instanceof PdfNumber) { PdfNumber number = (PdfNumber) obj1; if (Math.abs(number.doubleValue()) > maxRealValue && number.toString().contains(".")) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("real.number.is.out.of.range")); if (string.getBytes().length > maxStringLength) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("pdf.string.is.too.long")); if (array.size() > maxArrayLength) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("pdf.array.exceeds.length.set.by.PDFA1.standard", Integer.toString(array.size()))); if (dictionary.size() > maxDictionaryLength) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("pdf.dictionary.is.out.of.bounds")); PdfName type = dictionary.getAsName(PdfName.TYPE); if (PdfName.CATALOG.equals(type)) { if (!dictionary.contains(PdfName.METADATA)) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("the.document.catalog.dictionary.shall.contain.metadata")); } else if (PdfName.PAGE.equals(type)) { if (dictionary.contains(PdfName.AA)) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("page.dictionary.shall.not.include.aa.entry"));
private void processType0(PdfDictionary font) { try { PdfObject toUniObject = PdfReader.getPdfObjectRelease(font.get(PdfName.TOUNICODE)); PdfArray df = (PdfArray)PdfReader.getPdfObjectRelease(font.get(PdfName.DESCENDANTFONTS)); PdfDictionary cidft = (PdfDictionary)PdfReader.getPdfObjectRelease(df.getPdfObject(0)); PdfNumber dwo = (PdfNumber)PdfReader.getPdfObjectRelease(cidft.get(PdfName.DW)); int dw = 1000; if (dwo != null) dw = dwo.intValue(); IntHashtable widths = readWidths((PdfArray)PdfReader.getPdfObjectRelease(cidft.get(PdfName.W))); PdfDictionary fontDesc = (PdfDictionary)PdfReader.getPdfObjectRelease(cidft.get(PdfName.FONTDESCRIPTOR)); fillFontDesc(fontDesc); if (toUniObject instanceof PRStream){ fillMetrics(PdfReader.getStreamBytes((PRStream)toUniObject), widths, dw); } else if (new PdfName("Identity-H").equals(toUniObject)) { fillMetricsIdentity(widths, dw); } } catch (Exception e) { throw new ExceptionConverter(e); } }
private void fillDiffMap(PdfDictionary encDic, CMapToUnicode toUnicode) { PdfArray diffs = encDic.getAsArray(PdfName.DIFFERENCES); if (diffs != null) { diffmap = new IntHashtable(); int currentNumber = 0; for (int k = 0; k < diffs.size(); ++k) { PdfObject obj = diffs.getPdfObject(k); if (obj.isNumber()) currentNumber = ((PdfNumber)obj).intValue(); else { int c[] = GlyphList.nameToUnicode(PdfName.decodeName(((PdfName)obj).toString())); if (c != null && c.length > 0) { uni2byte.put(c[0], currentNumber);
public static PdfShading type1(PdfWriter writer, BaseColor colorSpace, float domain[], float tMatrix[], PdfFunction function) { PdfShading sp = new PdfShading(writer); sp.shading = new PdfDictionary(); sp.shadingType = 1; sp.shading.put(PdfName.SHADINGTYPE, new PdfNumber(sp.shadingType)); sp.setColorSpace(colorSpace); if (domain != null) sp.shading.put(PdfName.DOMAIN, new PdfArray(domain)); if (tMatrix != null) sp.shading.put(PdfName.MATRIX, new PdfArray(tMatrix)); sp.shading.put(PdfName.FUNCTION, function.getReference()); return sp; }
/** * Sets the display duration for the page (for presentations) * * @param seconds the number of seconds to display the page. A negative value removes the entry * @param page the page where the duration will be applied. The first page is 1 */ void setDuration(int seconds, int page) { PdfDictionary pg = reader.getPageN(page); if (seconds < 0) pg.remove(PdfName.DUR); else pg.put(PdfName.DUR, new PdfNumber(seconds)); markUsed(pg); }