我是.NET开发人员,因此代码在C#中.但是你应该能够轻松翻译以下内容.

iText是一个PDF优先的库,[X] HTML解析非常复杂,因此在这方面并不完整.每当解析[X] HTML并且事情不按预期的方式进行特定标记时,您应遵循的基本步骤是:

>验证XML Worker支持标记:Tags class.

>如果支持标记(在本例中为true),请查看默认实现.这里由the HorizontalRule class处理.但是,我们看到不支持您的用例,所以一种方法是使用该代码作为蓝图. (如下所示)您还可以继承特定的标记类并覆盖End()方法as done here.无论哪种方式,您所做的只是实现自定义标记处理器.

>如果不支持该标记,则需要通过继承AbstractTagProcessor来滚动自己的自定义标记处理器.

无论如何,这是一个让你入门的简单例子.首先,自定义标签处理器:

public class CustomHorizontalRule : AbstractTagProcessor

{

public override IList Start(IWorkerContext ctx, Tag tag)

{

IList result;

LineSeparator lineSeparator;

var cssUtil = CssUtils.GetInstance();

try

{

IList list = new List();

HtmlPipelineContext htmlPipelineContext = this.GetHtmlPipelineContext(ctx);

Paragraph paragraph = new Paragraph();

IDictionary css = tag.CSS;

float baseValue = 12f;

if (css.ContainsKey("font-size"))

{

baseValue = cssUtil.ParsePxInCmMmPcToPt(css["font-size"]);

}

string text;

css.TryGetValue("margin-top", out text);

if (text == null) text = "0.5em";

string text2;

css.TryGetValue("margin-bottom", out text2);

if (text2 == null) text2 = "0.5em";

string border;

css.TryGetValue(CSS.Property.BORDER_BOTTOM_STYLE, out border);

lineSeparator = border != null && border == "dotted"

? new DottedLineSeparator()

: new LineSeparator();

var element = (LineSeparator)this.GetCssAppliers().Apply(

lineSeparator, tag, htmlPipelineContext

);

string color;

css.TryGetValue(CSS.Property.BORDER_BOTTOM_COLOR, out color);

if (color != null)

{

// WebColors deprecated, but docs don't state replacement

element.LineColor = WebColors.GetRGBColor(color);

}

paragraph.SpacingBefore += cssUtil.ParseValueToPt(text, baseValue);

paragraph.SpacingAfter += cssUtil.ParseValueToPt(text2, baseValue);

paragraph.Leading = 0f;

paragraph.Add(element);

list.Add(paragraph);

result = list;

}

catch (NoCustomContextException cause)

{

throw new RuntimeWorkerException(

LocaleMessages.GetInstance().GetMessage("customcontext.404"),

cause

);

}

return result;

}

}

大多数代码直接取自现有的源代码,但CSS.Property.BORDER_BOTTOM_STYLE和CSS.Property.BORDER_BOTTOM_COLOR的检查除外,如果它们在< hr>中内联,则设置边框样式和颜色.样式属性.

然后将上面的自定义标记处理器添加到XML Worker TagProcessorFactory:

using (var stream = new FileStream(OUTPUT_FILE, FileMode.Create))

{

using (var document = new Document())

{

var writer = PdfWriter.GetInstance(document, stream);

document.Open();

var tagProcessorFactory = Tags.GetHtmlTagProcessorFactory();

// custom tag processor above

tagProcessorFactory.AddProcessor(

new CustomHorizontalRule(),

new string[] { HTML.Tag.HR }

);

var htmlPipelineContext = new HtmlPipelineContext(null);

htmlPipelineContext.SetTagFactory(tagProcessorFactory);

var pdfWriterPipeline = new PdfWriterPipeline(document, writer);

var htmlPipeline = new HtmlPipeline(htmlPipelineContext, pdfWriterPipeline);

var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);

var cssResolverPipeline = new CssResolverPipeline(

cssResolver, htmlPipeline

);

var worker = new XMLWorker(cssResolverPipeline, true);

var parser = new XMLParser(worker);

var xHtml = "


";

using (var stringReader = new StringReader(xHtml))

{

parser.Parse(stringReader);

}

}

}

有一点需要注意的是,即使我们使用的是速记边框内联样式,iText的CSS解析器似乎也会在内部设置所有样式.即,您可以使用四种速记样式中的任何一种来检查 – 我恰好使用了CSS.Property.BORDER_BOTTOM_STYLE和CSS.Property.BORDER_BOTTOM_COLOR.

