iTextSharp xmlworker плохо отображает ширину столбцов в таблице

#c# #itext #xmlworker

#c# #itext #xmlworker

Вопрос:

У меня есть эта html-таблица: оригинальный html

  • Эта таблица имеет table-layout: auto и width: 100%
  • Ни одна из ячеек не имеет определенной ширины
  • Как вы можете видеть, ширина каждого столбца автоматически настраивается браузером для наилучшего соответствия

Когда я конвертирую его в PDF с помощью xmlworker 5.5.3 (iTextSharp 5.5.3), я получаю этот PDF: xmlworker html в pdf

Как вы можете видеть, iTextSharp очень плохо определил ширину столбцов (сравните это с тем, как Chrome рисует таблицу): Неправильно рисует ширину ячеек

Это неэффективно:

  • Большие столбцы отображаются слишком узкими (например, 4-й столбец)
  • Короткие столбцы отображаются слишком широко

Я пробовал другие инструменты «html to pdf», и они хорошо справляются с шириной столбцов:

pupeeter (Chrome без головы): преобразование html в pdf

wkhtmltopdf: wkhtmltopdf.exe html в pdf

Но что мне нравится в iTextSharp, так это то, что я могу использовать его непосредственно в своем веб-приложении, размещенном в Azure.

  • кукловод сделан в node.js и мое веб-приложение создано на C # / asp.net
  • wkhtmltopdf должен выполняться на уровне B1 в Azure (дорого)

Итак … что я делаю не так с xmlworker? или это просто плохая библиотека?

ОБНОВЛЕНИЕ 1

Существует проект puppeteer для C # под названием «PuppeteerSharp». Я пытаюсь сейчас. По-видимому, его нужно запускать вместе с browserless.io потому что Azure не будет запускать Chrome в веб-приложении (по крайней мере, F1 …)

ОБНОВЛЕНИЕ 2

Нелегко запустить PuppeteerSharp в Azure.
На данный момент я развернул проект GitHub «url-to-pdf-api» в heroku, который использует Puppeteer, и я вызываю его из Azure. Не быстро, не просто…

ОБНОВЛЕНИЕ 3

Я попытался обновить с xmlworker 5.5.3 до xmlworker 5.5.13.2, и это еще хуже. Он не учитывает style="width: 25%" on <td> (что 5.5.3 делает НОРМАЛЬНО). Какая ужасная библиотека

Комментарии:

1. Вы пробовали использовать самые современные itextsharp и xmlworker?

2. Могу ли я получить это с помощью NuGet? @mkl

3. Я бы предположил, что это так; открывая менеджер NuGet в VS, я вижу iTextSharp itextsharp.pdfa , itextsharp.xmlworker , и itextsharp.xtra все они доступны в версии 5.5.13.2 (т. Е. Второе обновление для системы безопасности для окончательной версии 5.5.13 этого проекта).

4. Хм, я думаю, что сначала попробую iTextSharp 5.5.13.2 (я использую 5.5.3). Хотя они оба устарели. И тогда я попробую iText7.pdfHTML…..

5. Будьте осторожны, API iText 7 полностью переработан, iText 5 для iText 7 — это не простое выпадающее обновление, вам придется значительно изменить свой код. Тем не менее, во многих отношениях iText 7 является явным улучшением по сравнению с iText 5.