Использование C# iText 7 для выравнивания XFA PDF
Можно ли использовать iText 7 для выравнивания XFA PDF? Я только вижу документацию по Java об этом ( http://developers.itextpdf.com/content/itext-7-examples/itext-7-form-examples/flatten-xfa-using-pdfxfa).
Кажется, что вы можете использовать iTextSharp, однако, чтобы сделать это.
Я считаю, что это не AcroForm PDF, потому что делать что-то похожее на этот ответ Как сгладить PDF с Itext в C#? просто создал PDF-файл, который не открывается должным образом.
2 ответа
Похоже, вы должны использовать iTextSharp, а не iText7. Глядя на версию NuGet, похоже, что iTextSharp - это, по сути, версия iText5 .NET, и, как упоминал Бруно в комментариях выше, материал XFA просто не был перенесен в iText7 для.NET.
Путаница возникла из-за наличия в NuGet версий iText7 и iTextSharp, а также пробной страницы, в которой не указывалось, что работник XFA не был доступен для.NET-версии iText7 (пока?)
Я сделал следующее, чтобы выполнить то, что мне было нужно, по крайней мере, для испытания:
- Запросите пробную копию здесь: http://demo.itextsupport.com/newslicense/
- Вам отправят по электронной почте лицензионный ключ xml, вы можете просто разместить его на своем рабочем столе.
- Создайте новое консольное приложение в Visual Studio
Откройте консоль диспетчера проектов, введите следующую команду и нажмите клавишу ВВОД (это также установит другие зависимости)
Install-Package itextsharp.xfaworker
Используйте следующий код:
static void Main(string[] args) { ValidateLicense(); var sourcePdfPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "<your_xfa_pdf_file>"); var destinationPdfPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "output.pdf"); FlattenPDF(sourcePdfPath, destinationPdfPath); } private static void ValidateLicense() { var licenseFileLocation = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "itextkey.xml"); iTextSharp.license.LicenseKey.LoadLicenseFile(licenseFileLocation); } private static void FlattenPDF(string sourcePdfPath, string destinationPdfPath) { using (var sourcePdfStream = File.OpenRead(sourcePdfPath)) { var document = new iTextSharp.text.Document(); var writer = iTextSharp.text.pdf.PdfWriter.GetInstance( document, new FileStream(destinationPdfPath, FileMode.Create)); var xfaf = new iTextSharp.tool.xml.xtra.xfa.XFAFlattener(document, writer); sourcePdfStream.Position = 0; xfaf.Flatten(new iTextSharp.text.pdf.PdfReader(sourcePdfStream)); document.Close(); } }
Пробная версия наложит огромный водяной знак на полученный PDF, но по крайней мере вы можете заставить его работать и посмотреть, как должна работать полная лицензия.
Для IText 7 это можно сделать следующим образом
LicenseKey.LoadLicenseFile(@"Path of the license file");
MemoryStream dest_File = new MemoryStream();
XFAFlattener xfaFlattener = new XFAFlattener();
xfaFlattener.Flatten(new MemoryStream( File.ReadAllBytes(@"C:\\Unflattened file")), dest_File);
File.WriteAllBytes("flatten.pdf", dest_File.ToArray());