为了账号安全,请及时绑定邮箱和手机立即绑定

ITextSharp将文本插入到现有的pdf中

ITextSharp将文本插入到现有的pdf中

Qyouu 2019-11-11 11:01:03
标题概括了所有内容。我想使用iTextSharp将文本添加到现有的PDF文件中,但是我找不到如何在网络中的任何地方执行此操作...PS:我不能使用PDF表格。
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

我找到了一种方法(不知道这是否是最好的方法,但它确实有效)


string oldFile = "oldFile.pdf";

string newFile = "newFile.pdf";


// 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.SetColorFill(BaseColor.DARK_GRAY);

cb.SetFontAndSize(bf, 8);


// write the text in the pdf content

cb.BeginText();

string text = "Some random blablablabla...";

// put the alignment and coordinates here

cb.ShowTextAligned(1, text, 520, 640, 0);

cb.EndText();

cb.BeginText();

text = "Other random blabla...";

// put the alignment and coordinates here

cb.ShowTextAligned(2, text, 100, 200, 0);

cb.EndText();


// create the new page and add it to the pdf

PdfImportedPage page = writer.GetImportedPage(reader, 1);

cb.AddTemplate(page, 0, 0);


// close the streams and voilá the file should be changed :)

document.Close();

fs.Close();

writer.Close();

reader.Close();

我希望这对某人==有用(并在此处发布任何错误)


查看完整回答
反对 回复 2019-11-11
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

除了上述出色的答案之外,以下内容还显示了如何向多页文档的每一页添加文本:


 using (var reader = new PdfReader(@"C:\Input.pdf"))

 {

    using (var fileStream = new FileStream(@"C:\Output.pdf", FileMode.Create, FileAccess.Write))

    {

       var document = new Document(reader.GetPageSizeWithRotation(1));

       var writer = PdfWriter.GetInstance(document, fileStream);


       document.Open();


       for (var i = 1; i <= reader.NumberOfPages; i++)

       {

          document.NewPage();


          var baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

          var importedPage = writer.GetImportedPage(reader, i);


          var contentByte = writer.DirectContent;

          contentByte.BeginText();

          contentByte.SetFontAndSize(baseFont, 12);


          var multiLineString = "Hello,\r\nWorld!".Split('\n');


          foreach (var line in multiLineString)

          {

             contentByte.ShowTextAligned(PdfContentByte.ALIGN_LEFT, line, 200, 200, 0);

          }


          contentByte.EndText();

          contentByte.AddTemplate(importedPage, 0, 0);

       }


       document.Close();

       writer.Close();

    }

 }


查看完整回答
反对 回复 2019-11-11
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这对我有用,包括使用OutputStream:


PdfReader reader = new PdfReader(new RandomAccessFileOrArray(Request.MapPath("Template.pdf")), null);

    Rectangle size = reader.GetPageSizeWithRotation(1);

    using (Stream outStream = Response.OutputStream)

    {

        Document document = new Document(size);

        PdfWriter writer = PdfWriter.GetInstance(document, outStream);


        document.Open();

        try

        {

            PdfContentByte cb = writer.DirectContent;


            cb.BeginText();

            try

            {

                cb.SetFontAndSize(BaseFont.CreateFont(), 12);

                cb.SetTextMatrix(110, 110);

                cb.ShowText("aaa");

            }

            finally

            {

                cb.EndText();

            }


                PdfImportedPage page = writer.GetImportedPage(reader, 1);

                cb.AddTemplate(page, 0, 0);


        }

        finally

        {

            document.Close();

            writer.Close();

            reader.Close();

        }

    }


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 882 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信