使用 iTextSharp 在 PDF 草稿表单上书写
To write on the PDF draft form with iTextSharp
我想在 PDF 上使用 itexsharp 填写草稿表格。但是当我 运行 代码时它不起作用。数据隐藏在 PDF 格式下。您可以在下面看到详细代码。我该如何解决?
我认为图片中的Square可能是图片格式。
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();
如果这是可编辑的表格(您可以用 Adobe Reader 填写的表格),那么您应该查看 PdfStamper 和 AcroFields
这里有一篇关于它的好文章http://www.codeproject.com/Articles/23112/Fill-in-PDF-Form-Fields-using-the-Open-Source-iTex
这篇文章 How to bring added images using iTextSharp in C# to the forefront 建议 PDF 中的 z-order 是由添加到内容中的对象的顺序决定的。所以先导入源码页面,再画文字,应该可以解决问题。
方块也可能是实际的表单域。如果是这种情况,您可以使用 Acrobat 打开 PDF 以找出它们的名称(或者如果您没有可用的 Acrobat,则通过 iTextSharp 编码枚举它们)并使用 PdfStamper class 实际上 "fill them in" .
尽量放
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
在添加您自己的文本之前。
您在页面上写下文本,然后重叠原始 pdf。
我想在 PDF 上使用 itexsharp 填写草稿表格。但是当我 运行 代码时它不起作用。数据隐藏在 PDF 格式下。您可以在下面看到详细代码。我该如何解决?
我认为图片中的Square可能是图片格式。
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();
如果这是可编辑的表格(您可以用 Adobe Reader 填写的表格),那么您应该查看 PdfStamper 和 AcroFields
这里有一篇关于它的好文章http://www.codeproject.com/Articles/23112/Fill-in-PDF-Form-Fields-using-the-Open-Source-iTex
这篇文章 How to bring added images using iTextSharp in C# to the forefront 建议 PDF 中的 z-order 是由添加到内容中的对象的顺序决定的。所以先导入源码页面,再画文字,应该可以解决问题。
方块也可能是实际的表单域。如果是这种情况,您可以使用 Acrobat 打开 PDF 以找出它们的名称(或者如果您没有可用的 Acrobat,则通过 iTextSharp 编码枚举它们)并使用 PdfStamper class 实际上 "fill them in" .
尽量放
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
在添加您自己的文本之前。 您在页面上写下文本,然后重叠原始 pdf。