Ошибка во время выполнения "Не удалось загрузить файл или сборку" Select.HtmlToPdf, Version=2.4.0.1"в SharePoint 2013. Использование сторонней библиотеки Select.HtmlToPdf

Моя ошибка:

Не удалось загрузить файл или сборку 'Select.HtmlToPdf, версия =2.4.0.1, Culture= нейтральный, PublicKeyToken=e0ae9f6e27a97018' или одну из ее зависимостей. Система не может найти указанный файл.

Итак, я создал свою веб-часть и установил пакет Select.HtmlToPdf с помощью этой команды "PM> Install-Package Select.HtmlToPdf" ( https://www.nuget.org/packages/Select.HtmlToPdf/).

Я не получаю ошибки при развертывании, только во время выполнения. Хотя все выглядит хорошо и на месте для меня, но эта ошибка просто не пойдет. Я что-то делаю не так или здесь что-то упускаю?

Изменить: эта ошибка появляется только при попытке запустить Select.HtmlToPdf в SharePoint 2013 (Visual WebPart)

Мой код:

using SelectPdf;
using System;
using System.Data;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace downloadPDF.VisualWebPart1
{
    public partial class VisualWebPart1UserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetRecord();
            }
        }
        private bool startConversion = false;
        private void GetRecord()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Country",typeof(string)) });
            dt.Rows.Add(1, "John Hammond", "United States");
            dt.Rows.Add(2, "Mudassar Khan", "India");
            dt.Rows.Add(3, "Suzanne Mathews", "France");
            dt.Rows.Add(4, "Robert Schidner", "Russia");
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            startConversion = true;
        }
        protected override void Render(HtmlTextWriter writer)
        {
            if (startConversion)
            {
                // get html of the page
                TextWriter myWriter = new StringWriter();
                HtmlTextWriter htmlWriter = new HtmlTextWriter(myWriter);
                base.Render(htmlWriter);

                // instantiate a html to pdf converter object
                HtmlToPdf converter = new HtmlToPdf();

                // create a new pdf document converting the html string of the page
                PdfDocument doc = converter.ConvertHtmlString(
                    myWriter.ToString(), Request.Url.AbsoluteUri);

                // save pdf document
                doc.Save(Response, false, "Sample.pdf");

                // close pdf document
                doc.Close();
            }
            else
            {
                // render web page in browser
                base.Render(writer);
            }
        }
    }
}

2 ответа

Решение

Как сказал Том, я добавил библиотеку Select.PdfToHtml.dll в GAC.

"Я попытался добавить файл Select.HtmlToPdf.dll в GAC, и он работал как чудо. Я дважды щелкнул Package.package > Дополнительно> Добавить> Добавить из существующих сборок> Выбрал мой файл Select.HtmlToPdf.dll(Net20) > Проверить Цель развертывания: GAC> Сохранить! Ссылки: добавить библиотеку в GAC. Не удалось загрузить файл или сборку. Select.HtmlToPdf "

После этого я мог загрузить свою страницу и посмотреть мой контент. но когда я нажал кнопку; Я получил эту ошибку

"Ошибка преобразования. Не удалось найти" Select.Html.dep ". Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде". "

Чтобы исправить это, выполните следующие действия:

во-первых, я скопировал свой файл Select.Html.Dep (Net20) в свою папку 15 кустов "\15\TEMPLATE\CONTROLTEMPLATES\SelectPDFTest\VisualWebPart1\Select.Html.Dep"

затем я установил свой полный путь, как это в коде:

"// создаем новый PDF-документ, преобразующий HTML-строку страницы SelectPdf.GlobalProperties.HtmlEngineFullPath = @"C:\Program Files\Common Files\microsoft shared\ Расширения веб-сервера \15\TEMPLATE\CONTROLTEMPLATES\SelectPDFTest\VisualWebPart1\Select.Html.dep"; PdfDocument doc = converter.ConvertHtmlString(myWriter.ToString(), Request.Url.AbsoluteUri);" Ссылка: не удалось загрузить файл или сборку. Select.HtmlToPdf

Итак, наконец, мой код выглядит так:

using SelectPdf;
using System;
using System.Data;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace SelectPDFTest.VisualWebPart1
{
    public partial class VisualWebPart1UserControl : UserControl
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetRecord();
            }
        }
        private bool startConversion = false;
        private void GetRecord()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Country",typeof(string)) });
            dt.Rows.Add(1, "John Hammond", "United States");
            dt.Rows.Add(2, "Mudassar Khan", "India");
            dt.Rows.Add(3, "Suzanne Mathews", "France");
            dt.Rows.Add(4, "Robert Schidner", "Russia");
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            startConversion = true;
        }
        protected override void Render(HtmlTextWriter writer)
        {
            if (startConversion)
            {
                // get html of the page
                TextWriter myWriter = new StringWriter();

                HtmlTextWriter htmlWriter = new HtmlTextWriter(myWriter);
                base.Render(htmlWriter);

                // instantiate a html to pdf converter object
                HtmlToPdf converter = new HtmlToPdf();

                // set css @media screen
                converter.Options.CssMediaType = HtmlToPdfCssMediaType.Screen;

                // create a new pdf document converting the html string of the page
                SelectPdf.GlobalProperties.HtmlEngineFullPath = @"C:\\Program Files\\Common Files\\microsoft shared\\Web Server Extensions\\15\\TEMPLATE\\CONTROLTEMPLATES\\SelectPDFTest\\VisualWebPart1\\Select.Html.dep";

                string css = "<link rel='stylesheet' href='/Style Library/css/main.css' media='screen' />   ";
                string pageHtml = css + myWriter.ToString();

                PdfDocument doc = converter.ConvertHtmlString(pageHtml, Request.Url.AbsoluteUri);

                // save pdf document
                doc.Save(Response, false, "Sample.pdf");

                // close pdf document
                doc.Close();

                startConversion = false;
            }
            else
            {
                // render web page in browser
                base.Render(writer);
            }
        }
    }
}

С любой SharePoint WebPart, которая использует сторонние библиотеки, решение состоит в том, чтобы добавить эту библиотеку в GAC:

Нажмите Package.package > Дополнительно> Добавить> Добавить из существующих сборок> Выбранный файл Select.HtmlToPdf.dll > Проверить цель развертывания как GAC > Сохранить!

Более подробно здесь: https://social.msdn.microsoft.com/Forums/office/en-US/0b9ef307-e15c-4bc1-b5c0-dfc7aef04900/deploying-third-party-dll-from-solution?forum=sharepointdevelopmentprevious

Другие вопросы по тегам