আমি কীভাবে ওয়ার্ড ফাইলগুলিকে পিডিএফ প্রোগ্রামে রূপান্তর করব? [বন্ধ]


221

আমি বেশ কয়েকটি ওপেন সোর্স / ফ্রিওয়্যার প্রোগ্রাম পেয়েছি যা আপনাকে .doc ফাইলগুলিকে .pdf ফাইলগুলিতে রূপান্তর করতে দেয় তবে এসডিকে সংযুক্ত না করে সেগুলি সমস্ত অ্যাপ্লিকেশন / প্রিন্টার ড্রাইভারের বিভিন্ন।

আমি বেশ কয়েকটি প্রোগ্রাম পেয়েছি যার একটি এসডিকে আপনাকে .ডোক ফাইলগুলিকে .pdf ফাইলগুলিতে রূপান্তর করতে দেয়, তবে সেগুলি মালিকানাধীন টাইপের, $ 2000 লাইসেন্স বা আশেপাশের জায়গা।

C # বা VB.NET ব্যবহার করে কেউ কি আমার সমস্যার কোনও ক্লিন, সাশ্রয়ী মূল্যের (অগ্রাধিকার মুক্ত) প্রোগ্রাম্যাটিক সমাধান সম্পর্কে জানেন?

ধন্যবাদ!


1
আপনার পছন্দের ভাষার জন্য প্যান্ডোকের বাইন্ডিং রয়েছে কিনা তা পরীক্ষা করুন । কমান্ড লাইন ইন্টারফেসটি pandoc manual.docx -o manual.pdf
কর্নেল প্যানিক

এছাড়াও, জেমবক্সডকুমেন্ট এসডিকে চেক করুন । এটির একটি নিখরচায় সংস্করণ এবং একটি সস্তা সংস্করণ রয়েছে। ওয়ার্ড ফাইলগুলিকে পিডিএফে রূপান্তর করতে এটি কোনও প্রিন্টার ড্রাইভার বা এমএস অফিস ব্যবহার করে না।
হার্টজোগথ

এই রূপান্তরটি করতে আপনি ডক্সএক্সপিডিএফ ব্যবহার করতে পারেন: github.com/AlJohri/docx2pdf
আল

উত্তর:


204

লুপের পরিবর্তে ফোরচ লুপ ব্যবহার করুন - এটি আমার সমস্যার সমাধান করে।

int j = 0;
foreach (Microsoft.Office.Interop.Word.Page p in pane.Pages)
{
    var bits = p.EnhMetaFileBits;
    var target = path1 +j.ToString()+  "_image.doc";
    try
    {
        using (var ms = new MemoryStream((byte[])(bits)))
        {
            var image = System.Drawing.Image.FromStream(ms);
            var pngTarget = Path.ChangeExtension(target, "png");
            image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
        }
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);  
    }
    j++;
}

এখানে আমার জন্য কাজ করা একটি প্রোগ্রামের একটি পরিবর্তন রয়েছে is এটি পিডিএফ হিসাবে অ্যাড-ইন হিসাবে ইনস্টল হিসাবে ওয়ার্ড 2007 ব্যবহার করে । এটি .ডোক ফাইলগুলির জন্য একটি ডিরেক্টরি অনুসন্ধান করে, সেগুলিকে ওয়ার্ডে খোলে এবং তারপরে পিডিএফ হিসাবে সেভ করে। দ্রষ্টব্য যে আপনাকে মাইক্রোসফ্ট.অফিস.ইনটার্প.ওয়ার্ডের জন্য একটি রেফারেন্স যুক্ত করতে হবে the

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

...

// Create a new Microsoft Word application object
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

// C# doesn't have optional arguments so we'll need a dummy value
object oMissing = System.Reflection.Missing.Value;

// Get list of Word files in specified directory
DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\folder");
FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

word.Visible = false;
word.ScreenUpdating = false;

