2009-04-03 4 views
3

Я использую iTextSharp для преобразования HTML в PDF и, похоже, не работает с абсолютно позиционируемыми элементами. Например, у меня есть этот файл HTML:Абсолютное положение при преобразовании HTML в PDF с iTextSharp

<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"); 
    } 
}   

EDIT:

После дальнейшего исследования, кажется, что HTML iTextSharp к возможности преобразования PDF ограничен некоторыми очень простые HTML-документы. Есть хороший Java-проект под названием Flying Saucer, который обрабатывает сложные HTML-документы. Поэтому я попытался использовать его с IKVM, и он работал очень хорошо. Единственная проблема заключается в том, что она чувствует себя как-то грязное решение. Добавление 31 МБ кода сборки для преобразования HTML в PDF кажется довольно много. Существуют ли лучшие и «свободные» альтернативы для обработки этого сценария.

ответ

2

я, наконец, решил использовать xhtmlrenderer. Он отлично подходит для моих потребностей, у него много функций, и он смог правильно отобразить любой из моих HTML-файлов.

Как в настоящее время у него есть только версия JAVA, мне пришлось преобразовать банки в сборку .NET с помощью IKVM.

+0

Это похоже на решение проблемы, с которой я столкнулся в данный момент. Насколько сложно конвертировать JAR в DLL с помощью IKVM, и возникают ли у вас проблемы? – TonE

+0

Преобразование JAR в DLL - это простой вопрос использования ikvmc.exe в командной строке. У меня не было никаких проблем, и уже более двух месяцев этот компонент работает в производстве без единого отказа. –

+0

Спасибо, я дам вам попробовать! – TonE

0

Предполагая, что вы находитесь в Windows, как насчет автоматизации бесплатного PDFCreator через COM или командной строки для рендеринга HTML в PDF с помощью механизма рендеринга Internet Explorer?

Есть много примеров автоматизации в C: \ Program Files \ PDFCreator \ COM \ папку, когда PDFCreator установлен

0

Использование ikvmc в JARs в двоичном дистрибутиве показало мне много предупреждений из классов, которые невозможно было сделать. После включения в основных библиотеках IKVM иметь дело с тем, что Летающие блюдца нацеливают объекты Java, я наткнулся на следующее исключение:

`Cannot load AWT toolkit: ikvm.awt.NetToolkit, IKVM.AWT.WinForms, Version=0.40.0.1, Culture=neutral, PublicKeyToken=13235d27fcbfff58` 

и это было только от исполнения:

`ITextRenderer toRender = new ITextRenderer();` 

который, кажется, основной объект, используемый Flying Saucer. Можете ли вы предоставить какой-то источник того, как вы его использовали?

+0

Вы ссылаетесь на IKVM.AWT.WinForms.dll, чтобы скопировать его в папку bin \ Release? –