结果PDF:

android html转pdf工具,android – 使用iText库将html转换为pdf时未应用hr的内联CSS相关推荐

  1. itext html转换为pdf排版错乱,使用iText库将html转换为pdf时不适用hr的Inline CSS

    我是一个.NET开发人员,所以该代码是在C#.但是你应该可以轻松地翻译以下内容. iText是一个PDF优先库,而[X]HTML解析相当复杂,所以它在这方面不是全功能.每当解析[X]HTML,事情不会 ...

  2. android启动界面修改工具,Android 系统界面调节工具使用及功能

    Android 系统界面调节工具(Android System UI Tuner)是个隐藏功能,里面有一些实验性功能,可以辅助平时开发. 1. 打开 系统界面调节工具是个隐藏功能,打开他说简单也简单, ...

  3. java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...

    Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...

  4. node将html转为pdf,将node.js中的html文件转换为pdf并将其写入磁盘

    经过this链接.. 这里u能HTML文件转换成PDF或HTML内容为PDF import NDHTMLtoPDF.h并从上面源链接NDHTMLtoPDF.m 通HTML文件的路径在这里生成PDF . ...

  5. 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

    文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...

  6. android studio 反编译工具,android studio反编译工具jd-inteIIij

    Android Studio 自带了Java Bytecode Decompiler 对于第三方的jar只能反编译出其函数名 例如:andbase里的com.kfb.c.jar下的com.kfb.c下 ...

  7. android支付宝签名生成工具,Android支付宝支付的示例代码

    上一篇,我们已经详细讲解了Android微信支付,今天接着为大家带来支付宝支付,支付宝支付相对微信支付要简单一些,吐槽一下,而且支付宝文档确实比微信的文档好了不少,下面开始讲解支付流程. 1.首先给出 ...

  8. JAVA常用API或编程工具001---ITEXT把html转换成pdf的jar包,使用Java将HTML转换为PDF

    iText "XML Worker"允许开发人员以一种程序员友好的方式将XML文件转换成PDF文件.iText还可以将包含CSS样式的HTML转换为PDF格式的文档. 目标: 实现 ...

  9. java pdf 转txt文件怎么打开_使用iText将TXT文件转换为PDF(保留格式)

    我正在尝试使用iText库将.txt文件转换为.pdf文件.我面临的问题如下: 我在txt文件中有清晰的格式,与此类似: TEXT ******************* Other text her ...

最新文章

  1. 虚拟化技术KVM的搭建
  2. Matlab中更改fig文件中线宽
  3. 7.12-7.19 id、w、who、last、lastb、lastlog
  4. Visual Studio 2005 快捷键
  5. android 判断进程是否处于前台
  6. 腾讯里约——数字化中台的基石
  7. shader weaver_Oracle通过邀请Weaver和Chin推动JavaFX向前发展
  8. python中格式化字符串_Python中所有字符串格式化的指南
  9. day26 java的集合(4)泛型 foreach Set和Map
  10. android shell强制删除文件夹_原来手机中的这些文件可以删除,难怪手机越用越卡!...
  11. win11系统安装打印机的方法
  12. 又被分治题卡住好几个小时!用最笨的方法搞懂分治法边界,告别死循环!
  13. linux 系统对信号的处理,Linux下的信号处理函数总结
  14. OC typedef(起别名)
  15. 3D物理引擎JiglibFlash
  16. 暑假学习打卡【2】——北理工乐学第一周第二周作业
  17. Java应用程序浏览器集成控件JxBrowser v7.18新版发布!
  18. 岭回归,Lasso回归和弹性网回归理论及特点
  19. 不可小视的head标签
  20. 计算机windows怎么开启,Win10怎么打开我的电脑_Win10正式版怎么打开我的电脑?-192路由网...

热门文章

  1. Jenkins_安装基础软件_入门试炼03
  2. python3-numpy数组切片和索引
  3. oracle检查外键依赖,Oracle中检查外键是否有索引的SQL脚本分享
  4. clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据
  5. C语言 #运算符 - C语言零基础入门教程
  6. java怎么写事件listener_java 事件监听器ActionListener
  7. lambda 流 peek java_JDK8 流与λ表达式
  8. nvme固态硬盘开机慢_为何我使用了固态硬盘开机速度还是需要20-30秒
  9. centos 卸载软件_Linux服务器运维必备技能 软件包和启动项超详细整理
  10. matlab的try函数,matlab – 是否可以在没有try块的情况下测试函数句柄?