using (Doc doc = new Doc()) {
doc.Read(Server.MapPath("spaceshuttle.pdf"));
doc.RemapPages(new int[] { 1, 1 });
doc.PageNumber = 2;
Page page = doc.ObjectSoup[doc.Page] as Page;
StreamObject[] layers = page.GetLayers();
MemoryStream st = new MemoryStream();
foreach (StreamObject layer in layers) {
if (!layer.Decompress())
throw new Exception("Unable to decompress stream.");
byte[] data = layer.GetData();
st.Write(data, 0, data.Length);
layer.CompressFlate();
}
ArrayAtom array = ArrayAtom.FromContentStream(st.ToArray());
if (true) {
var items = OpAtom.Find(array, new string[] { "k" });
foreach (var pair in items) { // make red
Atom[] args = OpAtom.GetParameters(array, pair.Item2);
if (args != null) {
((NumAtom)args[0]).Real = 0;
((NumAtom)args[1]).Real = 1;
((NumAtom)args[2]).Real = 1;
((NumAtom)args[3]).Real = 0;
}
}
}
if (true) {
var items = OpAtom.Find(array, new string[] { "rg" });
foreach (var pair in items) { // make green
Atom[] args = OpAtom.GetParameters(array, pair.Item2);
if (args != null) {
((NumAtom)args[0]).Real = 0;
((NumAtom)args[1]).Real = 1;
((NumAtom)args[2]).Real = 0;
}
}
}
byte[] arrayData = array.GetData();
StreamObject so = new StreamObject(doc.ObjectSoup);
so.SetData(arrayData, 1, arrayData.Length - 2);
doc.SetInfo(page.ID, "/Contents:Del", "");
page.AddLayer(so);
doc.Save(Server.MapPath("ReplaceColors.pdf"));
}
Using doc As New Doc()
doc.Read(Server.MapPath("spaceshuttle.pdf"))
doc.RemapPages(New Integer() {1, 1})
doc.PageNumber = 2
Dim page As Page = TryCast(doc.ObjectSoup(doc.Page), Page)
Dim layers As StreamObject() = page.GetLayers()
Dim st As New MemoryStream()
For Each layer As StreamObject In layers
If Not layer.Decompress() Then
Throw New Exception("Unable to decompress stream.")
End If
Dim data As Byte() = layer.GetData()
st.Write(data, 0, data.Length)
layer.CompressFlate()
Next
Dim array As ArrayAtom = ArrayAtom.FromContentStream(st.ToArray())
If True Then
Dim items = OpAtom.Find(array, New String() {"k"})
For Each pair As var In items
' make red
Dim args As Atom() = OpAtom.GetParameters(array, pair.Item2)
If args <> Nothing Then
DirectCast(args(0), NumAtom).Real = 0
DirectCast(args(1), NumAtom).Real = 1
DirectCast(args(2), NumAtom).Real = 1
DirectCast(args(3), NumAtom).Real = 0
End If
Next
End If
If True Then
Dim items = OpAtom.Find(array, New String() {"rg"})
For Each pair As var In items
' make green
Dim args As Atom() = OpAtom.GetParameters(array, pair.Item2)
If args <> Nothing Then
DirectCast(args(0), NumAtom).Real = 0
DirectCast(args(1), NumAtom).Real = 1
DirectCast(args(2), NumAtom).Real = 0
End If
Next
End If
Dim arrayData As Byte() = array.GetData()
Dim so As New StreamObject(doc.ObjectSoup)
so.SetData(arrayData, 1, arrayData.Length - 2)
doc.SetInfo(page.ID, "/Contents:Del", "")
page.AddLayer(so)
doc.Save(Server.MapPath("ReplaceColors.pdf"))
End Using