【发布时间】:2012-10-10 09:19:05
【问题描述】:
我有一些想要使用 C# 自动填写的 PDF。我知道 iTextSharp,但我不确定用于商业用途的许可问题,并且宁愿找到不同的解决方案。
基本上,我想打开一个 PDF,指定字段(或为文本框提供坐标)并能够插入文本(可能还有小图像?)。然后我需要合并并保存pdf。
有什么好的方法可以在我不必购买/担心许可证的情况下完成此任务?
【问题讨论】:
我有一些想要使用 C# 自动填写的 PDF。我知道 iTextSharp,但我不确定用于商业用途的许可问题,并且宁愿找到不同的解决方案。
基本上,我想打开一个 PDF,指定字段(或为文本框提供坐标)并能够插入文本(可能还有小图像?)。然后我需要合并并保存pdf。
有什么好的方法可以在我不必购买/担心许可证的情况下完成此任务?
【问题讨论】:
您可以尝试 Docotic.Pdf 库来完成您的任务。该库不是免费的,但可能没有什么可担心的(许可方面)。
以下是在线提供的示例,可能会对您有所帮助:
来自 Forms and Annotations 组的Other samples 也可以证明对您的情况有用。
免责声明:我为图书馆的供应商工作。
【讨论】:
不确定 iTextSharp 的优势是什么,但我找到了一个使用 PDFSharp 的解决方案,到目前为止效果很好!由于 PDFSharp 的文档似乎有点轻松,我还发现 this thread 非常有帮助...
如果这对任何人有帮助,这是我的示例程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using PdfSharp.Fonts;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Pdf.AcroForms;
namespace PDFSharpTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void goButton_Click(object sender, EventArgs e)
{
//TestPDF(); //uncomment this to find out whether acroform will work correctly
//open file
PdfDocument pdf = PdfReader.Open(@"YOURFILEPATHandNAME", PdfDocumentOpenMode.Modify);
//fix some odd setting where filled fields don't always show SetupPDF(pdf);
//find and fill fields
PdfTextField txtEmployerName = (PdfTextField)(pdf.AcroForm.Fields["txtEmployerName"]);
txtEmployerName.Value = new PdfString("My Name");
PdfTextField txtEmployeeTitle = (PdfTextField)(pdf.AcroForm.Fields["txtEmployeeTitle"]);
txtEmployeeTitle.Value = new PdfString("Workin'");
PdfCheckBoxField chxAttached = (PdfCheckBoxField)(pdf.AcroForm.Fields["chxAttached"]);
chxAttached.Checked = true;
//save file
pdf.Save(@"NEWFILEPATHandNAMEHERE");
}
private void SetupPDF(PdfDocument pdf)
{
if (pdf.AcroForm.Elements.ContainsKey("/NeedAppearances") == false)
{
pdf.AcroForm.Elements.Add("/NeedAppearances", new PdfSharp.Pdf.PdfBoolean(true));
}
else
{
pdf.AcroForm.Elements["/NeedAppearances"] = new PdfSharp.Pdf.PdfBoolean(true);
}
}
private void PDFTest()
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
PdfDocument _document = null;
try { _document = PdfReader.Open(ofd.FileName, PdfDocumentOpenMode.Modify); }
catch (Exception ex)
{
MessageBox.Show(ex.Message, "FATAL"); //do any cleanup and return
return;
}
if (_document != null)
{
if (_document.AcroForm != null)
{
MessageBox.Show("Acroform is object", "SUCCEEDED");
//pass acroform to some function for processing
_document.Save(@"C:\temp\newcopy.pdf");
}
else
{
MessageBox.Show("Acroform is null", "FAILED");
}
}
else
{
MessageBox.Show("Unknown error opening document", "FAILED");
}
}
}
}
}
【讨论】: