当前位置: 首页 > 知识库问答 >
问题:

使用ITextSharp[duplicate]无法在PDF中实现样式

魏鸿禧
2023-03-14

我正在尝试使用ITextSharp从HTML字符串生成PDF。但是外观风格没有得到应用。我在stackoverflow上查看了与此相关的帖子,但没有得到任何帮助。Plz帮助我如何将pdf格式的HTML转换为HTML UI中显示的实际样式。样式标签中包含CSS。这是我的C代码

public static string GeneratePDF(string html, string cssText="")
        {
            try
            {
               // var cssText = "";
                Guid random_guid;
                random_guid = Guid.NewGuid();
                string fileName = random_guid.ToString() + ".pdf";
                string filename_with_folder = @"Temp\" + fileName;
                string fullFilePath = System.IO.Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, filename_with_folder);
                using (var memoryStream = new MemoryStream())
                {
                    var doc = new Document();
                    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create));
                    doc.Open();
                    using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
                    {
                        using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
                        {
                            XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, htmlMemoryStream, cssMemoryStream);
                        }
                    }
                    doc.Close();
                    fileName = Utility.UploadFileToAzure(fullFilePath, fileName, "application/pdf ");
                    return fileName;
                }
            }
            catch (Exception ex)
            {

                ExceptionHandler.LogError(ex);
            }
            return string.Empty;
        }

下面是带有HTMl字符串和css的代码

   public void test()
        {
            StringBuilder sb = new StringBuilder();
            StringBuilder css = new StringBuilder();
            css.Append(@"<style type='text/css'>

        body{font-family: Segoe, 'Segoe UI', 'DejaVu Sans', 'Trebuchet MS', Verdana, 'sans-serif'; background: #f2f2f2; margin: 0; padding: 0; font-size: 20px; color: #565656;}
        .outerpdfboxCont{width: 100%; background: #fff; margin: 0 auto; padding: 15px 30px; max-width: 80%; display: table;box-shadow: 1px 1px 2px #ddd;}   

        .blueBorderLine{background: #0A82B4; height: 10px; width: 100%; margin: 10px auto;}

        .workingWrapperboxPdf{margin: 10px 0; padding: 10px 0px; display: table;width: 100%; }
        .workingWrapperboxPdf h2{font-size: 36px; font-weight: 500; margin: 40px 0 0; line-height: 40px; color: #000;}
        .workingWrapperboxPdf h3{font-size: 18px; font-weight: 300;line-height: 20px;}

        .darkB{color: #000!important; font-weight: 500!important;}
        .DataboxH{margin: 20px 0; display: table;width: 100%;}
        .border-heading{border-bottom: 1px solid #ddd; font-size: 30px!important; line-height: 35px!important; color: #000!important;width: 100%; padding-bottom: 10px;}

    </style>");
            sb.Append(@"<body>
<div class='outerpdfboxCont'>   
    <div class='blueBorderLine'></div>  

<div class='workingWrapperboxPdf'>  

    <h3>Dalvir Singh</h3>   
    <h3 class='darkB'>India</h3>

    <div class='DataboxH'>
        <h2>Summery Of the PDF</h2>
        <h3 class='darkB'>Summery of pdf will go here</h3>
        <h3>PDF created on 2018-6-12</h3>
    </div>
</div>  
</div>
</body>");
GeneratePDF(sb.ToString(),css.ToString());
        }

共有1个答案

章增
2023-03-14

这是iText for旧版本的一个已知问题。网

两年多前,我们放弃了iTextSharp这个名字,取而代之的是iText。网

我拿走了你的HTML:

<html>
<head>
<style type='text/css'>

        body{font-family: Segoe, 'Segoe UI', 'DejaVu Sans', 'Trebuchet MS', Verdana, 'sans-serif'; background: #f2f2f2; margin: 0; padding: 0; font-size: 20px; color: #565656;}
        .outerpdfboxCont{width: 100%; background: #fff; margin: 0 auto; padding: 15px 30px; max-width: 80%; display: table;box-shadow: 1px 1px 2px #ddd;}   

        .blueBorderLine{background: #0A82B4; height: 10px; width: 100%; margin: 10px auto;}

        .workingWrapperboxPdf{margin: 10px 0; padding: 10px 0px; display: table;width: 100%; }
        .workingWrapperboxPdf h2{font-size: 36px; font-weight: 500; margin: 40px 0 0; line-height: 40px; color: #000;}
        .workingWrapperboxPdf h3{font-size: 18px; font-weight: 300;line-height: 20px;}

        .darkB{color: #000!important; font-weight: 500!important;}
        .DataboxH{margin: 20px 0; display: table;width: 100%;}
        .border-heading{border-bottom: 1px solid #ddd; font-size: 30px!important; line-height: 35px!important; color: #000!important;width: 100%; padding-bottom: 10px;}

    </style>
</head>
<body>
<div class='outerpdfboxCont'>   
    <div class='blueBorderLine'></div>  

<div class='workingWrapperboxPdf'>  

    <h3>Dalvir Singh</h3>   
    <h3 class='darkB'>India</h3>

    <div class='DataboxH'>
        <h2>Summery Of the PDF</h2>
        <h3 class='darkB'>Summery of pdf will go here</h3>
        <h3>PDF created on 2018-6-12</h3>
    </div>
</div>  
</div>
</body>
</html>

我在浏览器中打开了它:

然后我使用了iText 7和pdfHTML附加组件。

我执行了下面一行代码

HtmlConverter.ConvertToPdf(src, dest);

在这一行中,src指的是HTML文件dest指的是将基于HTML创建的PDF。

这就是生成的PDF的样子:

正如你所见,这些风格受到尊重。关于字体系列:通过创建一个ConverterProperties对象,允许转换器访问字体存储库,您可以获得一种具有更高首选项的字体。有关该功能的更多信息,请阅读PDF到HTML教程的第6章。

总结:一旦升级到iText 7 pdfHTML附加组件,您的问题就会消失。您使用的是旧的XMLWorkerHelper,正如HTML到PDF教程介绍中所述,它不再受支持。

 类似资料:
  • 我有三维PDF文件。它包含许多三维图形,但它嵌入在一个页面中。我们正在导航到导航窗格(模型树)中的图形- 我想使用带有iTextSharp的C#浏览这个3d pdf。 请让我知道如何实现它? 例如: http://examples.itextpdf.com/results/part4/chapter16/pdf3d.pdf 上面的pdf有模型树。它有模型、选项和信息面板。现在我想控制模型选择。

  • 我试图解析一个超文本标记语言字符串,其中包含希伯来文到pdf在MVC应用程序中使用iTEXT夏普和xmlwork5.5.13。我不能让希伯来语出现在页面上。我试图模仿这篇文章,但我做的任何事情似乎都没有帮助。我已将超文本标记语言简化为以下内容: (流被保存到数据库中并以文件形式打开,尽管我尝试保存到磁盘并得到相同的结果。)

  • 代码是来自ASP.NET MVC应用程序的操作方法。

  • 我读了很多关于SO的帖子,并搜索了很多解决方案,所有这些似乎都回避了我的特定问题。 是否有一种方法可以使用正确的页面大小将现有的PDF复制到新文档中? 谢谢。 更新 接受了布鲁诺的建议,我仔细检查了剪裁框和媒体框。我正在使用的PDF两者都有。裁剪框数组为 但是这样做会使“文本”向右和顶部移动太多,留下不均匀的边距。 我发现通过改变左下角的坐标,裁剪框,我可以移动文本。事实上,将裁剪框设置为40、4

  • 需要通过使用外部webservice对文档哈希进行签名来签署PDF,该过程必须在2个步骤中完成,并使用临时空签名。 在Priyanka问题和Grazina问题之后,阅读了那些帖子上的mkl答案,我现在有一个无效的签名,即使像Grazina那样添加了哈希前缀。 iTextSharp版本:5.5.13.1 这个节目是我上一个问题的另一个问题。当前代码(编译并开始调用SignPDF方法): 获得的结果

  • 我想在现有的pdf中写点东西。我迄今为止所做的= 这是工作。我的问题是:我提供的文档< code>old document处于横向模式。我希望新文档为横向模式。但这为我提供了纵向模式的pdf。所以我试着..... 更新1= 这也不起作用。。 此外,新的文字,我正在添加到旧的pdf格式,显示在旧的网页下...