private bool ReplaceNamedDestination(PdfObject obj, Hashtable names) {
obj = GetPdfObject(obj);
int objIdx = lastXrefPartial;
ReleaseLastXrefPartial();
if (obj != null && obj.IsDictionary()) {
PdfObject ob2 = GetPdfObjectRelease(((PdfDictionary)obj).Get(PdfName.DEST));
Object name = null;
if (ob2 != null) {
if (ob2.IsName())
name = ob2;
else if (ob2.IsString())
name = ob2.ToString();
if (name != null) {
PdfArray dest = (PdfArray)names[name];
if (dest != null) {
((PdfDictionary)obj).Put(PdfName.DEST, dest);
SetXrefPartialObject(objIdx, obj);
return true;
}
}
}
else if ((ob2 = GetPdfObject(((PdfDictionary)obj).Get(PdfName.A))) != null) {
int obj2Idx = lastXrefPartial;
ReleaseLastXrefPartial();
PdfDictionary dic = (PdfDictionary)ob2;
PdfName type = (PdfName)GetPdfObjectRelease(dic.Get(PdfName.S));
if (PdfName.GOTO.Equals(type)) {
PdfObject ob3 = GetPdfObjectRelease(dic.Get(PdfName.D));
if (ob3 != null) {
if (ob3.IsName())
name = ob3;
else if (ob3.IsString())
name = ob3.ToString();
}
if (name != null) {
PdfArray dest = (PdfArray)names[name];
if (dest != null) {
dic.Put(PdfName.D, dest);
SetXrefPartialObject(obj2Idx, ob2);
SetXrefPartialObject(objIdx, obj);
return true;
}
}
}
}
}
return false;
}