我正在将页面页面插入pdf doc。这些页面最后没有添加或开始需要在某处插入中间(我可以通过书签确定插入位置)。
关键不是松散书签。所以我正在使用PdfStamper来插入页面。问题是正在插入的pdf具有表单字段,而这些字段没有通过。
插入
的代码for (int pageNum = 1; pageNum <= readerPdfToAdd.NumberOfPages; pageNum++)
{
PdfImportedPage page = pdfStamper.GetImportedPage(readerPdfToAdd, pageNum);
pdfStamper.InsertPage(filesByCategory[i].PageOfInsert + pageNum, readerPdfToAdd.GetPageSizeWithRotation(pageNum));
var rotation = readerPdfToAdd.GetPageRotation(pageNum);
if (rotation == 90 || rotation == 270)
{
pdfStamper.GetUnderContent(filesByCategory[i].PageOfInsert + pageNum)
.AddTemplate(page, 0, -1f, 1f, 0, 0, readerPdfToAdd.GetPageSizeWithRotation(pageNum).Height);
}
else
{
pdfStamper.GetUnderContent(filesByCategory[i].PageOfInsert + pageNum).AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
我尝试过这样的东西来复制字段,但这并没有完全复制。
foreach (KeyValuePair<string, AcroFields.Item> kvp in pdfFormFields.Fields)
{
var s = pdfFormFields.GetFieldPositions("Date");
PdfArray r = kvp.Value.GetWidget(0).GetAsArray(PdfName.RECT);
var name = kvp.Value.GetWidget(0).GetAsArray(PdfName.NAME);
Rectangle rr = new Rectangle(r.GetAsNumber(0).FloatValue, r.GetAsNumber(1).FloatValue, r.GetAsNumber(2).FloatValue, r.GetAsNumber(3).FloatValue);
TextField field = new TextField(pdfStamper.Writer, rr, kvp.Value.GetWidget(0).Get(PdfName.T).ToString());
if (kvp.Value.GetWidget(0).Get(PdfName.V) != null)
field.Text = kvp.Value.GetWidget(0).Get(PdfName.V).ToString();
// add the field here, the second param is the page you want it on
pdfStamper.AddAnnotation(field.GetTextField(), filesByCategory[i].PageOfInsert + pageNum);
fields.SetField(kvp.Key, kvp.Value.ToString());
}
有更好的方法吗?我试过在源文档中丢失书签的PdfCopy。
答案 0 :(得分:0)
请使用PdfCopy
或PdfSmartCopy
汇总文件。如chapter 6 of my book中所述,PdfImportedPage
仅复制内容流中的内容。
您可能需要PdfStamper
在原始文档上标记一些额外内容,这很好,但您需要将其与PdfCopy
或PdfSmartCopy
结合起来以汇总最终文档。