使用itext在单个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

嗨,我想在一个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.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)