iText 用 HTMLWorker 转换 HTML 为 PDF 时可设置表格列宽度

生成 pdf 的方式有多种,直接用 iText 编码控制产生,fop 转换,不过我觉得很方便的一种方法就是用 iText 的 HTMLWorker 类直接把 HTML 转换成相应的 PDF 文档,HTMLWorker 可支持图片和表格,一定数量的样式控制。这样可以让我们关注到 HTML 页面设计上,至于转换出来的效果就要看母版 HTML 的设计功底了。要知道这个 HTML 中的样式要让 HTMLWorker 可理解的,并非说能支持 CSS2 还是 CSS3。HTMLWorker 能支持的样式还是非常有限,并且还未文档化的,有些多试试,能看看源代码是自然可以让胸中更有数了。

项目中有一个比较迫切的问题是把 HTML 中的表格转换成 PDF 的 PdfPTable 时,无论是在 <td> 上用 width="xxx" 或是 style="width:xxx" 时都看不到宽度的设置效果,iText 总是让生成的 PdfPTable 平均分配单元格宽度的。这对于单元格宽度有过于悬殊的需求是无法妥协的,所以要一种办法来支持自定义单元格宽度,让 width="xxx"  或是 style="width:xxx" 有一种控制能力就行。又得改源代码了,网上找到了是支持 iText 2.1.7 的改法,本篇是针对 iText 5.0.4 的做法,使支持 width="10%" 百分比来控制单元格宽度。 阅读全文 >>

Windows 下推荐使用的端口转发(映射/重定向)工具:PassPort

前一篇里 Windows 和 Linux 平台下的端口转发工具 介绍 Windows 下的端口重定向工具有 rinited 和 FPipe,rinited 可以同时应用多个规则,FPipe 一个命令一个规则,它们都是命令行的。

本文中介绍另一款更好用的端口重定向工具 PassPort, 它是免费开源的,图形界面的,支持 TCP/UDP、配置简单,可配置多组映射规则,可作为 Windows 系统服务运行。

下载地址是:http://sourceforge.net/projects/pjs-passport/。安装后运行界面如下: 阅读全文 >>

Windows 和 Linux 平台下的端口转发工具

这里记录一下我曾经使用过的几个端口转发工具,即端口映射、端口重定向,和 NAT 也是差不多的概念。

Linux 下用过 iptables,rinetd;Windows 下用过某个防火墙的 NAT 功能、RemoteAnywhere 的端口重定向、FPipe,还有最近刚找到的 PassPort。试着去设置一下 Windows 2000 的 NAT  功能,但未成功,还是特定的软件简单易用,下面介绍逐一介绍下。

iptables 的功能当然强大,但理解与设置却有点抽象,曾用它进行过透明代理上网,见:Linux 下仅用 iptables 实现为透明代理服务器。真要用它进行端口重定向太麻烦,会用它当然很方便的,在 Linux  平台下是开箱即用的,很多机器都安装了它。 阅读全文 >>

理解 Java 正则表达式怪异的 \\ 和 \\\\,让您见怪不怪

Java 语言里的几大变革,一为 jdk1.4 引入的正则表达式,jdk1.5 引入的泛型。没有泛型之前有不少人曾想方设法从编译器入手让 Java 支持泛型。说到泛型  Perl 无疑是该方面的佼佼者,虽然我们不要求 Java 的正则表式能像 Perl 那样可以用来写诗,但至少能有 JavaScript 好用些,可是还不如。JavaScript 里 // 两斜线一框就是一个模式,分组和后向引用更方便,当然前面那两家伙是动态的,不太好比。

