Я работаю над процессом утверждения, когда некоторые утверждающие утверждают документ. Количество утверждающих лиц варьируется в каждом запросе на утверждение.
Я хочу поместить таблицу в утверждаемый документ. В таблице должны быть столбцы с изображениями подписей каждого утверждающего.
Я успешно отредактировал документ с использованием ItextSharp и добавил текст Water Mark, как описано в this . Сейчас я пытаюсь поместить таблицу в PDF-документ с помощью PDFStamper, но таблица не отображается при печати документа.
Вот мой код:
protected void btn_Print_Click(object sender, EventArgs e)
{
DataTable dt_comments = obj_comments.GetRequestComments(ViewState["DocumentNumber"].ToString());
SPFile pdfOriginalFile = obj_RequestDocuments.GetFile(ViewState["DocumentNumber"].ToString());
//get byte[] of uploaded file
byte[] contentPdfOriginalFile = pdfOriginalFile.OpenBinary();
//Initialize PdfReader
var reader = new PdfReader(new RandomAccessFileOrArray(contentPdfOriginalFile), null);
//We will write output file into memory. You can use temp file of course.
var ms = new MemoryStream();
//Initialize PdfStamper
var stamper = new PdfStamper(reader, ms);
//Tell stamper not to close stream when stamper itself is being closed
stamper.Writer.CloseStream = false;
// Getting total number of pages of the Existing Document
int pageCount = reader.NumberOfPages;
// Create New Layer for Watermark
PdfLayer layer = new PdfLayer("WatermarkLayer", stamper.Writer);
//************CREATE TABLE START***********************
PdfPTable table=new PdfPTable(dt_comments.Rows.Count);
table.WidthPercentage = 100;
table.HorizontalAlignment = Element.ALIGN_LEFT;
table.SetTotalWidth(ColumnWidths(dt_comments.Rows.Count,200f));
for (var i = 0; i < dt_comments.Rows.Count; i++)
{
var image = dt_comments.Rows[i];
try
{
PdfPCell cell = new PdfPCell();
cell.BorderWidth = 15;
cell.FixedHeight = 15;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
Paragraph p = new Paragraph();
float offset = 0;
StringBuilder sb = new StringBuilder();
sb.Append(dt_comments.Rows[i]["Action"] + " By:");
sb.Append(dt_comments.Rows[i]["CommentBy"].ToString());
sb.Append(" On " + dt_comments.Rows[i]["Created"].ToString());
p.Add(new Chunk(sb.ToString()));
cell.AddElement(p);
table.AddCell(cell);
}
catch (Exception ex)
{
//Ignore
}
}
//**************CREATE TABLE ENDED************************
// Loop through each Page
for (int i = 1; i <= pageCount; i++)
{
// Getting the Page Size
Rectangle rect = reader.GetPageSize(i);
// Get the ContentByte object
PdfContentByte cb = stamper.GetOverContent(i);
// Tell the cb that the next commands should be "bound" to this new layer
cb.BeginLayer(layer);
cb.SetFontAndSize(BaseFont.CreateFont(
BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 8);
PdfGState gState = new PdfGState();
gState.FillOpacity = 0.3f;
cb.SetGState(gState);
cb.SetColorFill(BaseColor.BLACK);
cb.BeginText();
float width = rect.Width;
float height = rect.Height;
float HorizontalValue =width/6 ;
float verticalValue =height/6;
//for (int j = 0; j < dt_comments.Rows.Count; j++)
//{
// StringBuilder sb = new StringBuilder();
// sb.Append(dt_comments.Rows[j]["Action"] + " By:");
// sb.Append(dt_comments.Rows[j]["CommentBy"].ToString());
// sb.Append(" On " + dt_comments.Rows[j]["Created"].ToString());
// cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, sb.ToString(), HorizontalValue, verticalValue, 0f);
// verticalValue = verticalValue - 10;//to change the line come down
//}
//cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Confidential", rect.Width / 2, rect.Height / 2, 45f);
PdfTemplate tableTemplate = cb.CreateTemplate(1500, 1300);
table.WriteSelectedRows(0, table.Rows.Count, 400, 400, tableTemplate);
cb.EndText();
// Close the layer
cb.EndLayer();
}
//Close stamper, readed
stamper.Close();
reader.Close();
//obj_RequestDocuments.UploadFile(pdfOriginalFile.Name, ms.ToArray(), "1234");
string[] stringParts = pdfOriginalFile.Name.Split(new char[] { '.' });
string strType = stringParts[1];
Page.Response.Clear();
Page.Response.ClearContent();
Page.Response.ClearHeaders();
Page.Response.AddHeader("content-disposition", "attachment; filename=" + pdfOriginalFile.Name);
//Set the content type as file extension type
Page.Response.ContentType = strType;
//Write the file content
Page.Response.BinaryWrite(ms.ToArray());
Page.Response.End();
//Flush memory stream and set it position to start
ms.Flush();
ms.Position = 0;
}
Обратите внимание, что в настоящее время я я пытаюсь просто добавить имя утверждающего в каждый столбец, следующим шагом будет добавление изображения подписи утверждающего в каждом столбце
Когда я добавлял простой текст в документ, это было успешно, но я не могу добавить Таблица в документе и озадачен фиксированием ширины. Вопросы высоты, так как размер документа может быть А3 или А4. В настоящее время я тестирую его на A3
Я прошел this
ОБНОВЛЕНИЕ:
Я изменил следующий метод вызовите, теперь таблица видна, но в заливке черного цвета, ничего не видно:
table.WriteSelectedRows(0, table.Rows.Count, 400, 400, cb);
Я также поместил белый вместо черного в следующей строке:
cb.SetColorFill(BaseColor.WHITE);
Кроме того, при открытии файла PDF, созданного из кода выше, возникает ошибка:
Ниже приведен снимок экрана: