iTextSharp将许多文本添加到pdf

时间:2019-04-26 22:18:40

标签: c# pdf itext

我需要开发类,该类应该具有一种在页面上添加文本的方法(具有不同的参数),并且该方法可以被多次调用,结果类的用户可以调用获取PDF的方法。

我的代码:

public class PdfActions : IPdfActions, IDisposable
{
    PdfReader pdfReader;
    MemoryStream ms = new MemoryStream();
    PdfWriter outputWriter;
    Document inputDoc;
    int pageCount;

    public PdfActions(byte[] input)
    {
        pdfReader = new PdfReader(input);
        pageCount = pdfReader.NumberOfPages;
        // load the input document
        inputDoc = new Document(pdfReader.GetPageSizeWithRotation(1));

        outputWriter = PdfWriter.GetInstance(inputDoc, ms);
        inputDoc.Open();

        for (int i = 1; i <= pageCount; i++)
        {
            inputDoc.SetPageSize(pdfReader.GetPageSizeWithRotation(i));
            inputDoc.NewPage();

            PdfContentByte cb = outputWriter.DirectContent;

            PdfImportedPage page = outputWriter.GetImportedPage(pdfReader, i);
            cb.AddTemplate(page, 0, 0);
        }

    }

它是构造函数,可以“复制” PDF以便流式传输

然后是我添加文本的方法:

    public void AddText(string text, BaseColor color, float x, float y, float fontSize = 12, string font = iTextSharp.text.pdf.BaseFont.HELVETICA, int alignment = 3, int activePage = 1)
    {
        PdfContentByte cb = outputWriter.DirectContent;

        BaseFont bf = BaseFont.CreateFont(font, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetColorFill(color);
        cb.SetFontAndSize(bf, fontSize);

        // write the text in the pdf content
        cb.BeginText();
        // put the alignment and coordinates here
        cb.ShowTextAligned(alignment, text, x, y, 0);
        cb.EndText();


        PdfImportedPage page = outputWriter.GetImportedPage(pdfReader, activePage);
        cb.AddTemplate(page, 0, 0);
    }

和获取PDF字节数组的方法:

    public byte[] GetPdfOutput()
    {

        inputDoc.Close();
        outputWriter.Close();
        return ms.ToArray();
    }

我称之为:

        _pdfActions = new PdfActions(bytes);
        _pdfActions.AddText("Example, Inc.", BaseColor.Black, x: 185, y: 380, fontSize: 26, font: iTextSharp.text.pdf.BaseFont.TIMES_ROMAN);
        _pdfActions.AddText("My Address", BaseColor.Black, x: 185, y: 360, fontSize: 16, font: iTextSharp.text.pdf.BaseFont.TIMES_ROMAN);
        var result = _pdfActions.GetPdfOutput();

但是它始终以PDF作为模板。怎么了?

PS。我实现了AddText封装的方法(使用打开流/动作/关闭​​流),但是它不能用于许多动作。

0 个答案:

没有答案