Я использую itext sharp для заполнения полей формы на моем шаблоне со значениями.Itext Sharp Merge Pdfs с acrofields
Я создал шаблон, используя pdfescape.com
Вот мой код, который я использую, чтобы поместить значения в шаблоне PDF.
private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath)
{
var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath);
var reader = new PdfReader(templatePath);
var outStream = new MemoryStream();
var stamper = new PdfStamper(reader, outStream);
var form = stamper.AcroFields;
var fieldKeys = form.Fields.Keys;
// "Flatten" the form so it wont be editable/usable anymore
// stamper.FormFlattening = true;
foreach (KeyValuePair<String, String> pair in formKeys)
{
if (fieldKeys.Any(f => f == pair.Key))
{
form.SetField(pair.Key, pair.Value);
form.SetFieldProperty(pair.Key, "setfflags", PdfFormField.FF_READ_ONLY, null);
}
}
stamper.Close();
reader.Close();
return outStream.ToArray();
}
я впервые использовал stamper.FormFlattening = верно, но тогда значения не были видны. Поэтому вместо использования сглаживания формы я просто устанавливаю значения как готовые, и все работает нормально.
Теперь я хочу, чтобы объединить несколько из этих PDF-файлов с помощью the pdf merger by smart-soft
После завершения слияния значения не видно. Когда я выделяю форму, она выделяет весь текст, но я не могу его прочитать. Я исследовал это и читал, что поля должны быть сплющены.
Вот изображение того, как он выглядит на PDF, когда я выделить все:
Я не знаю, почему мои поля не видны, когда они сглажены, даже если я не использую Слияние. Что-то не так с кодом или шаблоном? Также будут оценены альтернативы.
Btw мой проект является проектом asp-mvc, если это актуально.
EDIT
Я добавил следующий код, чтобы я сначала прочитал шаблон, записать значения в поля формы, закрыть его, открыть его, расплющить, а затем закрыть его снова, как предложил один комментариев. Я просто передать результат я получаю от функции GeneratePdf этой функции:
private static byte[] flattenPdf(byte[] pdf)
{
var reader = new PdfReader(pdf);
var outStream = new MemoryStream();
var stamper = new PdfStamper(reader, outStream);
stamper.FormFlattening = true;
stamper.Close();
reader.Close();
return outStream.ToArray();
}
Я до сих пор получить тот же результат
* Теперь я хочу объединить несколько этих pdf-файлов, используя [слияние PDF-файлов с помощью smart-soft] (http://www.codeproject.com/Articles/28283/Simple-NET-PDF-Merger) * - Этот код отбрасывает все элементы формы. Лучше использовать iTextSharp для слияния образцов с помощью iText. – mkl
* Я не знаю, почему мои поля не видны, когда они сплющены, даже если я не использую слияние. * - заполнять и сглаживать заполнение в отдельных проходах, т.е. сначала читать, заполнять элементы формы, писать, читать снова, сгладить, написать. – mkl
@mkl, спасибо, я дам, что попытаюсь посмотреть, работает ли он –