wkhtmltopdf - конвертировать HTML-код в PDF непосредственно в C # - PullRequest
7 голосов
/ 18 октября 2010

Я знаю, что этот инструмент ищет URL-адрес и преобразует ответ в pdf. Как мне конвертировать

<html> content.. </html> 

в pdf?

Я просматривал файлы справки на wkhtml2pdf и похоже, что он предоставляет опцию stdin, но я не могу понять, как эмулировать stdin.

Также, если вы знаете инструмент, который делает лучше, пожалуйста, предложите мне его.

Большое спасибо!

Ответы [ 5 ]

14 голосов
/ 29 января 2011

Я только начал новый проект, чтобы предоставить оболочку C # P / Invoke для wkhtmltopdf.

Вы можете оформить заказ по моему коду: https://github.com/pruiz/WkHtmlToXSharp

Greets.

8 голосов
/ 16 апреля 2013

Взгляните на Печкин

.NET Wrapper для WkHtmlToPdf DLL, библиотеки, которая использует движок Webkit для преобразования HTML-страниц в PDF.

Пакеты Nuget:

Печкин. Синхронизировано

Печкин

Пример кода:

private void ConvertToPdf()
{
    var loadPath = Server.MapPath("~/HtmlTemplates");
    var loadFile = Path.Combine(loadPath, "Test.html");
    var savePath = Server.MapPath("~/Pdf");
    var saveFile = Path.Combine(savePath, DateTime.Now.ToString("HH-mm-ss.fff") + ".pdf");

    var globalConfig = new GlobalConfig()
        .SetMargins(0, 0, 0, 0)
        .SetPaperSize(PaperKind.A4);

    var pdfWriter = new SynchronizedPechkin(globalConfig);

    pdfWriter.Error += OnError;
    pdfWriter.Warning += OnWarning;

    var objectConfig = new ObjectConfig()
        .SetPrintBackground(true)
        .SetIntelligentShrinking(false);

    var pdfBuffer = pdfWriter.Convert(objectConfig, File.ReadAllText(loadFile));

    File.WriteAllBytes(saveFile, pdfBuffer);
}

private void OnWarning(SimplePechkin converter, string warningtext)
{
    throw new NotImplementedException();
}

private void OnError(SimplePechkin converter, string errortext)
{
    throw new NotImplementedException();
}
5 голосов
/ 18 октября 2010

wkhtmltopdf - бесплатный инструмент, но он написан не на .NET, и его может быть сложно интегрировать в ваше приложение asp.net.

вы можете взглянуть на iTextSharp , который является бесплатным, но не может обрабатывать любые виды html, или вы можете взглянуть на коммерческие инструменты для преобразования html в pdf, такие как ExpertPDF или ABCpdf , которые могут обрабатывать любыеHTML / CSS.

2 голосов
/ 20 октября 2010

Я нашел способ.Вы можете настроить другой для вывода нормального HTML.И используйте этот URL в качестве входного значения процесса wkhtml2pdf.

---------- Редактировать

public byte[] WKHtmlToPdf(string url_input)
    {
        try
        {
            var fileName = " - ";
            var wkhtmlDir = ConfigurationSettings.AppSettings["wkhtmlDir"];
            var wkhtml = ConfigurationSettings.AppSettings["wkhtml"];
            var p = new Process();

            string url = Request.Url.GetLeftPart(UriPartial.Authority) + @"/application/" + url_input;

            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.FileName = wkhtml;
            p.StartInfo.WorkingDirectory = wkhtmlDir;

            string switches = "";
            switches += "--print-media-type ";
            switches += "--margin-top 10mm --margin-bottom 10mm --margin-right 10mm --margin-left 10mm ";
            switches += "--page-size Letter ";
            p.StartInfo.Arguments = switches + " " + url + " " + fileName;
            p.Start();

            //read output
            byte[] buffer = new byte[32768];
            byte[] file;
            using (var ms = new MemoryStream())
            {
                while (true)
                {
                    int read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length);

                    if (read <= 0)
                    {
                        break;
                    }
                    ms.Write(buffer, 0, read);
                }
                file = ms.ToArray();
            }

            // wait or exit
            p.WaitForExit(60000);

            // read the exit code, close process
            int returnCode = p.ExitCode;
            p.Close();

            return returnCode == 0 ? file : null;
        }
        catch (Exception ex)
        {

           // set your exceptions here
            return null;
        }
    }

---------- web.Пример ключа конфигурации

  <add key="wkhtmlDir" value="C:\Program Files (x86)\wkhtmltopdf\bin"/>
    <add key="wkhtml" value="C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe"/>

Основная идея заключается в передаче URL-адреса exe в качестве аргумента.

HTH!

0 голосов
/ 29 апреля 2019

если вы хотите напечатать определенную часть html с помощью Css

установите пакеты Nuget:

Pechkin.Synchronized

StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
  pnlprint.RenderControl(hw);
    StringReader sr = new StringReader(sw.ToString());
   string cssPath = Server.MapPath("~/css/style1.css");

    string cssString = File.ReadAllText(cssPath);
     cssPath = Server.MapPath("~/css/bootstrap.css");
    string cssString2 = File.ReadAllText(cssPath);
    cssString += cssString2;
    GlobalConfig gc = new GlobalConfig();
    byte[] pdfContent = new SimplePechkin(new GlobalConfig()).Convert(@"<html><head><style>" + cssString + "</style></head><body>" + sw.ToString() + "</body></html>");

здесь выможет легко понять работу wkhtmltopdf https://ourcodeworld.com/articles/read/366/how-to-generate-a-pdf-from-html-using-wkhtmltopdf-with-c-in-winforms

...