复杂的用法不说,且说 Java 的正则表达式在匹配点(.)  和斜杠(\),表达式要分别写作 \\. 和 \\\\,难看些,不好理解。幸好还有些人记住了,匹配点(.) 或  {、[、(、?、$、^ 和 * 这些特殊符号要要前加双斜框,匹配 \ 时要用四斜杠,这确实能让你包走天涯的。那么为什么是这样呢,不是一个斜杠、三个或更多呢,所以知其然还要知其所以然,这样才能每次心中有数,方能以一变应万变。 阅读全文 >>

本博客前几日又完成一次搬迁--历数博客搬迁之路

本博客再次完成了一次搬迁,从 BlogHost主机 SoftLayer达拉斯机房 到 加州硅谷T2机房 的搬迁,这一次搬迁相比前两次容易得多,因为仅仅是 WordPress 程序和数据的转移。国为达拉斯的服务器访问起来较慢,所以需搬动一下提提速。

主要是国内的主机贵且对备案什么的很反感,所以一直没考虑用国内的主机,不然国内主机供国人访问是要快得多。虽然可以曲线方式进行备案,但基于现在的白名单政策,仍然会让人焦虑,每加一个二级域名都得通知一声机房。那等于是即使域名解析支持泛域名解析,但接入到机房这一关也是白搭。

所以只好在国外主机里挪来挪去,看以后考虑香港、马来西亚也是个不错的选择。 阅读全文 >>

用 CSS 的伪类 hover 轻易实现 js 的 mouseover/mouseout 功能

原来做过一个在 html 表格中,当鼠标悬停在某行时,该行出行操作按钮,其他行的操作按钮隐藏。那时候的实现思想是当 onmouseover 在某行时,循环所有行,全隐藏掉按钮,再显示该行的。偶尔还得用下 onmouseourt 事件,现在想来这种实现会很影响页面效率的。

前几日看 WordPress 的后台列表,对相应记录的操作也使用了该功能,鼠标停在哪一行就只出现该行的可操作按钮,曾以为是用 js 实现的,看到要隐现的元素是 <div class="row-actions">edit|trash...</div>,还在 js 文件里搜索过 row-actions 字符串。忙了一会儿才把目光转移到了 css 中找实现,在 wp-admin/css/wp-admin.css 中找到像下面的样式: 阅读全文 >>

让 All in One SEO Pack 插件适用于截取中文描述

建议看过这里来 WordPress 插件 All in One SEO Pack 生成中文描述的解决

对于 SEO 来说,Title、Description、Keywords 是很重要的,尤其是前两者,它们直接反应在搜索引擎的条目中。对于英文博客来说 All in One SEO Pack 是做得很不错的,自动截取的描述完全能胜任。然而中文字符集的问题,依然按照英文那样来计算长度截取描述的话,你会发现在搜索引擎出来的条目中描述基本过短,因为 UTF8 的字符基本是一个顶 3。

所以要用这个插件来支持中文博客,那就得改,改改更健康。很多人说 All in One SEO Pack 影响了 Baidu 的收录,我不觉得,因为我一直用它,挺好的。

下面说说怎么来改它使之更好的支持中文,需要改动的文件只有一个,就是 aioseop.class.php。这里所针对的版本是今天的最新版 1.6.13,有三处要改动。 阅读全文 >>

如何在 js 代码中使用 jsp 标签或 Java 代码

JSP 标签还是很方便的,比如 Struts、Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算。比如 struts2 的 <s:url value="/admin/unmi.action"/> 会为我们自动在前面附加上应用上下文,如实际会生成 /testsite/admin/unmi.action。还有更多更方便的标签使用,比如用标签获取到 session 或请求中的数据作为 js 的变量等。 

引申此话题的,其实不光是在 JS 中使用 JSP 标签,可用 JSP 标签的地方当然可以直接写 Java 代码,即 ScriptLet 代码。 阅读全文 >>

xampp 错误:Deprecated: Assigning the return value of new by reference is deprecated

WordPress 3.0.1 之前是在 xampp 1.7.1 中运行的,没什么问题,php 版本为 5.2.9。后来升级 xampp 到 1.7.3 版,打开网站最上方出现提示:

Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\footnoted\wp-content\plugins\simple-tags\inc\client.php on line 1700

这是插件 simple-tags 里的代码,定位到该行是:

$error = & new WP_Error('invalid_taxonomy', __('Invalid Taxonomy'));

而 WP_Error 是用 function 进行定义的:

function WP_Error($code = '', $message = '', $data = '') 阅读全文 >>

Spring 3.0.5.RELEASE 版悄无声息的发布了

Spring 3.0.5 Release 版在 2010-10-20 悄然发布,真正支持了 Hibernate 3.6 Final。在常去的几个网站都没看到相关信息,而且在 Spring 的官方网站上也是小声细作,好不容易才翻出一个 changelog 出来:http://static.springsource.org/spring/docs/3.0.x/changelog.txt

可在 http://ebr.springsource.com/repository/app/bundle/version/detail?name=org.springframework.core&version=3.0.5.RELEASE 下载,

假如你是用 Ivy 管理依赖,请添加:

<dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" />

用 Maven 管理依赖的话,pom.xml 加: 阅读全文 >>