使用itext在单个pdf中打印所有语言
嗨,我想在一个pdf中打印所有语言。我的代码如下。我无法在我的pdf中看到除英语以外的任何字符。请检查附件中生成的pdf 我不明白真正的问题在哪里使用itext在单个pdf中打印所有语言,itext,xmlworker,Itext,Xmlworker,嗨,我想在一个pdf中打印所有语言。我的代码如下。我无法在我的pdf中看到除英语以外的任何字符。请检查附件中生成的pdf 我不明白真正的问题在哪里 import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; import com.itextpdf.tex
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.ElementList;
import com.itextpdf.tool.xml.XMLWorker;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.css.StyleAttrCSSResolver;
import com.itextpdf.tool.xml.html.CssAppliers;
import com.itextpdf.tool.xml.html.CssAppliersImpl;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CSSResolver;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.ElementHandlerPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
public class ParseHtml7 {
public static final String DEST = "arabic.pdf";
public static final String HTML = "<html><head></head><body style=\"font-size:12.0pt; font-family:Times New Roman\">"+ "<p>This is hindi language testपरीक्षण </p> "
+"<p>This is tamil language test சோதனை </p>"
+"<p> This is maly language test ujian </p>"
+"<p> This is thai language test ทดสอบ</p>"
+"<p> This is viyatamese language test thử nghiệm</p>"
+"<p> This is khmer language test ការធ្វើតេស្ត</p>"
+"<p> This is arabic language test اختبار</p>"
+"<p> This is french language test tester</p>"
+"<p> This is russian language test контрольная работа</p>"
+"<p> This is korean language test 테스트</p>"
+"<p> This is japanese language test テスト</p>"
+" <p>This is chinese language test 测试</p>"
+"</body></html>";
public static void main(String\[\] args) throws IOException, DocumentException {
File file = new File(DEST);
//file.getParentFile().mkdirs();
new ParseHtml7().createPdf(DEST);
}
/**
* Creates a PDF with the words "Hello World"
* @param file
* @throws IOException
* @throws DocumentException
*/
public void createPdf(String file) throws IOException, DocumentException {
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
// step 3
document.open();
// step 4
// Styles
CSSResolver cssResolver = new StyleAttrCSSResolver();
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//fontProvider.register("resources/fonts/NotoNaskhArabic-Regular.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/FreeSans.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/THSarabunNew.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/Kh-Content.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/THSarabunNew Italic.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/THSarabunNew BoldItalic.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/THSarabunNew Bold.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/arial.ttf");
fontProvider.register("/Users/user/Downloads/MyFonts/FreeSans.ttf");
fontProvider.register( "/Users/user/Downloads/MyFonts/NotoSansCJKsc-Regular.otf");
fontProvider.register( "/Users/user/Downloads/MyFonts/arialuni.ttf");
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// Pipelines
ElementList elements = new ElementList();
ElementHandlerPipeline pdf = new ElementHandlerPipeline(elements, null);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(new ByteArrayInputStream((HTML.toString().getBytes("UTF-8"))), Charset.forName("UTF-8"));
PdfPTable table = new PdfPTable(1);
PdfPCell cell = new PdfPCell();
for (Element e : elements) {
System.out.println(e);
cell.addElement(e);
}
table.addCell(cell);
document.add(table);
// step 5
document.close();
}
}[![enter image description here][1]][1]
import java.io.ByteArrayInputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.nio.charset.charset;
导入com.itextpdf.text.Document;
导入com.itextpdf.text.DocumentException;
导入com.itextpdf.text.Element;
导入com.itextpdf.text.pdf.PdfPCell;
导入com.itextpdf.text.pdf.PdfPTable;
导入com.itextpdf.text.pdf.PdfWriter;
导入com.itextpdf.tool.xml.ElementList;
导入com.itextpdf.tool.xml.XMLWorker;
导入com.itextpdf.tool.xml.XMLWorkerFontProvider;
导入com.itextpdf.tool.xml.css.StyleAttrCSSResolver;
导入com.itextpdf.tool.xml.html.CssAppliers;
导入com.itextpdf.tool.xml.html.CssAppliersImpl;
导入com.itextpdf.tool.xml.html.Tags;
导入com.itextpdf.tool.xml.parser.XMLParser;
导入com.itextpdf.tool.xml.pipeline.css.CSSResolver;
导入com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
导入com.itextpdf.tool.xml.pipeline.end.ElementHandlerPipeline;
导入com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
导入com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
公共类解析HTML7{
公共静态最终字符串DEST=“arabic.pdf”;
公共静态最终字符串HTML=“”+”这是印地语测试परीक्षण "
+“这是泰米尔语考试சோதனை "
+“这是maly语言测试ujian”
+“这是泰语考试ทดสอบ "
+“这是viyatamese语言测试ử nghiệm”
+“这是高棉语测试ការធ្វើតេស្ត "
+“这是阿拉伯语考试”
+“这是法语测试仪”
+“这是俄语考试”
+“这是韩国语考试테스트 "
+“这是日语考试テスト "
+“这是中文考试测试 "
+"";
公共静态void main(字符串\[\]args)引发IOException、DocumentException{
文件文件=新文件(DEST);
//文件.getParentFile().mkdirs();
新建ParseHtml7().createPdf(DEST);
}
/**
*创建包含“Hello World”字样的PDF
*@param文件
*@抛出异常
*@DocumentException
*/
public void createPdf(字符串文件)引发IOException,DocumentException{
//第一步
文档=新文档();
//步骤2
PdfWriter writer=PdfWriter.getInstance(文档,新文件输出流(文件));
//步骤3
document.open();
//步骤4
//风格
CSSResolver CSSResolver=新样式AttrCSSResolver();
XMLWorkerFontProvider fontProvider=新的XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//register(“resources/fonts/notonasharabic Regular.ttf”);
注册(“/Users/user/Downloads/MyFonts/FreeSans.ttf”);
注册(“/Users/user/Downloads/MyFonts/THSarabunNew.ttf”);
注册(“/Users/user/Downloads/MyFonts/Kh Content.ttf”);
注册(“/Users/user/Downloads/MyFonts/THSarabunNew Italic.ttf”);
注册(“/Users/user/Downloads/MyFonts/THSarabunNew BoldItalic.ttf”);
注册(“/Users/user/Downloads/MyFonts/thsarbunnew Bold.ttf”);
注册(“/Users/user/Downloads/MyFonts/arial.ttf”);
注册(“/Users/user/Downloads/MyFonts/FreeSans.ttf”);
注册(“/Users/user/Downloads/MyFonts/NotoSansCJKsc Regular.otf”);
注册(“/Users/user/Downloads/MyFonts/arialuni.ttf”);
CssAppliers CssAppliers=新的CssAppliersImpl(fontProvider);
//HTML
HtmlPipelineContext htmlContext=新的HtmlPipelineContext(cssAppliers);
setTagFactory(Tags.getHtmlTagProcessorFactory());
//管道
ElementList elements=新的ElementList();
ElementHandlerPipeline pdf=新ElementHandlerPipeline(元素,空);
HtmlPipeline html=新的HtmlPipeline(htmlContext,pdf);
CssResolverPipeline css=新的CssResolverPipeline(cssResolver,html);
//XML工作者
XMLWorker=newxmlworker(css,true);
XMLParser p=新的XMLParser(worker);
p、 解析(新的ByteArrayInputStream((HTML.toString().getBytes(“UTF-8”)))、Charset.forName(“UTF-8”);
PdfPTable table=新的PdfPTable(1);
PdfPCell cell=新的PdfPCell();
对于(元素e:元素){
系统输出打印ln(e);
单元。附加元素(e);
}
表2.addCell(cell);
文件。添加(表);
//步骤5
document.close();
}
}[![在此处输入图像描述][1][1]
@Bruno Lowagie:注册字体的方式是否错误您注册了不同的字体(freeans
,THSarabunNew
,NotoSansCJKsc
,…),但您从不使用它们。您只能在HTML中使用font-family:Times New Roman
。这永远不会起作用。@BrunoLowagie:虽然我从正文中删除了style=\“font-size:12.0pt;font-family:Times-New-Roman\”但它不起作用tag@BrunoLowagie:是否需要设置每个元素块中的每个字体?您需要为每个(或每个
,或每个
)。人们通常在FontProvider
中使用MS Arial Unicode
(他们使用arialuni.ttf
呈现所有内容,而不考虑fon)