itextsharp из C #: как визуализировать из html-содержимого в pdf с помощью & ldquo; OnStartPage & rdquo; событие в & ldquo; PdfPageEventHelper & rdquo; [dубликат]

В этой немецкой статье говорится, что она работает без проблем. Автор описывает, что он менял коэффициент масштабирования в соответствии с системными предпочтениями и что масштабирование было установлено в масштабе всей системы для всех используемых шрифтов.

Неудобство было размером с мышеловкой, которое было исправлено в /etc/X11/Xresources/x11-common изменением Xcursor*size: 48.

Он также описывает проблему, когда система переходит в режим энергосбережения, что она не возвращается, но это, кажется, немецкая статья

В офисе libre, gimp и firefox автор изменил масштаб в программе до подходящего размера масштабирования.

3
задан 21 December 2015 в 16:50

1 ответ

Anwser от Bruno прав, но это не сработало для меня полностью, поскольку XMLWorkerHelper.parsetoElementsList не смог разобрать некоторые системные шрифты, с другой стороны, XMLWorkerHelper.getInstance (). parseXHtml (writer, document, is); } смог правильно проанализировать системные шрифты, поэтому мне нужно спуститься по маршруту обработчиков элементов, которые обработали здесь код в C #

    /// <summary>
    /// returns pdf in bytes.
    /// </summary>
    /// <param name="contentsHtml">contents.</param>
    /// <param name="headerHtml">header contents.</param>
    /// <param name="footerHtml">footer contents.</param>
    /// <returns></returns>
    public Byte[] GetPDF(string contentsHtml, string headerHtml, string footerHtml)
    {
        // Create a byte array that will eventually hold our final PDF
        Byte[] bytes;

        // Boilerplate iTextSharp setup here

        // Create a stream that we can write to, in this case a MemoryStream
        using (var ms = new MemoryStream())
        {
            // Create an iTextSharp Document which is an abstraction of a PDF but **NOT** a PDF
            using (var document = new Document(PageSize.A4, 40, 40, 120, 120))
            {
                // Create a writer that's bound to our PDF abstraction and our stream
                using (var writer = PdfWriter.GetInstance(document, ms))
                {
                    // Open the document for writing
                    document.Open();

                    var headerElements = new HtmlElementHandler();
                    var footerElements = new HtmlElementHandler();

                    XMLWorkerHelper.GetInstance().ParseXHtml(headerElements, new StringReader(headerHtml));

                    XMLWorkerHelper.GetInstance().ParseXHtml(footerElements, new StringReader(footerHtml));

                    writer.PageEvent = new HeaderFooter(headerElements.GetElements(), footerElements.GetElements());

                    // Read your html by database or file here and store it into finalHtml e.g. a string
                    // XMLWorker also reads from a TextReader and not directly from a string
                    using (var srHtml = new StringReader(contentsHtml))
                    {
                        // Parse the HTML
                        iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, srHtml);
                    }

                    document.Close();
                }
            }

            // After all of the PDF "stuff" above is done and closed but **before** we
            // close the MemoryStream, grab all of the active bytes from the stream
            bytes = ms.ToArray();
        }
        return bytes;
    }
}

странице событий и элементов кода обработчика здесь

[F2]
2
ответ дан 15 August 2018 в 15:42
  • 1
    Потрясающие...! вы сэкономили много времени ... большое спасибо ... – chirag 14 August 2018 в 18:55

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

Похожие вопросы: