【发布时间】:2011-06-23 13:07:59
【问题描述】:
我必须从 HTML 源创建 PDF 文件。目前,我正在处理有关输出文件中特殊(抛光)字符的问题,正是缺少它们。
HTML 源代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table width="100%" border="0.5" align="center" cellpadding="0" style="border-collapse:collapse; border:1px solid black; font-family:Arial, Helvetica, sans-serif; font-size:16px">
<tr>
<td align="center" ><b>Test: ąęłóćńśŁÓŃĆŻŹąśżźłęó</b></td>
</tr>
</table>
Java 源代码:
Document document = new Document(PageSize.A4, 38, 38, 50, 38);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("iTextExample.pdf"));
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(readFileAsString("index.html")));
document.close();
public static String readFileAsString(String filePath) throws IOException {
DataInputStream dis = new DataInputStream(new FileInputStream(filePath));
try {
long len = new File(filePath).length();
if (len > Integer.MAX_VALUE) {
throw new IOException("File " + filePath + " too large, was " + len + " bytes.");
}
byte[] bytes = new byte[(int) len];
dis.readFully(bytes);
return new String(bytes, "UTF-8");
} finally {
dis.close();
}
}
我的问题是:如何将默认字体(Helvetica)更改为例如。整个 PDF 文档中的 Arial 粗体?
我测试了许多与 StyleSheet 相关的示例,但没有一个有效。我必须更改默认字体,因为没有波兰语字符 - 我希望这是可行的解决方案。
编辑:
class defaultFontProvider extends FontFactoryImp {
private String _default;
public defaultFontProvider(String def) {
_default = def;
}
public Font getFont(String fontName, String encoding, boolean embedded, float size, int style, BaseColor color, boolean cached) {
if (fontName == null || size == 0) {
fontName = _default;
}
return super.getFont(fontName, encoding, embedded, size, style, color, cached);
}
}
上面的代码嵌入了arial.ttf,这没问题,但是我如何使它成为整个文档的默认字体(而不是Helvetica)。
那么..
Map<String,Object> providers = new HashMap<String, Object>();
defaultFontProvider dfp = new defaultFontProvider("arial.ttf");
providers.put(HTMLWorker.FONT_PROVIDER, dfp);
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.setProviders(providers);
【问题讨论】:
-
我们可以在使用 HTML 和 CSS 文件中的 iText 创建
PDF/A-2文档时这样做吗? -
@Sumit 看这个例子:developers.itextpdf.com/examples/…
-
这个例子不是从 HTML 和 CSS 文件创建的,我在使用 XMLWorker 时卡住了,你能看看我的问题stackoverflow.com/q/52736441/3169868
标签: java html character-encoding itext