【问题标题】:To write on the PDF draft form with iTextSharp使用 iTextSharp 在 PDF 草稿表单上书写
【发布时间】:2016-01-25 18:45:57
【问题描述】:

我想在 PDF 上使用 itexsharp 填写草稿表格。但是当我运行代码时它不起作用。数据隐藏在 PDF 格式下。您可以在下面看到详细代码。我该如何解决?

我认为图片中的 Squares 可能是图像格式。

        string oldFile ="~\Document\oldFile.pdf";
        string newFile ="~\Document\newFile.pdf";

        PdfReader reader = new PdfReader(oldFile);
        Rectangle size = reader.GetPageSizeWithRotation(1);
        Document document = new Document(size);

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

        PdfContentByte cb = writer.DirectContent;


        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetColorFill(BaseColor.DARK_GRAY); cb.SetFontAndSize(bf, 8);

        cb.BeginText();
        string text = TextBox1.Text;
        cb.ShowTextAligned(1, text, 350, 710, 0); // or cb.SetTextMatrix(1, text, 350, 710, 0);
        cb.EndText();

        cb.BeginText();
        text = TextBox1.Text;
        cb.ShowTextAligned(2, text, 520, 640, 0);
        cb.EndText();           

        cb.BeginText();
        text = "Signature";
        cb.ShowTextAligned(3, text, 100, 200, 0);
        cb.EndText();

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

        document.Close();
        fs.Close();
        writer.Close();
        reader.Close();

【问题讨论】:

  • 那些粉红色的框看起来像表单域,是一种注释形式,因此总是最上面的。如果是这样,您可以flatten the PDF(跳过循环)或者您可以填写表格。如果您在使用后者时遇到问题,请发布您的代码和 PDF 本身以供我们检查。
  • 谢谢。我能够通过 Razvan 的答案找到解决方案。

标签: c# asp.net itextsharp


【解决方案1】:

如果这是可编辑的表格(您可以使用 Adob​​e Reader 填写),那么您应该查看 PdfStamperAcroFields

这是一篇关于它的好文章http://www.codeproject.com/Articles/23112/Fill-in-PDF-Form-Fields-using-the-Open-Source-iTex

【讨论】:

  • 我试过那个方法。它没有用。谢谢你帮助我。
  • @F.Baydemir 使用PdfStamper 是要走的路。说我试过那个方法。它没有用。 没有建设性。它确实有效,但如果你不想接受好的建议,那你为什么要问这个问题呢?
  • @Bruno Lowagie 鲑鱼网格可能是一张照片。这不是我第一次看到某个权威机构发布的 PDF,该 PDF 最初是用铅笔在纸上填写的,他们不介意使用 AcroFields。当然,正确的方法是先获得一个设计合理的表单,然后继续使用PdfStamper,但是这个选项对于被要求以编程方式添加内容的可怜的程序员来说通常是不可用的,所以他们求助于一个位置-像这里一样猜测和叠加。
【解决方案2】:

试着放

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

在添加您自己的文本之前。 您在页面上写下文本,然后重叠原始 pdf。

【讨论】:

  • 说的方法是。谢谢。
【解决方案3】:

这篇文章How to bring added images using iTextSharp in C# to the forefront 建议PDF 中的z 顺序由添加到内容中的对象的顺序决定。所以先导入源页面,然后画你的文字,应该可以解决问题。

方块也可能是实际的表单域。如果是这种情况,您可以使用 Acrobat 打开 PDF 以找出它们的名称(或者如果您没有可用的 Acrobat,则通过 iTextSharp 编码枚举它们)并使用 PdfStamper 类实际“填写”它们。

【讨论】:

  • 谢谢。我能够通过 Razvan 的答案找到解决方案。
猜你喜欢
  • 2013-01-08
  • 1970-01-01
  • 2012-03-10
  • 2011-08-22
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多