1

iTextSharp (5.4.3) 生成ライブラリを使用して css ファイルを PDF に適用しようとすると問題が発生します。基本的にcssはまったく適用されていません。

vb.net ファイルに次のメソッドがあります

    Protected Sub btnPreview_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPreview.Click
    Dim bytes As Byte()
    bytes = System.Text.Encoding.UTF8.GetBytes(letterRadEdit.Content)

    Dim tagProcessor As tool.xml.html.DefaultTagProcessorFactory()

    Using input As New MemoryStream(bytes, False)

        Dim ms As New MemoryStream()

        Dim document As New iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER, 36, 36, 36, 36)
        Dim writer As PdfWriter = PdfWriter.GetInstance(document, ms)

        writer.CloseStream = False
        document.Open()

        Dim htmlContext As HtmlPipelineContext = New HtmlPipelineContext(Nothing)
        htmlContext.SetAcceptUnknown(True)
        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory())
        Dim cssResolver As ICSSResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(False)
        cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("/assets/css/pdf.css"), True)

        Dim pipeline As New CssResolverPipeline(cssResolver, New HtmlPipeline(htmlContext, New PdfWriterPipeline(document, writer)))
        Dim pdfworker As New XMLWorker(pipeline, True)
        Dim p As New XMLParser(True, pdfworker, New System.Text.UTF8Encoding)

        Try

            'p.AddListener(pdfworker)
            'p.Parse(input, Encoding.UTF8)

            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, input, New FileStream(HttpContext.Current.Server.MapPath("~/assets/css/pdf.css"), FileMode.Open, FileAccess.Read))
        Catch

        Finally
            pdfworker.Close()

        End Try

        document.Close()
        ms.Position = 0

        Response.Buffer = True
        Response.Clear()
        Response.ContentType = "application/pdf"
        Response.AddHeader("content-disposition", "attachment; filename=preview.pdf")
        Response.BinaryWrite(ms.GetBuffer())
        Response.Flush()
    End Using
End Sub

CSS ファイルには次のものが含まれています。

p{color:#e10000;margin-bottom:1.2em;}

(これは、正しくレンダリングされているかどうかをテストするためのものです。すべてのテキストは赤である必要があります)

私の問題は、次のコマンド

XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, input, New FileStream(HttpContext.Current.Server.MapPath("~/assets/css/pdf.css"), FileMode.Open, FileAccess.Read))

pdf を正しく生成しますが、CSS を適用しません。FileAccess.Read プロパティを適用するまでアクセス許可の例外があったため、CSS を読み取っていることはわかっています。

メソッド

p.Parse(input, Encoding.UTF8)

これは、html (2013 年第 3 四半期の radeditor テキスト ボックスからのもの) が古い html であり、解析でテーブルに問題があるように見えるためです。

4

2 に答える 2

2

iTextSharp は、css や画像などを使用したデザインでは非常に貧弱です。代わりに、wkhtmltopdfが最適です。

于 2014-12-01T10:17:53.543 に答える
0

テストしたところ、CSS が正しく適用されているように見えました。

td{
    border:1px solid red;
    padding:0.4em;
    margin:0;
}

すべてのセルが赤で囲まれているため、pdf が特定のスタイルを上書きしているように見えます。理由がわからない。

于 2013-11-14T10:06:25.473 に答える