android html转pdf工具,android – 使用iText库将html转换为pdf时未应用hr的内联CSS
我是.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相关推荐
- itext html转换为pdf排版错乱,使用iText库将html转换为pdf时不适用hr的Inline CSS
我是一个.NET开发人员,所以该代码是在C#.但是你应该可以轻松地翻译以下内容. iText是一个PDF优先库,而[X]HTML解析相当复杂,所以它在这方面不是全功能.每当解析[X]HTML,事情不会 ...
- android启动界面修改工具,Android 系统界面调节工具使用及功能
Android 系统界面调节工具(Android System UI Tuner)是个隐藏功能,里面有一些实验性功能,可以辅助平时开发. 1. 打开 系统界面调节工具是个隐藏功能,打开他说简单也简单, ...
- java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...
Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...
- node将html转为pdf,将node.js中的html文件转换为pdf并将其写入磁盘
经过this链接.. 这里u能HTML文件转换成PDF或HTML内容为PDF import NDHTMLtoPDF.h并从上面源链接NDHTMLtoPDF.m 通HTML文件的路径在这里生成PDF . ...
- 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )
文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...
- android studio 反编译工具,android studio反编译工具jd-inteIIij
Android Studio 自带了Java Bytecode Decompiler 对于第三方的jar只能反编译出其函数名 例如:andbase里的com.kfb.c.jar下的com.kfb.c下 ...
- android支付宝签名生成工具,Android支付宝支付的示例代码
上一篇,我们已经详细讲解了Android微信支付,今天接着为大家带来支付宝支付,支付宝支付相对微信支付要简单一些,吐槽一下,而且支付宝文档确实比微信的文档好了不少,下面开始讲解支付流程. 1.首先给出 ...
- JAVA常用API或编程工具001---ITEXT把html转换成pdf的jar包,使用Java将HTML转换为PDF
iText "XML Worker"允许开发人员以一种程序员友好的方式将XML文件转换成PDF文件.iText还可以将包含CSS样式的HTML转换为PDF格式的文档. 目标: 实现 ...
- java pdf 转txt文件怎么打开_使用iText将TXT文件转换为PDF(保留格式)
我正在尝试使用iText库将.txt文件转换为.pdf文件.我面临的问题如下: 我在txt文件中有清晰的格式,与此类似: TEXT ******************* Other text her ...
最新文章
- 虚拟化技术KVM的搭建
- Matlab中更改fig文件中线宽
- 7.12-7.19 id、w、who、last、lastb、lastlog
- Visual Studio 2005 快捷键
- android 判断进程是否处于前台
- 腾讯里约——数字化中台的基石
- shader weaver_Oracle通过邀请Weaver和Chin推动JavaFX向前发展
- python中格式化字符串_Python中所有字符串格式化的指南
- day26 java的集合(4)泛型 foreach Set和Map
- android shell强制删除文件夹_原来手机中的这些文件可以删除,难怪手机越用越卡!...
- win11系统安装打印机的方法
- 又被分治题卡住好几个小时!用最笨的方法搞懂分治法边界,告别死循环!
- linux 系统对信号的处理,Linux下的信号处理函数总结
- OC typedef(起别名)
- 3D物理引擎JiglibFlash
- 暑假学习打卡【2】——北理工乐学第一周第二周作业
- Java应用程序浏览器集成控件JxBrowser v7.18新版发布!
- 岭回归,Lasso回归和弹性网回归理论及特点
- 不可小视的head标签
- 计算机windows怎么开启,Win10怎么打开我的电脑_Win10正式版怎么打开我的电脑?-192路由网...
热门文章
- Jenkins_安装基础软件_入门试炼03
- python3-numpy数组切片和索引
- oracle检查外键依赖,Oracle中检查外键是否有索引的SQL脚本分享
- clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据
- C语言 #运算符 - C语言零基础入门教程
- java怎么写事件listener_java 事件监听器ActionListener
- lambda 流 peek java_JDK8 流与λ表达式
- nvme固态硬盘开机慢_为何我使用了固态硬盘开机速度还是需要20-30秒
- centos 卸载软件_Linux服务器运维必备技能 软件包和启动项超详细整理
- matlab的try函数,matlab – 是否可以在没有try块的情况下测试函数句柄?