Q: I am having problems removing a header which i have created. The
XObject form is getting removed, but the text elements are staying.
Here are the functions that I am using to create and clear the
headers.
private void ClearHeader()
{
try
{
int totalPages = _pdfDoc.GetPageCount();
Element element;
for (int pageIndex = 1; pageIndex <= totalPages; +
+pageIndex)
{
Page page = _pdfDoc.GetPage(1);
_elementReader.Begin(page);
Page newPage = _pdfDoc.PageCreate();
_pdfDoc.PagePushBack(newPage);
_elementWriter.Begin(newPage);
while ((element = _elementReader.Next()) != null)
{
if (element.GetType() == Element.Type.e_form)
{
Obj form = element.GetXObject();
if ((form.FindObj("LeftHeaderText" +
pageIndex.ToString()) != null) ||
(form.FindObj("CenterHeaderText" +
pageIndex.ToString()) != null) ||
(form.FindObj("RightHeaderText" +
pageIndex.ToString()) != null))
{
_elementReader.FormBegin();
while ((element = _elementReader.Next
()) != null)
{
continue;
}
_elementReader.End();
continue;
}
else
{
_elementWriter.WriteElement(element);
}
}
else
{
_elementWriter.WriteElement(element);
}
}
_elementWriter.End();
_elementReader.End();
newPage.SetMediaBox(page.GetCropBox());
_pdfDoc.PageRemove(_pdfDoc.GetPageIterator(1));
}
}
catch { }
}
private bool CreateHeader()
{
bool functionReturnValue = true;
try
{
//Clear existing header.
ClearHeader();
PageIterator itr = _pdfDoc.GetPageIterator();
Element element = null;
string date = DateTime.Today.ToShortDateString();
string time = DateTime.Now.ToShortTimeString();
string totalPages = _pdfDoc.GetPageCount().ToString();
while (itr.HasNext())
{
Page page = itr.Current();
string pageNumber = page.GetIndex().ToString();
double height = page.GetPageHeight();
double width = page.GetPageWidth();
Graphics g = Graphics.FromHwnd(this.Handle);
SizeF textSize;
double left = 0;
double top = 0;
string appendText = "";
string leftHeader = "";
string centerHeader = "";
string rightHeader = "";
GState gs = null;
Obj form = null;
_elementWriter.Begin(itr.Current());
if (!txtHeaderLeft.Text.Equals(""))
{
appendText = txtHeaderLeft.Text;
appendText = appendText.Replace("[Page]",
pageNumber);
appendText = appendText.Replace("[Pages]",
totalPages);
appendText = appendText.Replace("[Date]",
date);
appendText = appendText.Replace("[Time]",
time);
appendText = appendText.Replace("[File]", new
FileInfo(_fileName).Name);
appendText = appendText.Replace("[Path]", new
FileInfo(_fileName).Directory.FullName);
appendText = appendText.Replace("[Tab]",
"\t");
textSize = g.MeasureString(appendText,
_leftHeaderFont);
left = 20;
top = height - 20;
leftHeader = left.ToString("0#.###").Replace
(".", "__") + "___" + top.ToString("0#.###").Replace(".", "__");
element = _elementBuilder.CreateTextBegin
(pdftron.PDF.Font.CreateTrueTypeFont(_pdfDoc, _leftHeaderFont, true,
true), 12);
_elementWriter.WriteElement(element);
gs = element.GetGState();
element = _elementBuilder.CreateTextRun
(appendText);
element.SetTextMatrix(1, 0, 0, 1, left, top);
gs.SetFillColorSpace(ColorSpace.CreateDeviceRGB
());
gs.SetFillColor(new ColorPt(0, 0, 0));
_elementWriter.WriteElement(element);
_elementWriter.WriteElement
(_elementBuilder.CreateTextEnd());
}
form = _elementWriter.End();
form.PutName("Subtype", "Form");
form.PutRect("BBox", 0, 0, width, height);
form.PutBool("LeftHeaderText" + pageNumber, true);
//This is used to later find if the header is
left, center or right align
form.PutString("LeftHeaderLocation", leftHeader);
element = _elementBuilder.CreateForm(form);
_elementWriter.Begin(itr.Current());
_elementWriter.WriteElement(element);
_elementWriter.End();
_elementWriter.Begin(itr.Current());
if (!txtHeaderCenter.Text.Equals(""))
{
appendText = txtHeaderCenter.Text;
appendText = appendText.Replace("[Page]",
pageNumber);
appendText = appendText.Replace("[Pages]",
totalPages);
appendText = appendText.Replace("[Date]",
date);
appendText = appendText.Replace("[Time]",
time);
appendText = appendText.Replace("[File]", new
FileInfo(_fileName).Name);
appendText = appendText.Replace("[Path]", new
FileInfo(_fileName).Directory.FullName);
appendText = appendText.Replace("[Tab]",
"\t");
textSize = g.MeasureString(appendText,
_centerHeaderFont);
left = (width - textSize.Width) / 2;
top = height - 20;
centerHeader = left.ToString("0#.###").Replace
(".", "__") + "___" + top.ToString("0#.###").Replace(".", "__");
element = _elementBuilder.CreateTextBegin
(pdftron.PDF.Font.CreateTrueTypeFont(_pdfDoc, _centerHeaderFont, true,
true), 12);
_elementWriter.WriteElement(element);
gs = element.GetGState();
element = _elementBuilder.CreateTextRun
(appendText);
element.SetTextMatrix(1, 0, 0, 1, left, top);
gs.SetFillColorSpace(ColorSpace.CreateDeviceRGB
());
gs.SetFillColor(new ColorPt(0, 0, 0));
_elementWriter.WriteElement(element);
_elementWriter.WriteElement
(_elementBuilder.CreateTextEnd());
}
form = _elementWriter.End();
form.PutName("Subtype", "Form");
form.PutRect("BBox", 0, 0, width, height);
form.PutBool("CenterHeaderText" + pageNumber,
true);
form.PutString("CenterHeaderLocation",
centerHeader);
element = _elementBuilder.CreateForm(form);
_elementWriter.Begin(itr.Current());
_elementWriter.WriteElement(element);
_elementWriter.End();
_elementWriter.Begin(itr.Current());
if (!txtHeaderRight.Text.Equals(""))
{
appendText = txtHeaderRight.Text;
appendText = appendText.Replace("[Page]",
pageNumber);
appendText = appendText.Replace("[Pages]",
totalPages);
appendText = appendText.Replace("[Date]",
date);
appendText = appendText.Replace("[Time]",
time);
appendText = appendText.Replace("[File]", new
FileInfo(_fileName).Name);
appendText = appendText.Replace("[Path]", new
FileInfo(_fileName).Directory.FullName);
appendText = appendText.Replace("[Tab]",
"\t");
textSize = g.MeasureString(appendText,
_rightHeaderFont);
left = width - textSize.Width - 20;
top = height - 20;
rightHeader = left.ToString("0#.###").Replace
(".", "__") + "___" + top.ToString("0#.###").Replace(".", "__");
element = _elementBuilder.CreateTextBegin
(pdftron.PDF.Font.CreateTrueTypeFont(_pdfDoc, _rightHeaderFont, true,
true), 12);
_elementWriter.WriteElement(element);
gs = element.GetGState();
element = _elementBuilder.CreateTextRun
(appendText);
element.SetTextMatrix(1, 0, 0, 1, left, top);
gs.SetFillColorSpace(ColorSpace.CreateDeviceRGB
());
gs.SetFillColor(new ColorPt(0, 0, 0));
_elementWriter.WriteElement(element);
_elementWriter.WriteElement
(_elementBuilder.CreateTextEnd());
}
form = _elementWriter.End();
form.PutName("Subtype", "Form");
form.PutRect("BBox", 0, 0, width, height);
form.PutBool("RightHeaderText" + pageNumber,
true);
form.PutString("RightHeaderLocation",
rightHeader);
element = _elementBuilder.CreateForm(form);
_elementWriter.Begin(itr.Current());
_elementWriter.WriteElement(element);
_elementWriter.End();
itr.Next();
}
}
catch (Exception)
{
functionReturnValue = false;
return false;
}
return functionReturnValue;
}