Вставьте текст красным цветом внизу существующего PDF-файла с помощью itextsharp - PullRequest
0 голосов
/ 17 января 2020

У меня есть существующий файл PDF, я хочу вставить текст в конец файла PDF красным цветом, но цвет существующего файла PDF должен остаться прежним.

Ответы [ 4 ]

1 голос
/ 20 января 2020

Спасибо @mkl ниже код, я использовал, который указан c для штампа.

 public static void ManipulatePdf(string src, string dest)
        {
            src = @"C:\CCPR Temp\TempFiles\PayStub_000106488_12282019_20200117112403.pdf";
            dest = @"C:\CCPR Temp\TempFiles\PayStub_WithStamper.pdf";
            PdfReader reader = new PdfReader(src);
            PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create)); // create?
            int numberOfPages = reader.NumberOfPages;
            Rectangle pagesize;
            for (int i = 1; i <= numberOfPages; i++)
            {
                PdfContentByte under = stamper.GetUnderContent(i);
                pagesize = reader.GetPageSize(i);
                float x =40;// (pagesize.Left + pagesize.Right) / 2;
                float y = pagesize.Top/4;// (pagesize.Bottom + pagesize.Top) / 2;
                PdfGState gs = new PdfGState();
                gs.FillOpacity = 1.0f;
                under.SaveState();
                under.SetGState(gs);
                under.SetRGBColorFill(255,0,0); 
                ColumnText.ShowTextAligned(under, Element.ALIGN_BOTTOM,
                    new Phrase("Watermark", new Font(Font.FontFamily.HELVETICA, 20)),
                    x, y, 1);
                under.RestoreState();
            }
            stamper.Close();
            reader.Close();
        }
0 голосов
/ 17 января 2020

Добавление содержимого в существующий документ PDF без изменения существующего содержимого иногда называется штамповка . Примерами являются добавление номеров страниц, добавление водяного знака и добавление бегущей головки.

Для вашего конкретного c case:

  • Создание экземпляра PdfDocument из PdfReader (для чтения входного PDF) и PdfWriter (для записи выходного PDF). Экземпляр PdfDocument будет в режиме штамповка .
  • Установите красный цвет текста для Paragraph с текстом нижнего колонтитула.
  • Расположите текст с помощью ShowTextAligned удобный метод, основанный на размере страницы.

Вы также можете принять во внимание поворот страницы.

PdfDocument pdfDoc = new PdfDocument(new PdfReader("input.pdf"), new PdfWriter("output.pdf"));
Document doc = new Document(pdfDoc);

Paragraph footer = new Paragraph("This is a footer").SetFontColor(ColorConstants.RED);

for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++) 
{
    Rectangle pageSize = pdfDoc.GetPage(i).GetPageSize();
    float x = pageSize.GetLeft() + pageSize.GetWidth() / 2;
    float y = pageSize.GetBottom() + 20;
    doc.ShowTextAligned(footer, x, y, i, TextAlignment.CENTER, VerticalAlignment.BOTTOM, 0);
}

doc.Close();
0 голосов
/ 20 января 2020

Я использовал следующие шаги и, наконец, получил требуемый результат. Я боролся за цвет шрифта, чтобы применить к недавно добавленному тексту.

public static void StampPdfFile(string oldFile, string newFile)
{
    // open the reader
    PdfReader reader = new PdfReader(oldFile);
    Rectangle size = reader.GetPageSizeWithRotation(1);
    Document document = new Document(size);

    // open the writer
    FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
    PdfWriter writer = PdfWriter.GetInstance(document, fs);
    document.Open();

    // the pdf content
    PdfContentByte cb = writer.DirectContent;

    // select the font properties
    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

    cb.SetFontAndSize(bf, 8);

    // write the text in the pdf content

    cb.BeginText();
    string text = $"Voided On - {DateTime.Now.Date.ToString("MM/dd/yyyy")}";
    // put the alignment and coordinates here
    cb.SetColorFill(BaseColor.RED); //Give Red color to the newly added Text only
    cb.ShowTextAligned(2, text, 120, 250, 0);
    cb.SetColorFill(BaseColor.BLACK);  //Give Red color to the exisitng file content only
    cb.EndText();

    // create the new page and add it to the pdf
    PdfImportedPage page = writer.GetImportedPage(reader, 1);
    cb.AddTemplate(page, 0, 0);

    document.Close();
    fs.Close();
    writer.Close();
    reader.Close();
}
0 голосов
/ 17 января 2020

Это установит шрифт вашего абзаца. Я не уверен насчет позиции.

            BaseFont btnRedFooter = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font fntRedFooter = FontFactory.GetFont(iTextSharp.text.Font.FontFamily.TIMES_ROMAN.ToString(), 16,
            iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.RED);

pProtocoll.Add (новый абзац («Текст в нижнем колонтитуле», fntRedFooter));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...