2010-11-25 29 views
8

मैं iTextSharp से PdfSmartCopy उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं सी # में किसी भी प्रासंगिक उदाहरण नहीं मिल सकता है।iTextSharp PdfCopy उपयोग उदाहरण

विचार यह है कि मेरे पास पीडीएफ युक्त फॉर्म फ़ील्ड हैं और फ़ील्ड 700kb पीडीएफ दस्तावेज़ के आकार में जोड़ते हैं। फॉर्म फ़ील्ड के बिना मूल दस्तावेज़ 100kb था। किसी भी अन्य परेशानियों का स्वागत है, विशेष रूप से ओ लगातार पीडीएफ आकार को कम करें।

(मैं एडोब एक्रोबेट साथ उत्पन्न पीडीएफ अनुकूलित किया है, और यह 44kb करने के लिए इसे कम कर दिया। तो वहाँ एक गड़बड़ कहीं होना चाहिए।) वहाँ किसी भी तरह से पीडीएफ आकार को कम करने है?

संपादित करें: FormFlatenning मदद नहीं करता है। पीडीएफ टेम्पलेट फ़ाइल में केवल पाठ, रेखाएं और तालिकाओं, कोई छवियां नहीं हैं।

यहाँ pst.close() कॉल करने से पहले

 PdfReader reader = new PdfReader(GetTemplateBytes()); 
     pst = new PdfStamper(reader, Response.OutputStream); 
     var acroFields = pst.AcroFields; 

     pst.FormFlattening = true; 
     pst.FreeTextFlattening = true; 

     SetFieldsInternal(acroFields); 

     pst.Close(); 
+1

आपका प्रश्न शीर्षक का उल्लेख है PdfSmartCopy, लेकिन अपने स्रोत नहीं है। –

+1

मैं स्रोत कोड मांग रहा हूं, इसे उपलब्ध नहीं करा रहा हूं। –

उत्तर

7

आईटीक्स्टशर्प पीडीएफ कॉपी का उपयोग करने के लिए एक 2008 वीबी.Net उदाहरण है जो एकाधिक पीडीएफ फाइलों को 1 बहु पृष्ठ पीडीएफ फाइल में कॉपी करने के लिए है। यह अंतर्निहित लिंक को छोड़कर सबकुछ कॉपी करेगा। ऐसा लगता है कि सभी एनोटेशन पूरी तरह से कॉपी करते हैं, कम से कम मुझे वह नहीं मिला जो कॉपी नहीं किया गया था।

नोट: आपके पास आपके प्रोजेक्ट में संदर्भित ITextSharp होना चाहिए।

इनपुट पैरामीटर:

fileArray - पीडीएफ फाइलों की एक सरणी।

आउटपुट पीडीएफ - पूर्ण पथ और आउटपुट आउटपुट आउटपुट पीडीएफ दस्तावेज़।

Private Sub BuildMultiPagePDF(ByVal fileArray As String(), ByVal outPutPDF As String) 
    Try 

     Dim reader As iTextSharp.text.pdf.PdfReader = Nothing 
     Dim pageCount As Integer = 0 
     Dim currentPage As Integer = 0 
     Dim pdfDoc As iTextSharp.text.Document = Nothing 
     Dim writer As iTextSharp.text.pdf.PdfCopy = Nothing 
     Dim page As iTextSharp.text.pdf.PdfImportedPage = Nothing 
     Dim currentPDF As Integer = 0 

     If fileArray.Length > 0 Then 

      reader = New iTextSharp.text.pdf.PdfReader(fileArray(currentPDF)) 
      pdfDoc = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)) 
      writer = New iTextSharp.text.pdf.PdfCopy(pdfDoc, _ 
                New IO.FileStream(outPutPDF, _ 
                IO.FileMode.OpenOrCreate, _ 
                IO.FileAccess.Write)) 

      pageCount = reader.NumberOfPages 

      While currentPDF < fileArray.Length 
       pdfDoc.Open() 

       While currentPage < pageCount 
        currentPage += 1 
        pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(currentPage)) 
        pdfDoc.NewPage() 
        page = writer.GetImportedPage(reader, currentPage) 
        writer.AddPage(page) 
       End While 

       currentPDF += 1 
       If currentPDF < fileArray.Length Then 
        reader = New iTextSharp.text.pdf.PdfReader(fileArray(currentPDF)) 
        pageCount = reader.NumberOfPages 
        currentPage = 0 
       End If 
      End While 

      pdfDoc.Close() 
     Else 
      MessageBox.Show("The input file array is empty. Processing terminated.", _ 
          "INVALID FILE LIST", _ 
          MessageBoxButtons.OK, MessageBoxIcon.Error) 

     End If 

    Catch ex As Exception 
     MessageBox.Show(ex.message) 
    End Try 
End Sub 
+0

वास्तव में मैं iTextSharp का उपयोग कर पीडीएफ फ़ाइल से डेटा निकालना चाहता हूं, फ़ाइल में तालिका प्रारूप में डेटा है, मुझे डेटा निकालने की आवश्यकता है कृपया मुझे एना उदाहरण दें –

1

कॉल reader.removeUnusedObjects() मेरे कोड का टुकड़ा है ... सपाट की कोई आवश्यकता नहीं।

चीजों को कम करने के लिए आप थोड़ा और pst.setFullCompression() कर सकते हैं। YMMV।

संपादित करें: जहां तक ​​उदाहरण चलते हैं, मैं अनुशंसा करता हूं कि IText में एक्शन, द्वितीय संस्करण। पीडीएफसीपी & पीडीएफएसमार्टकॉपी सहित सभी प्रकार की चीजों के कई उदाहरण। पुस्तक से सभी कोड नमूने available on line हैं।

यदि आप पुस्तक खरीदते हैं तो मैं कोई पैसा नहीं कमाता, लेकिन कई ऑनलाइन इंटरैक्शन से लेखक को जानता हूं, और उसे एक दोस्त मानता हूं।

+0

उत्तर के लिए धन्यवाद, मैं एडोब एक्रोबैट की बजाय ओपनऑफिस का उपयोग करके टेम्पलेट बनाकर एक छोटी पीडीएफ फ़ाइल बनाने में कामयाब रहा। 80 केबी बनाम 800 केबी। –

0

using iTextSharp.text; 
 
using iTextSharp.text.pdf; 
 

 
public void pdfcopyfile() 
 
    { 
 
     string pdfTemplatePath = @"D:\1.pdf"; 
 
     string outputPdfPath = @"D:\44.pdf"; 
 
     iTextSharp.text.pdf.PdfReader reader = null; 
 
     int pageCount = 0; 
 
     int currentPage = 0; 
 
     Document pdfDoc = null; 
 
     PdfCopy writer = null; 
 
     PdfImportedPage page = null; 
 
     reader = new PdfReader(pdfTemplatePath); 
 
     pdfDoc = new Document(reader.GetPageSizeWithRotation(1)); 
 
     writer = new PdfCopy(pdfDoc, new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create)); 
 
     pageCount = reader.NumberOfPages; 
 
     pdfDoc.Open(); 
 
     while (currentPage < pageCount) 
 
     { 
 
      currentPage += 1; 
 
      pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(currentPage)); 
 
      pdfDoc.NewPage(); 
 
      page = writer.GetImportedPage(reader, currentPage); 
 
      writer.AddPage(page); 
 
     } 
 
     reader = new PdfReader(pdfTemplatePath); 
 
     pageCount = reader.NumberOfPages; 
 
     currentPage = 0; 
 
     pdfDoc.Close(); 
 
    }