Refine search
/** * 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); }
/** * Split PDF string into array of single character PDF strings. * @param string PDF string to be splitted. * @return splitted PDF string. */ private PdfString[] splitString(PdfString string) { List<PdfString> strings = new ArrayList<PdfString>(); String stringValue = string.toString(); for (int i = 0; i < stringValue.length(); i++) { PdfString newString = new PdfString(stringValue.substring(i, i + 1), string.getEncoding()); String text = decode(newString); if (text.length() == 0 && i < stringValue.length() - 1) { newString = new PdfString(stringValue.substring(i, i + 2), string.getEncoding()); i++; } strings.add(newString); } return strings.toArray(new PdfString[strings.size()]); }
private String decodeString(PdfString ps) { if (ps.isHexWriting()) return PdfEncodings.convertToString(ps.getBytes(), "UnicodeBigUnmarked"); else return ps.toUnicodeString(); }
/** * Sets the file name (the key /F) string as an hex representation * to support multi byte file names. The name must have the slash and * backslash escaped according to the file specification rules * @param fileName the file name as a byte array */ public void setMultiByteFileName(byte fileName[]) { put(PdfName.F, new PdfString(fileName).setHexWriting(true)); }
/** * Used by the creating application to store application-specific * data associated with this optional content group. * @param creator a text string specifying the application that created the group * @param subtype a string defining the type of content controlled by the group. Suggested * values include but are not limited to <B>Artwork</B>, for graphic-design or publishing * applications, and <B>Technical</B>, for technical designs such as building plans or * schematics */ public void setCreatorInfo(String creator, String subtype) { PdfDictionary usage = getUsage(); PdfDictionary dic = new PdfDictionary(); dic.put(PdfName.CREATOR, new PdfString(creator, PdfObject.TEXT_UNICODE)); dic.put(PdfName.SUBTYPE, new PdfName(subtype)); usage.put(PdfName.CREATORINFO, dic); }
byte[] encryptionKey = null; encrypted = true; PdfDictionary enc = (PdfDictionary)getPdfObject(encDic); PdfDictionary cfDict = enc.getAsDict(PdfName.CF); if(cfDict != null){ PdfDictionary stdCFDict = cfDict.getAsDict(PdfName.STDCF); if(authEvent.compareTo(PdfName.EFOPEN) == 0 && !this.ownerPasswordUsed) return; int lengthValue = 0; PdfObject filter = getPdfObjectRelease(enc.get(PdfName.FILTER)); if (!o.isNumber()) throw new InvalidPdfException(MessageLocalization.getComposedMessage("illegal.p.value")); pValue = ((PdfNumber)o).longValue(); throw new InvalidPdfException(MessageLocalization.getComposedMessage("illegal.r.value")); rValue = ((PdfNumber)o).intValue(); if (!equalsArray(uValue, decrypt.userKey, rValue == 3 || rValue == 4 ? 16 : 32)) { str.decrypt(this);
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; }
return null; try { PdfName sub = v.getAsName(PdfName.SUBFILTER); PdfString contents = v.getAsString(PdfName.CONTENTS); PdfPKCS7 pk = null; if (sub.equals(PdfName.ADBE_X509_RSA_SHA1)) { PdfString cert = v.getAsString(PdfName.CERT); if (cert == null) cert = v.getAsArray(PdfName.CERT).getAsString(0); if(!reader.isEncrypted()) { pk = new PdfPKCS7(contents.getOriginalBytes(), cert.getBytes(), provider); }else{ pk = new PdfPKCS7(contents.getBytes(), cert.getBytes(), provider); if(!reader.isEncrypted()){ pk = new PdfPKCS7(contents.getOriginalBytes(), sub, provider); }else{ pk = new PdfPKCS7(contents.getBytes(),sub,provider); pk.setSignDate(PdfDate.decode(str.toString())); PdfObject obj = PdfReader.getPdfObject(v.get(PdfName.NAME)); if (obj != null) { if (obj.isString()) pk.setSignName(((PdfString)obj).toUnicodeString()); else if(obj.isName()) pk.setSignName(PdfName.decodeName(obj.toString())); pk.setReason(str.toUnicodeString());
return false; PdfDictionary merged = item.getMerged( 0 ); PdfName type = merged.getAsName(PdfName.FT); if (!PdfName.CH.equals(type)) { return false; PdfArray array = new PdfArray(); for (String element : value) { for (int j = 0; j < options.length; j++) { if (options[j].equals(element)) { array.add(new PdfNumber(j)); break; PdfArray vals = new PdfArray(); for (int i = 0; i < value.length; ++i) { vals.add( new PdfString( value[i] ) ); PdfDictionary apDic = new PdfDictionary(); apDic.put( PdfName.N, app.getIndirectReference() ); item.writeToAll(PdfName.AP, apDic, Item.WRITE_MERGED | Item.WRITE_WIDGET);
/** * One of more users for whom this optional content group is primarily intended. * @param type should be "Ind" (Individual), "Ttl" (Title), or "Org" (Organization). * @param names one or more names * @since 5.0.2 */ public void setUser(String type, String... names) { PdfDictionary usage = getUsage(); PdfDictionary dic = new PdfDictionary(); dic.put(PdfName.TYPE, new PdfName(type)); PdfArray arr = new PdfArray(); for (String s : names) arr.add(new PdfString(s, PdfObject.TEXT_UNICODE)); usage.put(PdfName.NAME, arr); usage.put(PdfName.USER, dic); }
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(); try { idx = Integer.parseInt(value); PdfString ps = opts.getAsString(idx); value = ps.toUnicodeString(); lastWasString = true; return ((PdfString)v).toUnicodeString(); } else if (v instanceof PdfName) { return PdfName.decodeName(v.toString()); } else return "";
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 ); }
protected void updateNamedDestinations() throws IOException { PdfDictionary dic = reader.getCatalog().getAsDict(PdfName.NAMES); if (dic != null) dic = dic.getAsDict(PdfName.DESTS); if (dic == null) { dic = reader.getCatalog().getAsDict(PdfName.DESTS); } if (dic == null) { dic = new PdfDictionary(); PdfDictionary dests = new PdfDictionary(); dic.put(PdfName.NAMES, new PdfArray()); dests.put(PdfName.DESTS, dic); reader.getCatalog().put(PdfName.NAMES, dests); } PdfArray names = getLastChildInNameTree(dic); for (Object name : namedDestinations.keySet()) { names.add(new PdfString(name.toString())); names.add(addToBody(namedDestinations.get(name), getPdfIndirectReference()).getIndirectReference()); } }
PdfObject toUni = PdfReader.getPdfObjectRelease(fontDic.get(PdfName.TOUNICODE)); if (toUni instanceof PRStream){ try { byte[] touni = PdfReader.getStreamBytes((PRStream)toUni); CidLocationFromByte lb = new CidLocationFromByte(touni); toUnicodeCmap = new CMapToUnicode(); PdfName encodingName = fontDic.getAsName(PdfName.ENCODING); if (encodingName == null) return; String enc = PdfName.decodeName(encodingName.toString()); if (!enc.equals("Identity-H")) return; PdfArray df = (PdfArray)PdfReader.getPdfObjectRelease(fontDic.get(PdfName.DESCENDANTFONTS)); PdfDictionary cidft = (PdfDictionary)PdfReader.getPdfObjectRelease(df.getPdfObject(0)); PdfDictionary cidinfo = cidft.getAsDict(PdfName.CIDSYSTEMINFO); if (cidinfo == null) if (ordering == null) return; CMapToUnicode touni = IdentityToUnicode.GetMapFromOrdering(ordering.toUnicodeString()); if (touni == null) return;
private PdfName getSignatureHashKey(String signatureName) throws NoSuchAlgorithmException, IOException { PdfDictionary dic = acroFields.getSignatureDictionary(signatureName); PdfString contents = dic.getAsString(PdfName.CONTENTS); byte[] bc = null; if(!reader.isEncrypted()) { bc = contents.getOriginalBytes(); }else{ bc = contents.getBytes(); } byte[] bt = null; if (PdfName.ETSI_RFC3161.equals(PdfReader.getPdfObject(dic.get(PdfName.SUBFILTER)))) { ASN1InputStream din = new ASN1InputStream(new ByteArrayInputStream(bc)); ASN1Primitive pkcs = din.readObject(); bc = pkcs.getEncoded(); } bt = hashBytesSha1(bc); return new PdfName(Utilities.convertToHex(bt)); }
private void completeExtraCatalog(PdfDictionary extraCatalog) { if (isPdfX()) { if (extraCatalog.get(PdfName.OUTPUTINTENTS) == null) { PdfDictionary out = new PdfDictionary(PdfName.OUTPUTINTENT); out.put(PdfName.OUTPUTCONDITION, new PdfString("SWOP CGATS TR 001-1995")); out.put(PdfName.OUTPUTCONDITIONIDENTIFIER, new PdfString("CGATS TR 001")); out.put(PdfName.REGISTRYNAME, new PdfString("http://www.color.org")); out.put(PdfName.INFO, new PdfString("")); out.put(PdfName.S, PdfName.GTS_PDFX); extraCatalog.put(PdfName.OUTPUTINTENTS, new PdfArray(out)); } } }
protected static PdfArray processOptions(String options[][]) { PdfArray array = new PdfArray(); for (int k = 0; k < options.length; ++k) { String subOption[] = options[k]; PdfArray ar2 = new PdfArray(new PdfString(subOption[0], PdfObject.TEXT_UNICODE)); ar2.add(new PdfString(subOption[1], PdfObject.TEXT_UNICODE)); array.add(ar2); } return array; }
/** * Checks if the Acroform is valid * @return true if the Acroform is valid */ public boolean isValid() { if (documentFields.size() == 0) return false; put(PdfName.FIELDS, documentFields); if (sigFlags != 0) put(PdfName.SIGFLAGS, new PdfNumber(sigFlags)); if (calculationOrder.size() > 0) put(PdfName.CO, calculationOrder); if (fieldTemplates.isEmpty()) return true; PdfDictionary dic = new PdfDictionary(); for (PdfTemplate template: fieldTemplates) { PdfFormField.mergeResources(dic, (PdfDictionary)template.getResources()); } put(PdfName.DR, dic); put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g ")); PdfDictionary fonts = (PdfDictionary)dic.get(PdfName.FONT); if (fonts != null) { writer.eliminateFontSubset(fonts); } return true; }
void addRange(PdfString from, PdfString to, PdfObject code) { byte[] a1 = decodeStringToByte(from); byte[] a2 = decodeStringToByte(to); if (a1.length != a2.length || a1.length == 0) throw new IllegalArgumentException("Invalid map."); byte[] sout = null; if (code instanceof PdfString) sout = decodeStringToByte((PdfString)code); int start = byteArrayToInt(a1); int end = byteArrayToInt(a2); for (int k = start; k <= end; ++k) { intToByteArray(k, a1); PdfString s = new PdfString(a1); s.setHexWriting(true); if (code instanceof PdfArray) { addChar(s, ((PdfArray)code).getPdfObject(k - start)); } else if (code instanceof PdfNumber) { int nn = ((PdfNumber)code).intValue() + k - start; addChar(s, new PdfNumber(nn)); } else if (code instanceof PdfString) { PdfString s1 = new PdfString(sout); s1.setHexWriting(true); ++sout[sout.length - 1]; addChar(s, s1); } } }
if (field == null) return null; PdfObject v = getPdfObject(field.get(PdfName.V)); if (v == null) return null; if (v.isName()) return PdfName.decodeName(((PdfName)v).toString()); else if (v.isString()) { PdfString vs = (PdfString)v; if (encoding == null || vs.getEncoding() != null) return vs.toUnicodeString(); byte b[] = vs.getBytes(); if (b.length >= 2 && b[0] == (byte)254 && b[1] == (byte)255) return vs.toUnicodeString(); try { if (encoding.equals(PdfName.SHIFT_JIS)) return new String(b, "SJIS"); else if (encoding.equals(PdfName.UHC)) return vs.toUnicodeString();