दिलचस्प पोस्ट
जावा में कंस्ट्रक्टर कोड रिडंडेंसी से कैसे बचें? SecItemAdd हमेशा त्रुटि -34018 आईओएस 10 सिम्युलेटर में Xcode 8 में देता है MySQL वाइल्ड कार्ड से बचें क्रोम एक्सटेंशन के अंतर्गत onClick काम नहीं कर रहा है एसक्यूएल व्यक्तिगत पंक्तियों की गणना के बजाय सभी पंक्तियों की गिनती करता है कैसे django के रूप में ग्रुप द्वारा क्वेरी करने के लिए? सीएसएस, छवियों और लिंक जैसे रिश्तेदार संसाधन ब्राउजर उपयोग नहीं कर सकते हैं ASP.NET MVC स्वचालित कैशिंग विकल्प को कैसे अक्षम करें? प्रोग्रामिंग के अंत में प्रोग्रामिंग एक सी ++ प्रोग्राम में कस्टम HTML टैग विशेषता JSF द्वारा प्रदान नहीं की गई हैं जेडीबीसी में डालने की आईडी कैसे प्राप्त करें? क्या हम एंड्रॉइड में दूरदराज के MySQL डाटाबेस को जेडीबीसी का उपयोग कर सकते हैं? एंड्रॉइड टेक्स्टव्यू जस्टिफ़ टेक्स्ट कैसे कोकाओपॉड के पुराने संस्करण को डाउनग्रेड करना या स्थापित करना सेलेनियम के साथ एंजरीजेएस परीक्षण करना

एक्ट्रोफिल्ड के साथ आईटेक्स्ट मर्ज दस्तावेज़

वर्तमान में मेरे पास एक पीडीएफ रीडर और एक पीडीएफ स्टैमर हैं जो मैं एक्रॉफ़िल्ल्ड्स को भरना चाहता हूं। मुझे अब उस फॉर्म के अंत में एक और पीडीएफ की प्रतिलिपि करना होगा, जो मैं भर रहा हूं और जब मैं नया फॉर्म पर एक्रॉफ़िल्ड खो देता हूं जो मैं प्रतिलिपि करता हूं। यहां कोड है

public static void addSectionThirteenPdf(PdfStamper stamper, Rectangle pageSize, int pageIndex){ PdfReader reader = new PdfReader(FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/resources/documents/Section13.pdf")); AcroFields fields = reader.getAcroFields(); fields.renameField("SecurityGuidancePage3", "SecurityGuidancePage" + pageIndex); stamper.insertPage(pageIndex, pageSize); stamper.replacePage(reader, 1, pageIndex); } 

जिस तरह से मैं मूल दस्तावेज बना रहा हूँ, वह इस तरह से है।

  OutputStream output = FacesContext.getCurrentInstance().getExternalContext().getResponseOutputStream(); PdfReader pdfTemplate = new PdfReader(FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/resources/documents/dd254.pdf")); PdfStamper stamper = new PdfStamper(pdfTemplate, output); stamper.setFormFlattening(true); AcroFields fields = stamper.getAcroFields(); 

क्या कोड का पहला टुकड़ा उपयोग करके मर्ज करने के लिए एक साथ एक साथ एक्रॉफ़िल्ड दोनों को मिला दिया जा सकता है?

वेब के समाधान से एकत्रित समाधान "एक्ट्रोफिल्ड के साथ आईटेक्स्ट मर्ज दस्तावेज़"

आप क्या चाहते हैं पर निर्भर करता है, विभिन्न परिदृश्य संभव है, लेकिन किसी भी मामले में: आप इसे गलत कर रहे हैं दस्तावेज़ों को मर्ज करने के लिए PdfCopy या तो PdfCopy या PdfSmartCopy का उपयोग करना चाहिए।

निम्नलिखित वीडियो ट्यूटोरियल में विभिन्न परिदृश्यों को समझाया गया है।

आप iText सैंडबॉक्स में अधिकांश उदाहरण पा सकते हैं।

विभिन्न रूपों को विलय (अलग-अलग फ़ील्ड)

यदि आप उन्हें सपाट किए बिना विभिन्न रूपों को PdfCopy रखना चाहते हैं, तो आपको PdfCopy प्रयोग करना चाहिए जैसा कि मर्जफॉर्म उदाहरण में किया गया है:

 public void createPdf(String filename, PdfReader[] readers) throws IOException, DocumentException { Document document = new Document(); PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename)); copy.setMergeFields(); document.open(); for (PdfReader reader : readers) { copy.addDocument(reader); } document.close(); for (PdfReader reader : readers) { reader.close(); } } 

इस मामले में, readers PdfReader उदाहरणों की एक सरणी हैं, जिसमें विभिन्न रूपों (विभिन्न क्षेत्र के नाम के साथ) हैं, इसलिए हम PdfCopy उपयोग PdfCopy और हम यह सुनिश्चित करते हैं कि हम setMergeFields() विधि का उपयोग नहीं करना भूल जाते हैं, या फ़ील्ड नहीं होंगे कॉपी किया गया।

समान रूपों को विलय (समान फ़ील्ड वाले)

इस मामले में, हमें खेतों का नाम बदलने की जरूरत है, क्योंकि हम शायद अलग-अलग पृष्ठों पर अलग-अलग मान चाहते हैं। पीडीएफ में एक फ़ील्ड में केवल एक ही मान हो सकता है। यदि आप समान रूपों में विलय करते हैं, तो आपके पास एक ही क्षेत्र के कई दृश्यचित्रण होते हैं, लेकिन प्रत्येक दृश्य समान मूल्य दिखाएंगे (क्योंकि वास्तविकता में, केवल एक ही क्षेत्र है)।

आइए MergeForms2 उदाहरण पर एक नज़र डालें:

 public void manipulatePdf(String src, String dest) throws IOException, DocumentException { Document document = new Document(); PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest)); copy.setMergeFields(); document.open(); List<PdfReader> readers = new ArrayList<PdfReader>(); for (int i = 0; i < 3; ) { PdfReader reader = new PdfReader(renameFields(src, ++i)); readers.add(reader); copy.addDocument(reader); } document.close(); for (PdfReader reader : readers) { reader.close(); } } public byte[] renameFields(String src, int i) throws IOException, DocumentException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, baos); AcroFields form = stamper.getAcroFields(); Set<String> keys = new HashSet<String>(form.getFields().keySet()); for (String key : keys) { form.renameField(key, String.format("%s_%d", key, i)); } stamper.close(); reader.close(); return baos.toByteArray(); } 

