htmlConverter в itext7 закрывает документ PDF, прежде чем я хочу, чтобы он был закрыт в C # - PullRequest
0 голосов
/ 03 мая 2018

Я использую iText7 для конвертации из HTML в PDF, который отлично работает

однако этот звонок:

   HtmlConverter.ConvertToPdf(htmlStream, document);

закроет документ после его вызова, но я пока не хочу закрывать документ по следующей причине

Я написал эту функцию для написания страниц, я буду вызывать ее в цикле

   public static void WritePage(string htmlbody)
    {
        document.AddNewPage();
        byte[] htmlByteArray = Encoding.UTF8.GetBytes(htmlbody); 
        MemoryStream htmlStream = new MemoryStream(htmlByteArray);       
        HtmlConverter.ConvertToPdf(htmlStream, document);
    }

и после окончания цикла я сам закрою документ

 public static void CloseDocument()
    {   
       document.Close();
    }

это работало, когда я использовал iText5, но теперь convertToPdf закроет документ. Я могу прочитать этот документ и добавить его с новой страницей в новый документ, но я не хочу этого делать Я хочу использовать встроенный документ. AddNewPage и после того, как документ будет полностью создан, я сам его закрою

Заранее спасибо

1 Ответ

0 голосов
/ 04 мая 2018

ответ № 1 использует PdfMerger, и это мой предпочтительный ответ

public void createPdf(String baseUri, String[] src, String dest) throws IOException { 
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
for (String html : src) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfDocument temp = new PdfDocument(new PdfWriter(baos));
    HtmlConverter.convertToPdf(new FileInputStream(html), temp, properties);
    temp = new PdfDocument(
        new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
    merger.merge(temp, 1, temp.getNumberOfPages());
    temp.close();
}
pdf.close();}

ответ №2 - преобразование HTML в список элементов IE и добавление его в документ, как в следующем коде:

public void createPdf(String baseUri, String[] src, String dest) throws IOException { 
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
for (String html : src) {
    List<IElement> elements =
        HtmlConverter.convertToElements(new FileInputStream(html), properties);
    for (IElement element : elements) {
        document.add((IBlockElement)element);
    }
}
document.close();}

Ссылка: https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml/chapter-7-frequently-asked-questions-about-pdfhtml/how-parse-multiple-html-files-one-pdf

...