如何以编程方式填充现有的 PDF 文档 [关闭]

Posted

技术标签:

【中文标题】如何以编程方式填充现有的 PDF 文档 [关闭]【英文标题】:How to fill an existing PDF document programmatically [closed] 【发布时间】:2014-07-19 01:11:21 【问题描述】:

我有一个不是使用 Adob​​e LifeCycle Designer 创建的 PDF 文档。我要做的是预先填写文档中的常用字段。

我已经研究了许多使用 iTextSharp 和 PDFSharp 可用的选项,但不确定如何正确使用它。

我最近看到了这篇文章:FillPDF,它有一个很好的文档,但与我正在创建的内容不匹配。

我也在阅读 iTextSharp,它可以在 VS 中导入并使用,但我不知道从哪里开始。我看了很多教程,但没有一个描述如何开始。

请帮忙...

【问题讨论】:

试试这个,***.com/questions/583629/… ITextSharp insert text to an existing pdf的可能重复 【参考方案1】:

我最近使用 itextsharp 参与了一个大型项目

http://www.mikesdotnetting.com/Article/88/iTextSharp-Drawing-shapes-and-Graphics http://www.mikesdotnetting.com/Article/81/iTextSharp-Working-with-Fonts

这里有一些事情可以帮助你开始

但就从 pdf 读取然后输出回来而言 你需要一些正则表达式来帮助你。

这是我拥有的示例代码之一(这会在每个新页面事件上创建页眉或页脚)

using CMS;
using CMS.Tags;
using CMS.Pages;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Globalization;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using iTextSharp.text;
using iTextSharp.text.html;
using iTextSharp.text.xml;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.draw;
using System.IO;
using System.Text.RegularExpressions;
using System.Text;
using System.util;

public class pdfPage : iTextSharp.text.pdf.PdfPageEventHelper

public override void OnEndPage(PdfWriter writer, Document doc)
    
        PdfContentByte cb = writer.DirectContent;
        cb.SetLineWidth(1f);
        cb.SetCMYKColorStroke(66, 59, 57, 38);
        cb.MoveTo(30, 55);     
        cb.LineTo(doc.PageSize.Width - 30 , 55);     
        cb.Stroke();
        cb.MoveTo(185, 80);
        cb.LineTo(185, 25);
        cb.Stroke();

        ColumnText ct = new ColumnText(cb);
        BaseFont bfTimes = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false);
        Font times = new Font(bfTimes, 10);
        times.SetColor(90, 90, 90);
        ct.SetSimpleColumn(new Phrase("text text", times), 60, 60, 175, 78, 15, Element.ALIGN_MIDDLE);
        ct.Go();
        times.SetColor(1, 73, 144);
        ct.SetSimpleColumn(new Phrase("text textn", times), 60, 38, 175, 55, 15, Element.ALIGN_MIDDLE);
        ct.Go();
        times.SetColor(90, 90, 90);
        ct.SetSimpleColumn(new Phrase("text here", times), 190, 60, doc.PageSize.Width - 32 , 78, 15, Element.ALIGN_RIGHT);
        ct.Go();
        times.SetColor(90, 90, 90);
        ct.SetSimpleColumn(new Phrase("text here", times), 190, 38, doc.PageSize.Width - 32 , 55, 15, Element.ALIGN_RIGHT);
        ct.Go();
    

这是我启动 pdf 的代码的一部分

using (var ms = new MemoryStream())
        
            using (var doc = new Document(PageSize.LETTER, 220f, 30f, 115f, 100f))

                try
                
                  pdfPage page = new pdfPage();
                  PdfWriter writer = PdfWriter.GetInstance(doc, ms);
                  writer.PageEvent = page;
                  doc.Open();

                iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(RESOURCE);
                img.ScalePercent(49f);
                //img.Width = doc.PageSize.Width;
                //img.Alignment = iTextSharp.text.Image.ALIGN_CENTER;
                img.SetAbsolutePosition(-8, 
                    doc.PageSize.Height - 180.6f);
                doc.Add(img);

这是我的输出代码(作为直接从服务器创建的下载 pdf *未保存在服务器上)


                catch (Exception ex)
                
                  //Log error;
                
                finally
                
                  doc.Close();
                

            
            Response.Clear();
              //Response.ContentType = "application/pdf";
              Response.ContentType = "application/octet-stream";
              Response.AddHeader("content-disposition", "attachment;filename= Company " + namefile + ".pdf");
              Response.Buffer = true; 
              Response.Clear();
              var bytes = ms.ToArray();
              Response.OutputStream.Write(bytes, 0, bytes.Length);
              Response.OutputStream.Flush();

        

【讨论】:

感谢您的文章。我只是对开始的部分感到非常困惑。我在 C# 中创建一个新的 ASP.NET 空 Web 应用程序,然后导入 iTextSharp 并创建一个 aspx 页面? 好的,那么这里有一些基本的代码示例,从打开流中的新 pdf 到输出 gl 感谢您抽出宝贵时间帮助初学者,而不是投反对票……感谢。接受答案。

以上是关于如何以编程方式填充现有的 PDF 文档 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# - 如何使用 PrintDocument 以编程方式打印现有 PDF 文件

如何以编程方式在 iOS 中创建 PDF?

如何将word文档数据填充到pdf中

如何以编程方式确定如何将较小的盒子装入较大的包装中? [关闭]

如何以编程方式关闭 NSPopover

如何以编程方式将数据库添加到现有的 Always On 可用性组 (AOAG)?