iTextSharp创建Phrase时能否直接调用setFixedLeading生成PdfPCell
写法失效的原因
你的代码存在两个问题导致无法生效:
- 语法错误:C# 中在表达式内构造匿名对象不需要声明变量名,你写的
Phrase p("Lorem ipsum", myFont)属于非法语法,正确的匿名对象构造写法是new Phrase("Lorem ipsum", myFont)。 - 返回值不匹配:
Phrase.SetFixedLeading()方法的返回值是void,调用后不会返回当前的Phrase实例,自然无法把调用结果当做Phrase类型参数传给PdfPCell的构造函数。另外注意Java版iText的方法名是小驼峰setFixedLeading,C#版的iTextSharp方法名是大驼峰SetFixedLeading,不要混用。
实现内联设置Leading的方案
有两种常用方案可以满足你在新建Phrase时直接设置Leading的需求:
- 方案1:自定义扩展方法实现链式调用
给Phrase类加扩展方法,调用设置方法后返回实例本身,即可支持链式内联写法:// 扩展方法需要放在静态类中 public static class PhraseExtensions { public static Phrase WithFixedLeading(this Phrase phrase, float leading) { phrase.SetFixedLeading(leading); return phrase; } } // 最终调用写法 PdfPCell cell = new PdfPCell(new Phrase("Lorem ipsum", myFont).WithFixedLeading(10f)); - 方案2:封装静态工厂方法
不想用扩展方法的话,可以封装工厂方法统一生成配置好的Phrase对象:public static Phrase CreatePhraseWithLeading(string content, Font font, float leading) { var phrase = new Phrase(content, font); phrase.SetFixedLeading(leading); return phrase; } // 最终调用写法 PdfPCell cell = new PdfPCell(CreatePhraseWithLeading("Lorem ipsum", myFont, 10f));
内容的提问来源于stack exchange,提问作者Adam Wrόbel
相关产品推荐
相关产品推荐

