আমি কিভাবে একটি ওয়েব পরিষেবা থেকে একটি HTML ডকুমেন্ট প্রিন্ট করবেন?

আমি একটি C# ওয়েব পরিষেবা থেকে এইচটিএমএল প্রিন্ট করতে চান। ওয়েব ব্রাউজার নিয়ন্ত্রণ ওভারকিল, এবং পরিষেবা পরিবেশে ভাল কাজ করে না, এটি খুব শক্ত নিরাপত্তা সীমাবদ্ধতার সাথে এটিতে ভাল কাজ করে না। কোনও ধরনের ফ্রি .NET লাইব্রেরি আছে যা একটি মৌলিক HTML পৃষ্ঠার মুদ্রণ সমর্থন করবে? এখানে আমি এখনও পর্যন্ত কোড, যা সঠিকভাবে চালানো হয় না।

public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}

এই UI- টাইপ থ্রেড থেকে বলা হয় যখন জরিমানা কাজ করে, কিন্তু একটি সার্ভিস-টাইপ থ্রেড থেকে বলা হয় যখন কিছুই না। পরিবর্তন মুদ্রণ করুন() থেকে ShowPrint PreviewDialog() নিম্নোক্ত IE স্ক্রিপ্ট ত্রুটি উৎপন্ন করে:

Error: 'dialogArguments.___IE_PrintType' is null or not an object
URL: res://ieframe.dll/preview.dlg

এবং একটি ছোট খালি মুদ্রণ পূর্বরূপ ডায়ালগ আবির্ভূত হবে।

0
যোগ সম্পাদিত
মতামত: 1
@ এমআরইনোওয়াও শেষ পর্যন্ত আমি তাদের চেষ্টা করেছিলাম। যদি আপনার কোন কাজ থাকে তবে আমাদের জানাবেন।
যোগ লেখক Chris Marasti-Georg, উৎস
ধন্যবাদ সেরা উত্তর নির্বাচন করুন, ধন্যবাদ।
যোগ লেখক mruanova, উৎস

6 উত্তর

আমি জানি যে ভিসুয়াল স্টুডিও নিজেই (কমপক্ষে ২003 সংস্করণে) IE DLL সরাসরি "ডিজাইন ভিউ" রেন্ডার করতে উল্লেখ করে।

এটা যে মধ্যে মূল্যবান হতে পারে।

অন্যথায়, আমি ওয়েব ব্রাউজার নিয়ন্ত্রণ অতিক্রম কিছু মনে করতে পারেন না।

0
যোগ

আপনি নিম্নলিখিত কমান্ড ব্যবহার করে মুদ্রণ করতে পারেন:

যে rundll32.exe   % Windir% \ system32 \ mshtml.dll, PrintHTML   "% 1"?

যেখানে% 1 মুদ্রণ করার জন্য HTML ফাইলের ফাইল পাথ।

আপনি মেমরি থেকে মুদ্রণ করতে হবে না (বা একটি temp ফাইলের মধ্যে ডিস্ক লিখতে সামর্থ) আপনি ব্যবহার করতে পারেন:

using (Process printProcess = new Process())
{
    string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
    printProcess.StartInfo.FileName = systemPath + @"\rundll32.exe";
    printProcess.StartInfo.Arguments = systemPath + @"\mshtml.dll,PrintHTML """ + fileToPrint + @"""";
    printProcess.Start();
}

N.B. এটি শুধুমাত্র উইন্ডোজ 2000 এ কাজ করে এবং উপরে আমি মনে করি।

0
যোগ
গ্রেট উত্তর - এটি গ্রহণ করা যাচ্ছে চিহ্নিত, এবং আমার পরীক্ষা দৌড়ে। মনে হয় যে dll এখনও প্রিন্ট ডায়ালগ আপ পপ আপ, এবং এটি হিসাবে একটি অপ্রয়োজনীয় উইন্ডোজ সার্ভিস হিসাবে চালানোর জন্য, আমরা একরকম বাইপাস প্রয়োজন। আমি গুগল খুব ক্লান্তিত করেছি, এবং আমি আমার wits শেষ করছি।
যোগ লেখক Chris Marasti-Georg, উৎস
দুর্ভাগ্যক্রমে প্রিন্টার ডায়ালগ প্রদর্শিত হবে আমি উইন্ডোজ 7 x64 পরীক্ষা করেছি
যোগ লেখক LukTar, উৎস

সহজ! আপনার সমস্যা দুটি সহজ অংশ মধ্যে বিভক্ত:

  1. পিডিএফ এ HTML রেন্ডার করুন
  2. পিডিএফ মুদ্রণ করুন ( সুমাত্রা পিডিএফ ) </লি>
  • -print-to-default $file.pdf prints a PDF file on a default printer
  • -print-to $printer_name $file.pdf prints a PDF on a given printer
0
যোগ
সর্বশেষ আমি চেক, অংশ 2 (অ্যাডোবি সঙ্গে কমান্ড লাইন মাধ্যমে মুদ্রণ) একটি পরিষেবাতে কাজ করে না - এটি ব্যবহারকারী মিথস্ক্রিয়া প্রয়োজন।
যোগ লেখক Chris Marasti-Georg, উৎস
সুমাত্রা পিডিএফ চেষ্টা করে দেখুন এটি অনেক দ্রুত blog.kowalczyk.info/software/ sumatrapdf / করছে & hellip;
যোগ লেখক Colonel Panic, উৎস

আমি নির্দিষ্ট সরঞ্জাম জানি না, কিন্তু কিছু ইউটিলিটি আছে যে রেকর্ড / রিপ্লে ক্লিকে অন্য কথায়, আপনি মুদ্রণ সংলাপে "ক্লিক করুন" স্বয়ংক্রিয় করতে পারেন। (আমি জানি এটি একটি হ্যাক, কিন্তু যখন অন্য সব ব্যর্থ হয় ...)

0
যোগ

হয়তো এই সাহায্য করবে। http://www.codeproject.com/KB/printing/printhml.aspx এছাড়াও আপনি কি ব্রাউজার থেকে ব্রাউজার নিয়ন্ত্রণ অ্যাক্সেস করার চেষ্টা করছেন তা নিশ্চিত না, কিন্তু STA এর প্রয়োজন

দ্রষ্টব্য - লিঙ্কটিতে উল্লেখিত প্রকল্প আপনাকে একটি পৃষ্ঠায় নেভিগেট করতে এবং মুদ্রণ ডায়ালগ দেখানো ছাড়াই মুদ্রণ করতে দেয়।

0
যোগ

আপনি যদি এটি বাজেটে (~ $ 3000) পেয়ে থাকেন তবে প্রিন্সএক্সএলএমএল দেখুন।

এটি এইচটিএমএলটি একটি পিডিএফ, ফাংশনটি একটি সার্ভিস এনভায়রনমেন্টে ভালভাবে উপস্থাপিত করবে এবং উন্নত বৈশিষ্ট্যগুলি সমর্থন করবে যেমন টেবিল সেলের মাঝখানে কোন পৃষ্ঠা ভাঙ্গানো না (যা অনেক ব্রাউজার বর্তমানে সমর্থন করে না)।

0
যোগ