2012-10-18 15 views
5

मैं एक पुस्तकालय या कमांड लाइन प्रोग्राम की तलाश में हूं जो पीडीएफ को संपीड़ित कर सकता है।पीडीएफ हानिकारक संपीड़न

संपीड़न की गति और फ़ाइल का आकार बहुत महत्वपूर्ण है।

पीडीएफ बहुत बड़ी प्रिंट-गुणवत्ता वाली छवियों से भरे हुए हैं।

एडोब एक्रोबैट उच्च गुणवत्ता वाले, तेज़ संपीड़न करता है लेकिन प्रोग्रामेटिक इंटरफेस के माध्यम से "कम आकार पीडीएफ" को सहेजने की अनुमति नहीं देता है।

घोस्टस्क्रिप्ट उच्च गुणवत्ता वाले संपीड़न को बहुत लंबा (मिनट) लेता है।

+2

यह अब तक का सबसे अच्छा समाधान है: 'gswin64c.exe -dQUIET -dBATCH -dNOPAUSE -dNOGC -dPDFSETTINGS =/screen -sDEVICE = pdfwrite -sOutputFile = compressed.pdf input.pdf'। 126 एमबी फ़ाइल को 3.2 एमबी में बदलने में लगभग 20 सेकंड लगते हैं। – user1359680

+0

धन्यवाद उपयोगकर्ता 1359680। यह सरल और बढ़िया है, केवल मेरे मामले में एक 'gswin32c.exe' पहले से ही मेरे सिस्टम पर पाया गया था। मैं इसे एक .cmd एक-पंक्ति स्क्रिप्ट में लपेटूंगा और लागू करने के लिए राइट-क्लिक करने के लिए अपने SendTo फ़ोल्डर में रखूंगा। – Marcos

+0

अपडेट: मैं $ 99 के लिए नेविया कंप्रेस पीडीएफ के साथ गया था। यह पाठ के साथ फोंट या गड़बड़ को संपीड़ित नहीं करता है। घोस्टस्क्रिप्ट कभी-कभी खोजने योग्य टेक्स्ट परत से अक्षरों को हटा देता है। एक और समाधान आईडीआर सॉल्यूशंस 'jpdf2html.jar का उपयोग करके पीडीएफ को एचटीएमएल 5 में परिवर्तित करना है, लेकिन यह लाइसेंस के लिए महंगा है ($ 2500) – user1359680

उत्तर

1

यदि कोई वाणिज्यिक लाइब्रेरी एक विकल्प है, तो आप Amyuni PDF Creator को आज़मा सकते हैं। .NET संस्करण (सी #/वीबी.Net आदि) और एक ActiveX संस्करण (सी ++/डेल्फी/वीबी/PHP आदि के लिए) है।

आप प्रत्येक पृष्ठ की सभी वस्तुओं के माध्यम से पुनरावृत्त कर सकते हैं, छवियों को चुन सकते हैं, और उनके आकार को कम कर सकते हैं। आपके पास कई संभावनाएं हैं:

  1. कम संपीड़न दर निर्धारित करना।
  2. डाउन-नमूनाकरण (छवि को निकालने, इसे रिज़ॉल्यूशन पर फिर से आकार देने, और इसे अपनी फ़ाइल में वापस डालने)
  3. पिछले दो को जोड़ना।

यहाँ कोड,, पहला विकल्प के लिए दिखाई देंगे कैसे सी # में उपयोग कर रहा है Amyuni पीडीएफ निर्माता नेट:

//open a pdf document 
document.Open("c:\\temp\\myfile.pdf",""); 
IacPage page1 = document.GetPage (1); 
Amyuni.PDFCreator.IacAttribute attribute = page1.AttributeByName ("Objects"); 
// listobj is an array list of graphic objects 
System.Collections.ArrayList listobj = (System.Collections.ArrayList) attribute.Value; 
foreach (object pdfObj in listobj) 
{ 
    if ((IacObjectType)pdfObj.AttributeByName("ObjectType").Value == IacObjectType.acObjectTypePicture) 
    { 
     if ((IacImageCompressionConstants)pdfObj.AttributeByName("Compression").Value == IacImageCompressionConstants.acCompressionJPegMedium) 
      pdfObj.AttributeByName("Compression").Value = IacImageCompressionConstants.acCompressionJPegLow; 

     if ((IacImageCompressionConstants)pdfObj.AttributeByName("Compression").Value == IacImageCompressionConstants.acCompressionJPegHigh) 
      pdfObj.AttributeByName("Compression").Value = IacImageCompressionConstants.acCompressionJPegMedium; 
     // (...) 
    } 
} 

सामान्य अस्वीकरण लागू होता है

0

आप का प्रयास करना चाहें अपने काम के लिए Docotic.Pdf library

यहाँ एक कोड है कि चौड़ाई या अधिक से अधिक या 256 स्केल की गई छवियां के बराबर ऊंचाई है कि सभी छवियों को मापता है तो गुणवत्ता 65.

public static void RecompressToJpeg(string path, string outputPath) 
{ 
    using (PdfDocument doc = new PdfDocument(path)) 
    { 
     foreach (PdfImage image in doc.Images) 
     { 
      // image that is used as mask or image with attached mask are 
      // not good candidates for recompression 
      if (!image.IsMask && image.Mask == null && (image.Width >= 256 || image.Height >= 256)) 
       image.Scale(0.5, PdfImageCompression.Jpeg, 65); 
     } 

     doc.Save(outputPath); 
    } 
} 

तुम भी बस छवियों फिर से कंप्रेस कर सकता करने के लिए सेट के साथ JPEG संपीड़न का उपयोग कर इनकोड है RecompressWithJpeg विधियों (या अन्य RecompressXXX विधियों में से एक) का उपयोग करके अपने आकार बदलने के बिना।

और छवियों को ResizeTo विधियों में से किसी एक का उपयोग करके निर्दिष्ट चौड़ाई और ऊंचाई पर आकार बदल दिया जा सकता है। कृपया ध्यान दें कि बाद के मामले में आपको पहलू अनुपात को ध्यान में रखना होगा।

अस्वीकरण: मैं पुस्तकालय के विक्रेता के लिए काम करता हूं।

संबंधित मुद्दे