2 qq 27889729 qq_27889729 于 2016.03.14 10:18 提问

html2pdf导出,windows下正常,linux下乱吗

本来直接用的jsoup,换了linux后乱码了,最后发现linux下读取个文件都乱码
linux下网页内容字节流保存本地xml文件正常没有乱码,然后读取文件就乱码了,
各位大神这啥原因啊,代码里编码都对应的,windows下都正常的,换linux就乱码了

public String convert2PDF() {
PdfContentByte content = null;
BaseFont base = null;
Rectangle pageRect = null;
String pdfPath = context
.getRealPath("/pdfIn/"
+ (new SimpleDateFormat("yyyyMMddHHmmssSSS")
.format(new Date()) + ".pdf"));
String outPath = context
.getRealPath("/pdfOut/"
+ (new SimpleDateFormat("yyyyMMddHHmmssSSS")
.format(new Date()) + ".pdf"));

    String fontPath = context.getRealPath("/font/msyh.ttf");
    String contextPath = context.getContextPath();
    //
    FileOutputStream fos;
    InputStream is;
    try {
        jsp = jsp == null ? "" : jsp;
        //
        URL url = new URL(jsp);
        byte bytes[] = new byte[1024 * 1000];

        String tmpXml = context.getRealPath("/tmpXml/"
                + (new SimpleDateFormat("yyyyMMddHHmmssSSS")
                        .format(new Date()) + ".html"));
        File xml = new File(tmpXml);
        if (!xml.getParentFile().exists())
            xml.getParentFile().mkdirs();
        if (!xml.exists())
            xml.createNewFile();

        int index = 0;
        is = url.openStream();
        int count = is.read(bytes, index, 1024 * 100);
        while (count != -1) {
            index += count;
            count = is.read(bytes, index, 1);
        }
        fos = new FileOutputStream(xml);
        System.out.println(index);
        fos.write(bytes, 0, index);
        // is.close();
        fos.close();
        FileInputStream fis = new FileInputStream(xml);
        InputStreamReader isr = new InputStreamReader(fis, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        StringBuffer sb = new StringBuffer();
        String line = "";
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        br.close();
        System.err.println(sb.toString());
        //TODO 读取本地文件乱码问题 
        org.jsoup.nodes.Document doc1 = Jsoup.parse(sb.toString());
        // org.jsoup.nodes.Document doc2 = Jsoup.parse(xml, "GBK");
        System.out.println(doc1.toString());
        // System.out.println(doc2.toString());
        File tmp = new File(pdfPath);
        if (!tmp.getParentFile().exists())
            tmp.getParentFile().mkdirs();
        // System.out.println("-- created -in===" + tmp.getPath());
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream(tmp));
        document.open();
        // Connection conn = Jsoup.connect(jsp);
        // conn.header(
        // "User-Agent",
        // "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36");
        // org.jsoup.nodes.Document doc = conn.timeout(5000).get();
        // doc1.select("div#getpdf").remove();
        InputStream in = new ByteArrayInputStream(doc1.toString().getBytes(
                "utf-8"));
        // System.out
        // .println("-- FileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStream");
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, in,
                Charset.forName("utf-8"));
        // System.out
        // .println("-- FileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileInputStream");
        document.close();
        File out = new File(outPath);
        if (!out.getParentFile().exists())
            out.getParentFile().mkdirs();
        if (!out.exists())
            out.createNewFile();
        System.out.println("-- created -out===" + out.getPath());
        PdfReader pdfReader = new PdfReader(tmp.getPath());
        PdfStamper pdfStamper = new PdfStamper(pdfReader,
                new FileOutputStream(out));
        //
        PdfGState gs = new PdfGState();
        base = BaseFont.createFont("STSong-Light",   "UniGB-UCS2-H",   BaseFont.NOT_EMBEDDED);

// base = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H,
// BaseFont.NOT_EMBEDDED);
System.out.println("-- -fontPath===" + fontPath);
if (base == null || pdfStamper == null) {
msg = "文件生成失败!";
ActionContext.getContext().put("msg", msg);
path = "error";
}
// 设置透明度为0.4
gs.setFillOpacity(0.4f);
gs.setStrokeOpacity(0.4f);
int toPage = pdfStamper.getReader().getNumberOfPages();
for (int i = 1; i <= toPage; i++) {
pageRect = pdfStamper.getReader().getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = pageRect.getWidth() / 2;
float y = pageRect.getHeight() / 2;
// 获得PDF最顶层
content = pdfStamper.getOverContent(i);
content.saveState();
// set Transparency
content.setGState(gs);
content.beginText();
content.setColorFill(BaseColor.GRAY);
content.setFontAndSize(base, 60);
// 水印文字成45度角倾斜
content.showTextAligned(Element.ALIGN_CENTER, "eeeee", x, y, 45);
content.endText();
}
//
pdfStamper.close();
// tmp.delete();
// path = jsp.split(contextPath)[0] + contextPath+"/"+
// out.getPath().replace("\",
// "/").split(contextPath)[1].split("/")[1]+"/"+out.getPath().replace("\",
// "/").split(contextPath)[1].split("/")[2];
path = out.getPath().replace("\", "/").split("pdfOut")[0]
+ "pdfOut/$"
+ out.getPath().replace("\", "/").split("pdfOut")[1]
.split("/")[1];
System.out.println("-- created -pdf path===" + path);
} catch (Exception ex) {
ex.printStackTrace();
msg = "文件生成异常!";
ActionContext.getContext().put("msg", msg);
path = "error";
} finally {
content = null;
base = null;
pageRect = null;
}
return SUCCESS;

}

2个回答

u012377333
u012377333   Rxr 2016.03.29 20:11

在linux下和win下面的文件格式不一样的,你读写文件的方式可能有问题

fieldwolf21
fieldwolf21   2016.04.20 13:05

我也遇到了这个问题,你是如何解决的呢?求分享

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用itext转换html2pdf
1、pom文件首先要引用             com.itextpdf             itextpdf             5.5.10                             com.itextpdf             itext-asian             5.2.0                      
POI excel 导出,在window和linux环境下面运行结果不一样
POI excel 导出,在window和linux环境下面运行结果不一样  报错: The maximum column width for an individual cell is 255 characters. java.lang.IllegalArgumentException: The maximum column width for an individual cell
Java HTML导出PDF (二)
转自:http://huangronaldo.iteye.com/blog/1555917 对于java中如何从html中直接导出pdf,有很多的开源代码,这里个人用itext转。 首先需要的包有:core-renderer-1.0.jar core-renderer-R8pre1.jar core-renderer.jar iText-2.0.8.jar
导出pdf之--html2canvas
html转成pdf,下载(html2canvas 和 jsPDF) 最近碰到个需求,需要把当前页面生成pdf,并下载。弄了几天,自己整理整理,记录下来 https://github.com/linwalker/render-html-to-pdf  https://github.com/linkamnal/Html2Pdf  在这里向大家道歉了,因为这个Demo是有瑕疵的,比如它不支持
html2pdf_中文
PHP中,htm导出成pdf..........
iText 7 html2pdf 使用总结
iText7 html2pdf 使用总结
linux服务器上下载的csv文件在window环境下用excel打开的乱码问题解决
【问题产生原因】 Excel默认并不是以UTF-8来打开文件,所以在csv开头加入BOM,告诉Excel文件使用utf-8的编码方式。 【核心代码】 response.setContentType("application/force-download;charset=utf-8");// 设置强制下载不打开 response.addHeader("Content-Dispositi
html2pdf支持图片及中文
官网的html2pdf不支持中文,根据底层tcpdf实现中文的支持。 这个是最简版的示例,html2pdf完整的示例代码,可以参见 https://github.com/cychai/html2pdf
解决Windows记事本打开Linux程序注释乱码排版混乱的问题
本人彻彻底底小白一枚,前来科普下这个还算大众化的问题,大神绕过 ~~ 有说错的地方,欢迎指正 ~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 大家都知道,Linux下的文本默认采用UTF-8格式,而Windows下一般是ANSI格式。 本来大家相安无事,
使用pd4ml 将html转换为pdf html2pdf
package com.xhb.jack; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Rende