我正在使用pdfbox 1.8,我试图用中文填写pdf表格,但我得到的只是奇怪的字符。我得到了一个ttc文件(uming.ttc),并使用字体伪造导出了ttf文件(现在我正在尝试只使用导出的字体之一)。
字体的加载是使用
InputStream is = ..
PDTrueTypeFont font = PDTrueTypeFont.loadTTF(doc, is);
我正在使用以下代码编写pdf字段(我在stackoverflow中找到了它,但目前我找不到它)
protected void setPDFFieldAndFont(String fieldName, String keyFontName, Object... values) {
try {
PDField pdField = pdfForm.getField(fieldName);
if (pdField == null) {
return;
}
// append fields to create a new textfield
Filler filler = new Filler();
filler.append(values);
String textFieldString = filler.toString();
String fontName = key2FontName.get(keyFontName);
COSDictionary dict = pdField.getDictionary();
COSString defaultAppearance = (COSString) dict
.getDictionaryObject(COSName.DA);
if (defaultAppearance != null)
{
dict.setString(COSName.DA, "/" + fontName + " 11 Tf");
}
if (pdField instanceof PDTextbox)
{
PDTextbox textbox = new PDTextbox(pdfForm, dict);
//PDTextbox textbox = (PDTextbox) pdField;
textbox.setValue(textFieldString);
}
} catch (IOException e) {
throw new IllegalStateException("Invalid field name: " + fieldName, e);
}
}
我读到pdfbox2.0支持Unicode我需要使用这个新版本吗?
使用font-forge,我看到我的ttf字体编码为ISO-10646-1。
谢谢你的帮助
编辑
按照蒂尔曼·豪瑟尔的要求,我尝试了嵌入字体。java和它的工作原理很好,但我填写表格的方式不同。我创建了一个主要示例:
public static void main(String[] args) throws IOException {
String pdfform = "D:\\form.pdf";
PDDocument doc = PDDocument.load(new File(pdfform));
PDType0Font font = PDType0Font.load(doc, new File("D:\\fonts\\UMingCN.ttf"));
PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
PDResources res = acroForm.getDefaultResources();
if (res == null){
res = new PDResources();
}
COSName fontName = res.add(font);
acroForm.setDefaultResources(res);
PDField pdField = acroForm.getField("personalInformation_fullName");
if (pdField == null) {
return;
}
COSDictionary dict = pdField.getCOSObject();
COSString defaultAppearance = (COSString) dict.getDictionaryObject(COSName.DA);
if (defaultAppearance != null)
{
dict.setString(COSName.DA, "/" + fontName.getName() + " 11 Tf");
}
if (pdField instanceof PDTextField)
{
PDTextField textbox = new PDTextField(acroForm);
textbox.getCOSObject().addAll(dict);
textbox.setValue("保保保");
}
doc.save("example2.pdf");
doc.close();
}
但它并不能填满任何东西。在调试中,代码进入文本框。setValue,但保存的pdfform没有在pdf中设置的值。也许我错过了什么。。
再次感谢
我解决了PdfBox和中文(日文、韩文和任何其他字体)的问题,将文本转换为图像,如下所示
void writeLine(String text, int x, int y, int width, int height,
Font font, Color color, PDPageContentStream contentStream, PDDocument document) throws IOException {
try (
ByteArrayOutputStream baos = new ByteArrayOutputStream()
) {
int scale = 2;
BufferedImage img = new BufferedImage(width * scale, height * scale, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2d.setFont(font);
g2d.setColor(color);
g2d.scale(scale,scale);
g2d.drawString(text, 0, g2d.getFontMetrics().getAscent());
g2d.dispose();
ImageIO.write(img, "png", baos);
baos.flush();
baos.close();
contentStream.drawImage(PDImageXObject.createFromByteArray(
document,baos.toByteArray(), ""), x, y, width, height);
}
}
我正在使用以下设置: > pdfbox 2.0.15 目标:呈现包含中文字符的pdf 问题:java.lang.IllegalArgument异常:U 674E在此字体的编码中不可用 我已经试过了: > 使用不同的字体支持汉字。最新的一款是KTC普通版。ttf 将字体设置为unicode,如下所述:Java:使用PDFBox将国家字符写入PDF,但是不推荐使用loadTTF方法。 使用Arial-
本文向大家介绍java实现汉字转unicode与汉字转16进制实例,包括了java实现汉字转unicode与汉字转16进制实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现汉字转unicode与汉字转16进制的实现方法。分享给大家供大家参考。具体实现方法如下: 一、汉字转unicode 二、汉字转16进制 希望本文所述对大家的Java程序设计有所帮助。
这就是我想做的: > 使用pdfbox制作2个不同的pdf文件 使用pdfmerger将这两个文件合并在一起 如果要将#1保存到服务器端本地硬盘并加载#2的文件,我知道如何执行此操作。但我想做的是使用“直接从内存”。我已经搜索了这个pdfboxes中的所有方法,但仍然找不到它。 这是我从本地文件获取的代码 谢谢你。
PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具。 主要特性包括: 从PDF提取文本 合并PDF文档 PDF 文档加密与解密 与Lucene搜索引擎的集成 填充PDF/XFDF表单数据 从文本文件创建PDF文档 从PDF页面创 建图片 打印PDF文档
汉兜即汉字 Wordle,是一款填字游戏。 《Wordle》是一款网页文字游戏。 在《Wordle》中,玩家要在一天内用六次机会内猜中某个有五字英文字母的词汇。每次尝试后,玩家可能得到三种反馈:绿色表示字母位置正确;黄色表示答案包含该字母但位置错误;灰色表示答案没有该字母。
NativeScript PdfBox Apache Pdfbox for NativeScript. This plugin allows you to extract the text from a PDF file. ALPHA version. Android only (iOS may come in the future, PR are welcome). The screenshot