如何解决如何使用 PDFBox2.0 打印日文字符?
我想使用 PDFBox2.0 在我的 PDF 中打印一些日文字符。我已经知道我可以加载一个 ttf 文件来显示日文字符。像这样:
InputStream fontGStream = new FileInputStream("C:\test\IPAexfont00401\ipaexg.ttf");
PDFont fontGothic = PDType0Font.load(doc,fontGStream,true);
但是我想创建一个新字体来支持使用 ttf 文件的日语即时。我试过它在 PDFBox1.8 中很有用,但在 PDFBox2.0 中代码再次不起作用。任何人都可以提供一些建议。
COSDictionary systeminfo = new COSDictionary();
systeminfo.setString(COSName.REGISTRY,"Adobe");
systeminfo.setString(COSName.ORDERING,"Japan1");
systeminfo.setInt(COSName.SUPPLEMENT,6);
PDFontDescriptorDictionary fd = new PDFontDescriptorDictionary();
fd.setFontName("MSゴシック");
fd.setFlags(4);
fd.setFontBoundingBox(new PDRectangle(new BoundingBox(-500,-300,1200,1400)));
fd.setItalicAngle(0);
fd.setAscent(1400);
fd.setDescent(-300);
fd.setCapHeight(700);
fd.setStemV(100);
COSDictionary cid = new COSDictionary();
cid.setItem(COSName.TYPE,COSName.FONT);
cid.setItem(COSName.SUBTYPE,COSName.CID_FONT_TYPE0);
cid.setItem(COSName.BASE_FONT,COSName.getPDFName("KozGoPr6N-Medium"));
cid.setItem(COSName.CIDSYSTEMINFO,systeminfo);
cid.setItem(COSName.FONT_DESC,fd);
COSDictionary font = new COSDictionary();
font.setItem(COSName.TYPE,COSName.FONT);
font.setItem(COSName.SUBTYPE,COSName.TYPE0);
font.setItem(COSName.BASE_FONT,COSName.getPDFName("KozGoPr6N-Medium"));
font.setItem(COSName.ENCODING,COSName.getPDFName("UniJIS-UCS2-H"));
COSArray array = new COSArray();
array.add(cid);
font.setItem(COSName.DESCENDANT_FONTS,array);
PDFont pdFont = new PDType0Font(font);
String str = "日本語出力テスト123";
stream.setFont(pdFont,40);
stream.beginText();
stream.moveTextPositionByAmount(100,100);
stream.drawString(new String(str.getBytes(Charset.forName("ISO-10646-UCS-2")),"ISO8859-1"));
stream.endText();
stream.close();
在 PDFBOX2.0 中,当我运行代码时,它输出以下错误。
Apr 13,2021 9:59:01 AM org.apache.pdfbox.pdmodel.font.PDCIDFontType0 <init>
WARNING: Using fallback BIZ-UDGothic-Bold for CID-keyed font KozGoPr6N-Medium
Exception in thread "main" java.lang.UnsupportedOperationException
at org.apache.pdfbox.pdmodel.font.PDCIDFontType0.encode(PDCIDFontType0.java:401)
at org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:443)
at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:333)
at org.apache.pdfbox.pdmodel.PDAbstractContentStream.showTextInternal(PDAbstractContentStream.java:300)
at org.apache.pdfbox.pdmodel.PDAbstractContentStream.showText(PDAbstractContentStream.java:254)
at org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:37)
at PDFBoxTest30.main(PDFBoxTest30.java:89)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。