Pergunta

Eu estou usando iTextSharp para converter HTML para PDF e não parece trabalhar com elementos posicionados absolutamente. Por exemplo, eu tenho esse arquivo HTML:

<html>
<body>
    <p style="position: absolute; left: 10px; top: 100px; width: 50px;">Hello World</p>
</body>
</html>

O texto não é corretamente posicionado no arquivo PDF resultante. Você sabe se é possível ter elementos posicionados absolutamente ao converter HTML para PDF? Qualquer solução gratuita (iTextSharp ou outro) que permite que isso seria muito apreciado.

Aqui está o código que estou usando para executar a conversão com 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:

Depois de uma investigação mais aprofundada, parece que HTML do iTextSharp a capacidade de conversão de PDF é limitada a alguns documentos HTML muito simples. Há um projeto Java agradável chamada Flying Saucer que lida com documentos HTML complexos. Então, eu tentei usá-lo com IKVM e funcionou muito bem. O único problema é que ele se sente de alguma forma uma solução suja. Adicionando 31MB de código de montagem para HTML para conversão de PDF parece bastante muito. Há algum melhores e alternativas "livres" para lidar com esse cenário.

Foi útil?

Solução

Eu finalmente decidiu usar xhtmlrenderer . Ele se encaixa perfeitamente as minhas necessidades, ele tem muitos recursos e foi capaz de processar corretamente qualquer um dos meus arquivos HTML.

Como atualmente ele tem apenas uma versão JAVA eu tinha que converter os frascos em um .NET assembly com IKVM .

Outras dicas

Supondo que você estiver no Windows, como sobre como automatizar a livre PDFCreator através COM ou a linha de comando para renderizar HTML para PDF via motor de renderização do Internet Explorer?

Existem muitos exemplos de automação no C: \ Program Files \ PDFCreator \ COM \ pasta quando PDFCreator é instalado

Usando ikvmc sobre os JARs na distribuição binária me mostrou um monte de avisos de classes que não poderiam ser feitas. Depois de incluir as bibliotecas centrais IKVM para lidar com o fato de que Flying Saucer como alvo objetos Java, eu corri para a seguinte exceção:

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

e que foi apenas de executar:

`ITextRenderer toRender = new ITextRenderer();`

O que parece ser o principal objeto usado por Flying Saucer. Você pode fornecer uma fonte de como usá-lo?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top