У меня есть следующая функция, которую я использую для добавления повернутой даты в правой части каждой страницы PDF-файла, содержащего несколько инженерных чертежей, с помощью iText:
Action<string, string> InsertDateStamp =
(newFile, sourcePdfPath) =>
{
string dateStamp = DateTime.Now.ToString("dd-MMM-yyyy");
using (var pdfReader = new iText.Kernel.Pdf.PdfReader(sourcePdfPath))
using (var pdfWriter = new iText.Kernel.Pdf.PdfWriter(newFile))
using (var pdfDoc = new iText.Kernel.Pdf.PdfDocument(pdfReader, pdfWriter))
{
var numPages = pdfDoc.GetNumberOfPages();
for (int pageNum = 1; pageNum <= numPages; pageNum++)
{
var page = pdfDoc.GetPage(pageNum);
var pdfCanvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
var canvas = new iText.Layout.Canvas(pdfCanvas, page.GetPageSize());
canvas.SetFontColor(iText.Kernel.Colors.ColorConstants.BLACK);
canvas.SetFontSize(14);
canvas.SetFont(iText.Kernel.Font.PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.TIMES_ROMAN));
canvas.ShowTextAligned(new iText.Layout.Element.Paragraph(dateStamp), 785, 300, pageNum, iText.Layout.Properties.TextAlignment.CENTER, iText.Layout.Properties.VerticalAlignment.MIDDLE, 1.5708f);
pdfCanvas.Release();
}
pdfDoc.Close();
pdfReader.Close();
pdfWriter.Close();
}
};
Этот код работает большую часть времени, но на некоторых страницах добавленный текст почему-то не виден. Он ЗДЕСЬ, так как я могу выбрать его, скопировать и вставить в блокнот, но текст просто не виден на странице.
Например:
Это происходит только на некоторых страницах, и я не могу понять, почему или что не так с рассматриваемым кодом...
Любая помощь будет принята с благодарностью.
Спасибо!
Наконец, после долгих возни, удалось заставить его работать:
var over = new PdfCanvas(page);
over.SetFillColorRgb(0, 0, 0);
var p = new iText.Layout.Element.Paragraph(dateStamp).SetFont(iText.Kernel.Font.PdfFontFactory.CreateFont(iText.IO.Font.Constants.StandardFonts.TIMES_ROMAN)).SetFontSize(14);
new iText.Layout.Canvas(over, page.GetPageSize()).ShowTextAligned(p, 785, 300, pageNum, iText.Layout.Properties.TextAlignment.CENTER, iText.Layout.Properties.VerticalAlignment.MIDDLE, 1.5708f);
Для меня это не имеет смысла, но эй, это работает....
Это так странно... Если я выберу NewContentStreamAfter, проблема в том, что цвет заливки шрифта не установлен! Благодаря вашему средству просмотра я могу изменить свойство «Цвет заливки» текста, и тогда он появится... Но в приведенном выше коде это не работает! Я также попробовал SetFillColor для объекта pdfCanvas, тоже не работает!