Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含西里尔字母的itextpdf HTML到PDF_Java_Html_Pdf_Character Encoding_Itext - Fatal编程技术网

Java 包含西里尔字母的itextpdf HTML到PDF

Java 包含西里尔字母的itextpdf HTML到PDF,java,html,pdf,character-encoding,itext,Java,Html,Pdf,Character Encoding,Itext,关于这个问题,我问了另一个问题,但我没能使它起作用。我更改了代码,所以现在是这样的: import java.io.FileOutputStream; import java.io.StringReader; import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWo

关于这个问题,我问了另一个问题,但我没能使它起作用。我更改了代码,所以现在是这样的:

import java.io.FileOutputStream;
import java.io.StringReader;

import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
public class HTM {

    public static void main(String ... args ) {
        try {
            Document document = new Document(PageSize.LETTER);
            PdfWriter pdfWriter = PdfWriter.getInstance
                           (document, new FileOutputStream("C:\\testpdf.pdf"));
            document.open();

            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();

            String htmlString = "<html><head>"
                    + "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\" />"
                    + "</head><body>"
                    + "<h1>Zdravo Кристијан!</h1>"
                    + "</body></html>";


            worker.parseXHtml(pdfWriter, document, new StringReader(htmlString));
            document.close();
            System.out.println("Done.");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import java.io.FileOutputStream;
导入java.io.StringReader;
导入com.itextpdf.text.Document;
导入com.itextpdf.text.PageSize;
导入com.itextpdf.text.pdf.PdfWriter;
导入com.itextpdf.tool.xml.XMLWorkerHelper;
公共类HTM{
公共静态void main(字符串…参数){
试一试{
文档=新文档(页面大小.字母);
PdfWriter PdfWriter=PdfWriter.getInstance
(文件,新文件OutputStream(“C:\\testpdf.pdf”);
document.open();
XMLWorkerHelper worker=XMLWorkerHelper.getInstance();
字符串htmlString=“”
+ ""
+ ""
+“兹德拉沃!”
+ "";
parseXHtml(pdfWriter,document,newstringreader(htmlString));
document.close();
System.out.println(“完成”);
}
捕获(例外e){
e、 printStackTrace();
}
}
}

我的问题是pdf不显示西里尔字母。我知道如何使用不同的字符集和字体制作简单的pdf,但我想将html文件或字符串(在我的例子中是html字符串)转换为pdf。提前感谢。

根据@bruno lowagie的评论,您发布的代码只需稍加修改即可在Windows上运行。有关如何指定特定字体的更多信息,请参阅Bruno提出的示例

public class HTM {

    public static void main(String ... args ) {
        try {
            Document document = new Document(PageSize.LETTER);

            PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("testpdf.pdf"));
            document.open();

            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();

            String htmlString = "<html><head>"
                    + "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\" />"
                    + "</head><body>"
                    + "<p style=\"font-family:courier new\">" // the font to use
                    + "<h1>Zdravo Кристијан!</h1>"
                    + "</p>"
                    + "<h1>Zdravo Кристијан!</h1>"
                    + "</body></html>";

            worker.parseXHtml(pdfWriter, document, new StringReader(htmlString));
            document.close();
            System.out.println("Done.");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
public类HTM{
公共静态void main(字符串…参数){
试一试{
文档=新文档(页面大小.字母);
PdfWriter PdfWriter=PdfWriter.getInstance(文档,新文件输出流(“testpdf.pdf”);
document.open();
XMLWorkerHelper worker=XMLWorkerHelper.getInstance();
字符串htmlString=“”
+ ""
+ ""
+“

“//要使用的字体 +“兹德拉沃!” +“

” +“兹德拉沃!” + ""; parseXHtml(pdfWriter,document,newstringreader(htmlString)); document.close(); System.out.println(“完成”); } 捕获(例外e){ e、 printStackTrace(); } } }
我尝试了很多东西,但每次都错过了一些东西。谢谢@BrunoLowagie和@SubOptimal。这是我的代码,我让它为自定义字体运行。它还包含一个简单的html作为字符串,但是(在注释中)显示了如何使用实际的html和css文件

public class HtmlToPdf {
    public static final String DEST = "/home/christian/Desktop/testDoc.pdf";

    public void createPdf(String file) throws IOException, DocumentException {
        // step 1
        Document document = new Document();

        // step 2
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
        writer.setInitialLeading(12.5f);

        // step 3
        document.open();

        // step 4

        // CSS
        CSSResolver cssResolver = new StyleAttrCSSResolver();
        // CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream(CSS));
        // cssResolver.addCss(cssFile);

        // HTML
        XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
        fontProvider.register("fonts/Arimo-Regular.ttf");
        fontProvider.register("fonts/Arimo-Bold.ttf");
        fontProvider.register("fonts/Arimo-Italic.ttf");
        fontProvider.addFontSubstitute("lowagie", "Arimo");
        CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
        HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
        htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());

        // Pipelines
        PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
        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 FileInputStream(HTML));
        String htmlContent = " HERE GOES HTML CODE ";
        p.parse(new StringReader(htmlContent));
        // step 5
        document.close();
    }

    public static void main(String[] args) throws IOException, DocumentException {
        new D06_ParseHtmlFonts().createPdf(DEST);
    }
}

我注意到拥有
font系列很重要:支持所需编码的实际字体和电子邮件客户端始终使用内联css。

您确定使用的字体支持西里尔字母吗?阅读类似的问题。另外,你应该确保你的整个工具链都是为UTF-8设置的。是的。问题是我需要将html转换成pdf。我成功地完成了段落,但这不是我所需要的。你知道在我的例子中如何使用字体吗?是的,这里有很多例子:例如:,,和。如果你成功地让亚洲的例子发挥作用,那么西里尔语应该不会是一个问题。@BrunoLowagie非常感谢你。我以前看过你的例子,但我有一些错误,可能是因为我赶时间。无论如何,谢谢你,阿加尼尝试了你的代码,我很震惊我是多么接近一个解决方案。非常感谢。