هل تستخدم iText (iTextSharp) لملء حقول نموذج XFA في PDF؟

StackOverflow https://stackoverflow.com/questions/1041652

  •  22-07-2019
  •  | 
  •  

سؤال

أحتاج إلى ملء حقول نموذج XFA في ملف PDF (تم إنشاؤه باستخدام Adobe LiveCycle Designer).نحن نحاول استخدام iText (في الواقع iTextSharp مع C#) لتحليل ملف PDF وملء حقول XFA ثم حفظ ملف PDF المعدل مرة أخرى.

جميع الأمثلة التي يمكنني العثور عليها باستخدام iText (عدد قليل جدًا من أمثلة iTextSharp) تتحدث عن تعديل حقول AcroForm.لا يحتوي ملف PDF هذا على حقول AcroForm ويستخدم XFA فقط.

قد تكون المؤشرات إلى أي موارد غير قياسية مفيدة (لقد أجريت بالفعل البحث المطلوب على Google حول هذا الموضوع ولم أجد أي شيء مفيد).

ستكون أمثلة التعليمات البرمجية هنا رائعة من أي شخص قام بالفعل بما أحاول القيام به.

هل كانت مفيدة؟

المحلول

إذا كنت تستطيع الحصول على حزم البيانات في PDF، وقت التشغيل XFA في Acrobat أن تعبئة هذه الحقول مع البيانات في حزمة البيانات.

إذا كنت تريد أن ترى ما واحدة من هذه تبدو مثل، إنشاء نموذج في مصمم LiveCycle (يأتي مع أكروبات برو)، وإضافة بعض الحقول لذلك، وحفظه كملف PDF الديناميكي. فتح النموذج في Acrobat واكتب بعض القيم في الحقول وحفظه.

وافتح PDF مع الأداة التي تتركك في البيانات PDF وستجد / كتالوج / AcroForm / XFA تيار يحتوي على الحزمة مع القيم التي كتبتها. هذا ما سوف تحتاج إلى خلق نفسك وإدراجه في PDF.

ووالمواصفات XDP تتضمن وصفا للحزم البيانات وخوارزمية الدمج. يمكنك العثور عليه هنا:

http://partners.adobe.com/public/developer/xml/ index_arch.html

وبدلا من ذلك، يمكنك شراء الخادم LiveCycle من أدوبي الذي يتيح لك أن تفعل كل هذا برمجيا في عدد من الطرق بما في ذلك من خلال المكالمات خدمة الإنترنت.

نصائح أخرى

يمكن لـ iTextSharp العمل مع XFA.لإزالة كل الشكوك، يرجى إلقاء نظرة على العينة على موقع iText:

http://itextpdf.com/examples/iia.php?id=165

using (FileStream existingPdf = new FileStream("existing.pdf", FileMode.Open))
using (FileStream sourceXml = new FileStream("source.xml", FileMode.Open))
using (FileStream newPdf = new FileStream("new.pdf", FileMode.Create))
{
    // Open existing PDF  
    PdfReader pdfReader = new PdfReader(existingPdf);

    // PdfStamper, which will create  
    PdfStamper stamper = new PdfStamper(pdfReader, newPdf);
    stamper.AcroFields.Xfa.FillXfaForm(sourceXml);

    stamper.Close();
    pdfReader.Close();
}

ولدي نفس المشكلة وأعتقد أنني وجدت الحل. أنا أستخدم PowerShell لتفقد الكائن قوات الدفاع الشعبي.

تحميل DLL iTextSharp.

Add-Type -Path "C:\Users\micah\Desktop\itextsharp.dll"

وتحميل PDF إلى متغير:

$PDF = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:\Users\micah\Desktop\test.pdf"

وفحص هذا الكائن:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Get-Member

وماذا يجب أن ترى، هو أن كل ما تبذلونه من الحقول في الخاص بك PDF في هذا الكائن كخاصية. يمكنك الحصول على نظرة سريعة على جميع المجالات الخاصة بك مثل هذا:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Select-Object -Property "*"

وهذا ينبغي أن يكون تذكرة سحرية. هذا الموقع هو كلا الحقلين من النموذج الأصلي والجزء XFA من النموذج.

وتقول ان في الكتاب لitext لا تفعل هذا. يمكنك تحويل PDF؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top