foreach (FileInfo wordFile in wordFiles)
{
    // Cast as Object for word Open method
    Object filename = (Object)wordFile.FullName;

    // Use the dummy value as a placeholder for optional arguments
    Document doc = word.Documents.Open(ref filename, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    doc.Activate();

    object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
    object fileFormat = WdSaveFormat.wdFormatPDF;

    // Save document into PDF Format
    doc.SaveAs(ref outputFileName,
        ref fileFormat, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Close the Word document, but leave the Word application open.
    // doc has to be cast to type _Document so that it will find the
    // correct Close method.                
    object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
    ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
    doc = null;
}

// word has to be cast to type _Application so that it will find
// the correct Quit method.
((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
word = null;

3
ধন্যবাদ! আমি ওয়ার্ড অটোমেশনের চেয়ে দ্রুত যদি যাইহোক, তবে এপপসের সাথেই যেতে পারি। তবে আমি যদি কিছুটা স্বচ্ছলতা সহ্য করতে পারি, তবে আমি আপনার সমাধানটি ব্যবহার করব। আবার ধন্যবাদ!
শওল বেহর

4
হ্যাঁ, এটি দ্রুততম নয় তবে দামটি হারানো শক্ত। :-) আমি সাহায্য করতে পেরে আনন্দিত.
এরিক নেস

10
অফিস 2007 এসপি 2 এর সাথে আপনার আর পিডিএফ ডাউনলোড হিসাবে সংরক্ষণের প্রয়োজন নেই। এক্সেল এবং পাওয়ারপয়েন্টের জন্য আমি এই কৌশলটি সফলভাবে ব্যবহার করেছি।
রিচার্ডড

5
আপনি কি ওয়েব অ্যাপ্লিকেশন সহ কোনও সার্ভারে এই পদ্ধতিটি ব্যবহার করেছেন? আমি প্রচুর ইস্যু পেয়ে যাচ্ছি যার সুপারিশ এমএস দ্বারা করা হয়নি। সমর্থন. microsoft.com/default.aspx?scid=kb ;EN-US ;q257757#kb2 আমি শুনেছি এএসপোজ দুর্দান্ত তবে এটি বেশ প্রিয়।
প্রাবু

6
উম ... যদি শব্দটি ইনস্টল না করা হয় তবে আমার মনে হয় আন্তঃ সমাবেশকে প্যাকেজিং করা আপনার উদ্বেগের মধ্যে সবচেয়ে কম হবে। এই কোডটি ইনস্টল করা দরকার word
BrainSlugs83

35

এটি সংক্ষেপে vb.net ব্যবহারকারীদের জন্য, নিখরচায় বিকল্প (অবশ্যই অফিস ইনস্টলড থাকতে হবে):

মাইক্রোসফ্ট অফিস সমিতিগুলি ডাউনলোড:

ভিবি.এনইটি উদাহরণ:

        Dim word As Application = New Application()
        Dim doc As Document = word.Documents.Open("c:\document.docx")
        doc.Activate()
        doc.SaveAs2("c:\document.pdf", WdSaveFormat.wdFormatPDF)
        doc.Close()

3
এখনও ২০১৫-এ কাজ করে Office অফিস 2013 এর সাথে আপনার আলাদাভাবে পিআইএ ডাউনলোড করার দরকার নেই।
অ্যাডাম অ্যান্ডারসন

3
এবং বুম যদি এটি একটি মেসেজবক্স খোলে এবং কিছু জিজ্ঞাসা করে - উদাহরণস্বরূপ একটি ওয়েব অ্যাপ্লিকেশনটিতে ... বা একই সাথে 2 টি নথিও দেয় ...
স্টেফান স্টেইগার

একটি ফ্রিমিয়াম বিকল্প (নোডেজ এবং এজ.জেএস, বা জাভাস্ক্রিপ্ট.এনইটের মাধ্যমে) হল এনপিজেজেএস / প্যাকেজ / @ নেটিভডোকিউমেন্টস / ডকক্স- ওয়াজম ( শব্দের দরকার নেই)
জেসনপ্লিটেক্সট

14

পিডিএফক্রিটরের একটি সিওএম উপাদান রয়েছে ,। নেট বা ভিবিএস স্ক্রিপ্ট (ডাউনলোডের সাথে অন্তর্ভুক্ত নমুনা) থেকে কলযোগ্য।

তবে, এটি আমার কাছে মনে হয় যে একটি প্রিন্টার আপনার প্রয়োজন ঠিক তেমন - কেবল ওয়ার্ডের অটোমেশনের সাথে এটি মিশ্রিত করুন এবং আপনার ভাল হওয়া উচিত।


এই সিওএম উপাদানটি কোথায়? এবং "মিক" এর অর্থ কী? "মিক্স" বলতে কি বোঝানো হয়েছিল?
শৈল বেহর

সিওএম উপাদানটি নমুনার পাশাপাশি ডাউনলোডে অন্তর্ভুক্ত রয়েছে। এবং হ্যাঁ, এটি "মিশ্রণ" হওয়ার কথা ছিল।
মার্ক বন্ধনী

4
এফওয়াইআই - আপনি যদি এই রুটে যান, পিডিএফক্রিটর ইনস্টলারে ম্যালওয়ারকে বান্ডিল করে। এই PDFCreator সঙ্গে একটি চলমান ইস্যু 2009. হয়েছে
ফিল Gorley

2
@ ফিলগর্লি ম্যালওয়ার? এবং এই উত্তরটি +8 ...
Mzn

@ এমজেএন - এফডাব্লুআইডাব্লু, মনোযোগ দিচ্ছে এবং অ্যাডন ইনস্টলগুলি আনচেক করা সর্বদা আমার পক্ষে কাজ করে। আমি এটিকে জাভা ইনস্টলারটিতে ওরাকল বান্ডিলিং ক্রাপের চেয়ে আলাদা হিসাবে দেখছি না; এটি বিরক্তিকর, তবে আমার জন্য সফটওয়্যারটি এড়িয়ে চলা উচিত নয় (হ্যাঁ, ঠিক আছে, পিডিএফক্রিটরের অ্যাডওয়্যার সম্ভবত আজকাল ওরাকল যা কিছু চাপ দিচ্ছে তার চেয়ে কম কার্যকর এবং আরও অনুপ্রবেশকারী ... আমি এখনও তাদের মধ্যে একটিও চাই না)।
মার্ক ব্র্যাকেট

12

কেবলমাত্র আমি যুক্ত করতে চেয়েছিলাম যে আমি মাইক্রোসফ্ট.আইনটারপ লাইব্রেরি ব্যবহার করেছি, বিশেষত এক্সপোর্টএফিক্সড ফর্ম্যাট ফাংশন যা আমি এই থ্রেডটিতে ব্যবহার করতে দেখিনি।

using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Office.Core;

Application app;

public string CreatePDF(string path, string exportDir)
{
    Application app = new Application();
    app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
    app.Visible = true;

    var objPresSet = app.Documents;
    var objPres = objPresSet.Open(path, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);

    var pdfFileName = Path.ChangeExtension(path, ".pdf");
    var pdfPath = Path.Combine(exportDir, pdfFileName);

    try
    {
        objPres.ExportAsFixedFormat(
            pdfPath,
            WdExportFormat.wdExportFormatPDF,
            false,
            WdExportOptimizeFor.wdExportOptimizeForPrint,
            WdExportRange.wdExportAllDocument
        );
    }
    catch
    {
        pdfPath = null;
    }
    finally
    {
        objPres.Close();
    }
    return pdfPath;
}

7
তাদের জন্য কেবল একটি নোট যা জানেন না যে মাইক্রোসফ্ট ইন্টারপ লাইব্রেরিগুলি ব্যবহার করার জন্য আপনার মেশিনে অফিস ইনস্টল করা দরকার।
স্যাম রুয়েবি

নিস! আমি অবশেষে ব্লকটিতে app.Visible = false;কল স্থাপন এবং যুক্ত করার পরামর্শ দিচ্ছি app.Quit();
ড্যান কর্ন

7

9
ধন্যবাদ, তবে সমস্ত পরামর্শগুলি আমি উপরে বর্ণিত দুটি বিভাগের আওতায় পড়ে: হয় প্রোগ্রামেটিক নয়, বা ব্যয়বহুল। আমার বিশেষত .dd থেকে .pdf প্রোগ্রামগতভাবে প্রয়োজন।
শৈল বেহর

5

আমি যখন পিডিএফে রূপান্তর করতে 10000 শব্দের ফাইল সহ কেউ আমাকে ডাম্প করে তখন আমি ওয়ার্ড টু পিডিএফ ব্যথার মধ্যে দিয়ে যাই। এখন আমি এটি সি # তে করেছি এবং ওয়ার্ড ইন্টারওপ ব্যবহার করেছি তবে আমি পিসিটি মোটেও ব্যবহার করার চেষ্টা করলে এটি ধীর এবং ক্র্যাশ হয়ে গিয়েছিল .. খুব হতাশাবোধজনক।

এটি আমাকে অনুসন্ধানের দিকে নিয়ে যায় যে আমি ইন্টারপস এবং তাদের আলস্যতা ডাম্প করতে পারি ..... এক্সেলের জন্য আমি ব্যবহার করি (ইপিপিএলএস) এবং তারপরে আমি আবিষ্কার করেছি যে আপনি স্পায়ার নামে একটি নিখরচায় সরঞ্জাম পেতে পারেন যা পিডিএফে রূপান্তর করতে দেয় ... সীমাবদ্ধতা সহ!

http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE


এর জন্য ধন্যবাদ - ইন্টারপ ব্যবহার না করে দুর্দান্ত সমাধান। পিডিএফ কনভার্টারে একটি ফ্রি ডক্সেক্স খুঁজে পাওয়া এত কঠিন কেন?
এমবিডিভিস

আমার এটির জন্য উচ্চ আশা ছিল তবে ফ্রি সংস্করণটি পিডিএফ আউটপুটের 3 পৃষ্ঠায় সীমাবদ্ধ। আপনার সীমাহীন মোতায়েনের প্রয়োজন হলে পুরো সংস্করণটি খুব ব্যয়বহুল।
গ্রাইন্ডার 22

গ্রাইন্ডার 22 জেমবক্স. ডকুমেন্টে আকারের সীমাবদ্ধতা এবং অর্থ প্রদানের সংস্করণ সহ একটি বিনামূল্যে সংস্করণ রয়েছে। তবে এতে রয়্যালটি ফ্রি মোতায়েন অন্তর্ভুক্ত রয়েছে যাতে আপনি অতিরিক্ত ব্যয় ছাড়াই সীমাহীন সংখ্যক প্রকল্প নির্মাণ ও প্রকাশ করতে সক্ষম হন।
হার্টজোগথ

3

Microsoft.Office.Interop.Wordপিডিএফে ডাব্লু ওয়ার্ডকে রূপান্তর করতে সহজ কোড এবং সমাধান

using Word = Microsoft.Office.Interop.Word;

private void convertDOCtoPDF()
{

  object misValue = System.Reflection.Missing.Value;
  String  PATH_APP_PDF = @"c:\..\MY_WORD_DOCUMENT.pdf"

  var WORD = new Word.Application();

  Word.Document doc   = WORD.Documents.Open(@"c:\..\MY_WORD_DOCUMENT.docx");
  doc.Activate();

  doc.SaveAs2(@PATH_APP_PDF, Word.WdSaveFormat.wdFormatPDF, misValue, misValue, misValue, 
  misValue, misValue, misValue, misValue, misValue, misValue, misValue);

  doc.Close();
  WORD.Quit();


  releaseObject(doc);
  releaseObject(WORD);

}

মেমরি ছেড়ে দেওয়ার জন্য এই পদ্ধতিটি যুক্ত করুন:

private void releaseObject(object obj)
{
  try
  {
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
      obj = null;
  }
  catch (Exception ex)
  {
      //TODO
  }
  finally
  {
     GC.Collect();
  }
}

জিসি.কলেক্ট কল করা দরকার? পরের স্বয়ংক্রিয় জিসি থেকে মুক্ত করার জন্য এটির সাথে সম্পর্কিত কেবল মেমরির অংশটি চিহ্নিত করার আলাদা উপায় নেই?
Preza8

2

এখানে কিছু সম্পর্কিত তথ্য বলে মনে হচ্ছে:

এমএস ওয়ার্ড ডকুমেন্টসকে এএসপি.নেটে পিডিএফে রূপান্তর করা

এছাড়াও, অফিস 2007 এর পিডিএফ কার্যকারিতা প্রকাশ করার পরে, আমার ধারণা আপনি ওয়ার্ড 2007 এ * .DOC ফাইলটি খোলার জন্য অফিস অটোমেশন ব্যবহার করতে পারেন এবং পিডিএফ হিসাবে সংরক্ষণ করুন। আমি অফিস অটোমেশন সম্পর্কে খুব আগ্রহী নই কারণ এটি ধীর এবং ঝুলতে ঝুঁকিপূর্ণ, তবে কেবল এটি বাইরে ফেলে দিচ্ছি ...


অ্যাসপোজ কাজ করতে পারে, তবে এটি অত্যন্ত ব্যয়বহুল।
শৈল বেহর

1

মাইক্রোসফ্ট পিডিএফ অ্যাড-ইন শব্দের জন্য আপাতত সেরা সমাধান বলে মনে হয় তবে আপনার বিবেচনায় নেওয়া উচিত যে এটি সমস্ত শব্দ নথি পিডিএফকে সঠিকভাবে রূপান্তরিত করে না এবং কিছু ক্ষেত্রে আপনি শব্দ এবং আউটপুট পিডিএফের মধ্যে বিশাল পার্থক্য দেখতে পাবেন। দুর্ভাগ্যক্রমে আমি এমন কোনও এপিআই খুঁজে পাইনি যা সমস্ত শব্দ নথিকে সঠিকভাবে রূপান্তর করবে। রূপান্তরটি 100% সঠিক ছিল কিনা তা নিশ্চিত করার একমাত্র সমাধানটি হ'ল প্রিন্টার ড্রাইভারের মাধ্যমে দস্তাবেজগুলি রূপান্তরিত করে। নেতিবাচক দিকটি হ'ল নথিগুলি একের পর এক সারিবদ্ধ এবং রূপান্তরিত হয় তবে আপনি নিশ্চিত হতে পারেন যে ফলাফল পিডিএফ হ'ল ডকুমেন্ট বিন্যাসের মতোই। আমি ব্যক্তিগতভাবে ইউডিসি (ইউনিভার্সাল ডকুমেন্ট রূপান্তরকারী) ব্যবহার করা পছন্দ করেছিলাম এবং সার্ভারে ফক্সিট রিডার (ফ্রি সংস্করণ) ইনস্টল করেও "প্রসেস" শুরু করে এবং এর ক্রিয়া সম্পত্তিটি "মুদ্রণ" এ সেট করে নথিগুলি মুদ্রণ করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.