Я использую iTextSharp в asp.net (C#), чтобы объединить несколько шаблонов PDf. Существует функция печати, которая печатает только данные шаблона. При слиянии шаблонов поля/элементы управления, доступные в шаблоне, переименовываются с помощью метода RenameField iTextSharp. Эта реализация нарушила функцию печати. Поскольку функция печати была написана в соответствии с полями. Для слияния шаблонов я использую PDFCopy.iTextSharp - Печать объединенных шаблонов PDF
Document document = new Document();
bool flag = true;
using (FileStream fileStream = File.Create(newFile))
{
PdfSmartCopy copy = new PdfSmartCopy(document, fileStream);
PdfReader reader;
MemoryStream baos;
for (int i = 0; i < loopCount; i++)
{
reader = new PdfReader(pdfTemplate);
baos = new MemoryStream();
stamper = new PdfStamper(reader, baos);
AcroFields pdfDoc = stamper.AcroFields;
BuildData(datarow,pdfDoc, obj)
renameFields(reader);
stamper.FormFlattening = false;
stamper.Close();
reader = new PdfReader(baos.ToArray());
copy.AddPage(copy.GetImportedPage(reader, 1));
}
document.Close();
strFileName = newFile;
}
private static void renameFields(PdfReader pdfReader)
{
string prepend = String.Format("_{0}", counter++);
foreach (KeyValuePair<string, AcroFields.Item> de in pdfReader.AcroFields.Fields)
{
pdfReader.AcroFields.RenameField(de.Key.ToString(), prepend + de.Key.ToString());
}
}
Edit1: Это решение я нашел в itextsharp документа, но это не работает «Использование PdfCopy с документами , которые назвали назначение является одним из этих исключений Всех аннотации, такие как ссылка аннотация, есть. хранятся в PdfCopy, но они больше не работают для ссылок на местные именованные адресаты. Существует обходной путь для этой проблемы ».
PdfReader[] readers = {
new PdfReader(LinkActions.RESULT2),
new PdfReader(LinkActions.RESULT1) };
Document document = new Document();
PdfCopy copy =
new PdfCopy(document, new FileOutputStream(RESULT1));
document.open();
int n;
for (int i = 0; i < readers.length; i++) {
readers[i].consolidateNamedDestinations();
n = readers[i].getNumberOfPages();
for (int page = 0; page < n;) {
copy.addPage(copy.getImportedPage(readers[i], ++page));
}
}
У вас возникла проблема с объединением двух документов PDF? – thewisegod
Согласно вашему описанию, есть что-то особенное в ваших шаблонах. Их специальная функция печати, похоже, не ладит с переименованными полями AcroForm. К сожалению, переименование их необходимо, если вы хотите объединить несколько шаблонов. Таким образом, вы также должны адаптировать функциональность печати к переименованным полям. Если вы хотите объединиться. – mkl
@thewisegod Нет, у меня нет проблем с слиянием, после слияния кнопок действий не работает, что находится на вершине шаблона. – abcd