Как использовать itext 7 для создания PDF-файла из HTML-файла и сохранения его в папке на сервере в .net - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь создать конструктор CV, который сохраняет отредактированное пользователем резюме в папку в моем проекте для дальнейшей обработки отправки его по электронной почте, я достиг того, чтобы использовать itext для создания PDF-файла HTML div, но не имеет CSS или каких-либо текстовых значений, которые я вернул из своей базы данных. В результате некоторых исследований я обнаружил, что моя проблема может быть решена с помощью itext 7 и надстройки pdfHTML, но я не могу найти каких-либо надлежащих примеров того, как использовать ее с моим кодом ASP.NET. Буду очень признателен за любую помощь.

Сильфон - это код события нажатия кнопки, который я использую для создания PDF

    protected void ButtonDownload_Click(object sender, EventArgs e)
{
    Response.ContentType = "application/pdf";
   //Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf");
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    contentdiv.RenderControl(hw); //convert the div to PDF
    StringReader sr = new StringReader(sw.ToString());
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(sr);
    pdfDoc.Close();
    string filename = base.Server.MapPath("~/PDF/" + "UserCV.pdf");
    HttpContext.Current.Request.SaveAs(filename, false);
    Response.End();
}

На этом рисунке показан результат в формате pdf, который я получаю, когда нажимаю кнопку загрузки И это HTML-страница, которую он пытается конвертировать Текст под заголовками на странице HTML - это метки, значения которых устанавливаются путем извлечения значений из базы данных

1 Ответ

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

Это пример использования pdfHTML

Этот пример довольно обширный, так как он также устанавливает свойства документа и регистрирует пользовательский шрифт.

public void createPdf(String src, String dest, String resources) throws IOException {
try {
    FileOutputStream outputStream = new FileOutputStream(dest);

    WriterProperties writerProperties = new WriterProperties();
    //Add metadata
    writerProperties.addXmpMetadata();

    PdfWriter pdfWriter = new PdfWriter(outputStream, writerProperties);

    PdfDocument pdfDoc = new PdfDocument(pdfWriter);
    pdfDoc.getCatalog().setLang(new PdfString("en-US"));
    //Set the document to be tagged
    pdfDoc.setTagged();
    pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));

    //Set meta tags
    PdfDocumentInfo pdfMetaData = pdfDoc.getDocumentInfo();
    pdfMetaData.setAuthor("Joris Schellekens");
    pdfMetaData.addCreationDate();
    pdfMetaData.getProducer();
    pdfMetaData.setCreator("JS");
    pdfMetaData.setKeywords("example, accessibility");
    pdfMetaData.setSubject("PDF accessibility");
    //Title is derived from html

    // pdf conversion
    ConverterProperties props = new ConverterProperties();
    FontProvider fp = new FontProvider();
    fp.addStandardPdfFonts();
    fp.addDirectory(resources);//The noto-nashk font file (.ttf extension) is placed in the resources

    props.setFontProvider(fp);
    props.setBaseUri(resources);
    //Setup custom tagworker factory for better tagging of headers
    DefaultTagWorkerFactory tagWorkerFactory = new AccessibilityTagWorkerFactory();
    props.setTagWorkerFactory(tagWorkerFactory);

    HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);
    pdfDoc.close();

} catch (Exception e) {
    e.printStackTrace();
}

}

Наиболее релевантная строка здесь -

    HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);

, которая, по сути, говорит pdfHTML выполнить преобразование входного потока (заданного src), поместить содержимое в pdfDoc и использовать заданноеConverterProperties (указано props).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...