Абсолютная позиция при преобразовании HTML в PDF с помощью iTextSharp
-
23-08-2019 - |
Вопрос
Я использую iTextSharp для преобразования HTML в PDF, и, похоже, он не работает с абсолютно расположенными элементами.Например, у меня есть этот HTML-файл:
<html>
<body>
<p style="position: absolute; left: 10px; top: 100px; width: 50px;">Hello World</p>
</body>
</html>
Текст неправильно расположен в результирующем PDF-файле.Знаете ли вы, возможно ли иметь абсолютно позиционированные элементы при преобразовании HTML в PDF?Мы были бы очень признательны за любое бесплатное решение (iTextSharp или другое), которое позволяет это.
Вот код, который я использую для выполнения преобразования с помощью iTextSharp:
class Program
{
static void Main(string[] args)
{
Document document = new Document(PageSize.A4);
using (Stream output = new FileStream("out.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
using (Stream htmlStream = new FileStream("input.htm", FileMode.Open, FileAccess.Read, FileShare.Read))
using (XmlTextReader reader = new XmlTextReader(htmlStream))
{
PdfWriter.GetInstance(document, output);
HtmlParser.Parse(document, reader);
}
Process.Start(@"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe", "out.pdf");
}
}
Редактировать:
После дальнейшего изучения выясняется, что возможности преобразования HTML iTextSharp в PDF ограничены некоторыми очень простыми HTML-документами.Есть хороший Java-проект под названием Летающая тарелка который обрабатывает сложные HTML-документы.Поэтому я попробовал использовать его с IKVM и это сработало очень хорошо.Единственная проблема в том, что это кажется каким-то грязным решением.Добавление 31 МБ ассемблерного кода для преобразования HTML в PDF кажется довольно большим.Существуют ли какие-либо лучшие и "бесплатные" альтернативы для обработки этого сценария?
Решение
Я, наконец, решил использовать xhtmlrenderer ( редактор xhtml ).Он идеально соответствует моим потребностям, у него много функций, и он смог корректно отобразить любой из моих HTML-файлов.
Поскольку в настоящее время у него есть только версия JAVA, мне пришлось преобразовать jars в сборку .NET с IKVM.
Другие советы
Предполагая, что вы используете Windows, как насчет автоматизации бесплатного PDFCreator - создатель через COM или командную строку для рендеринга HTML в PDF через механизм рендеринга Internet Explorer?
В папке Files\PDFCreator\COM\ есть множество примеров автоматизации при установке PDFCreator. C:\Program Файлы\PDFCreator\COM\
Использование ikvmc в JARS в двоичном дистрибутиве показало мне множество предупреждений от классов, которые не могли быть сделаны.После включения библиотек iKVM core, чтобы справиться с тем фактом, что Flying Saucer нацелена на объекты Java, я столкнулся со следующим исключением:
`Cannot load AWT toolkit: ikvm.awt.NetToolkit, IKVM.AWT.WinForms, Version=0.40.0.1, Culture=neutral, PublicKeyToken=13235d27fcbfff58`
и это было только что от исполнения:
`ITextRenderer toRender = new ITextRenderer();`
Который, по-видимому, является основным объектом, используемым Летающей тарелкой.Можете ли вы предоставить какой-нибудь источник о том, как вы его использовали?