जैसा कि आप देख सकते हैं, renameFields() विधि स्मृति में एक नया दस्तावेज़ बनाता है यह दस्तावेज PdfSmartCopy का उपयोग करते हुए अन्य दस्तावेजों के साथ विलय कर दिया गया है। यदि आप यहां PdfCopy का उपयोग PdfCopy , तो आपका दस्तावेज़ फूला जाएगा (जैसा कि हम जल्द ही पता करेंगे)।

चपटा रूपों को मिलाते हुए

FillFlattenMerge1 में , हम PdfStamper का उपयोग करते हुए फ़ॉर्म PdfStamper । नतीजा एक पीडीएफ फाइल है जिसे स्मृति में रखा गया है और यह PdfCopy का उपयोग करके मर्ज कर दिया गया है। हालांकि यह उदाहरण ठीक है अगर आप अलग-अलग रूपों में विलय कर लेंगे, यह वास्तव में एक उदाहरण है कि यह कैसे न करें (जैसा कि वीडियो ट्यूटोरियल में समझाया गया है)।

FillFlattenMerge2 दिखाता है कि समान रूपों को कैसे मर्ज करने के लिए जो भरे गए हैं और सही तरीके से चपटे हैं:

 public void manipulatePdf(String src, String dest) throws DocumentException, IOException { Document document = new Document(); PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest)); document.open(); ByteArrayOutputStream baos; PdfReader reader; PdfStamper stamper; AcroFields fields; StringTokenizer tokenizer; BufferedReader br = new BufferedReader(new FileReader(DATA)); String line = br.readLine(); while ((line = br.readLine()) != null) { // create a PDF in memory baos = new ByteArrayOutputStream(); reader = new PdfReader(SRC); stamper = new PdfStamper(reader, baos); fields = stamper.getAcroFields(); tokenizer = new StringTokenizer(line, ";"); fields.setField("name", tokenizer.nextToken()); fields.setField("abbr", tokenizer.nextToken()); fields.setField("capital", tokenizer.nextToken()); fields.setField("city", tokenizer.nextToken()); fields.setField("population", tokenizer.nextToken()); fields.setField("surface", tokenizer.nextToken()); fields.setField("timezone1", tokenizer.nextToken()); fields.setField("timezone2", tokenizer.nextToken()); fields.setField("dst", tokenizer.nextToken()); stamper.setFormFlattening(true); stamper.close(); reader.close(); // add the PDF to PdfCopy reader = new PdfReader(baos.toByteArray()); copy.addDocument(reader); reader.close(); } br.close(); document.close(); } 

ये तीन परिदृश्य हैं आपका सवाल किसी के लिए भी स्पष्ट नहीं है, लेकिन आप यह तय करने के लिए कि आपकी परिस्थितियों के लिए कौन सी स्थिति सबसे अच्छी है मेरा सुझाव है कि आप कोड से पहले जानने के लिए समय निकालें। वीडियो देखें, उदाहरणों का प्रयास करें, और अगर आपको अभी भी संदेह है, तो आप एक स्मार्ट प्रश्न पोस्ट करने में सक्षम होंगे।