itext document.close(); 会报错,The document has no pages.

baidu_28726667 2016-12-22 11:17:08
import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.itextpdf.*;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;


public class test1 {
public static void main(String[] args) throws DocumentException, IOException {
File file1 = new File("d:\\o.txt");
FileInputStream in1 = new FileInputStream(file1);
//创建Document对象.
Document document = new Document();
//创建输出目标
PdfWriter.getInstance(document, new FileOutputStream("d:\\" + "SamplePDF.pdf"));
//打开Document.
document.open();
int c = in1.read();
System.out.print((char)c);
while(c!=-1){
c = in1.read();
//写入内容
document.add(new Paragraph((char)c));
if(c==-1)
break;
System.out.print((char)c);
}
in1.close();
//关闭document报错
document.close();
}
}



本身是想把文件从txt转成pdf格式, 另外因为涉及到中文是不是应该把inputstream和outputstream转换成datainputstream 和 dataoutputstream
...全文
2211 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序没有缘 2019-02-19
  • 打赏
  • 举报
回复
我按照3楼的代码写了个demo,发现中文问题并没有解决呀,中文甚至不显示。
bcsflilong 2016-12-23
  • 打赏
  • 举报
回复
引用 3 楼 baidu_28726667 的回复:
[quote=引用 2 楼 bcsflilong 的回复:]
import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
 
  
public class test1 {
    public static void main(String[] args) throws DocumentException, IOException {
        File file1 = new File("d:\\o.txt");
        FileInputStream in1 = new FileInputStream(file1);
        //创建Document对象.  
        Document document = new Document();  
        //创建输出目标  
        BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法二:使用iTextAsian.jar中的字体    
        //BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法三:使用资源字体(ClassPath)    
        ////BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        Font font = new Font(baseFont);  
        PdfWriter.getInstance(document, new FileOutputStream("d:\\" + "SamplePDF.pdf"));  
        //打开Document.  
        document.open();  
        byte[] bytes=new byte[in1.available()];
        in1.read(bytes);
        
        
       
        document.add(new Paragraph(new String(bytes),font));
        //关闭document报错
        document.close();
        in1.close();
    }
}
这样中文就可以了
感谢回答。 BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 这个里面. 第一个参数用的是windows字体, 第二个搜了下好像是编码。这个编码是中文必须用这个吗? 另外第三个NOT_EMBEDDED和EMBEDDED 究竟是影响了什么东西?!?![/quote]这个你查查API 目前就我所知 不设置字体 中文就可能不正常 另外两个 我一直这么些 没深究过
bcsflilong 2016-12-22
  • 打赏
  • 举报
回复
import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
 
  
public class test1 {
    public static void main(String[] args) throws DocumentException, IOException {
        File file1 = new File("d:\\o.txt");
        FileInputStream in1 = new FileInputStream(file1);
        //创建Document对象.  
        Document document = new Document();  
        //创建输出目标  
        BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法二:使用iTextAsian.jar中的字体    
        //BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法三:使用资源字体(ClassPath)    
        ////BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        Font font = new Font(baseFont);  
        PdfWriter.getInstance(document, new FileOutputStream("d:\\" + "SamplePDF.pdf"));  
        //打开Document.  
        document.open();  
        byte[] bytes=new byte[in1.available()];
        in1.read(bytes);
        
        
       
        document.add(new Paragraph(new String(bytes),font));
        //关闭document报错
        document.close();
        in1.close();
    }
}
这样中文就可以了
bcsflilong 2016-12-22
  • 打赏
  • 举报
回复
 File file1 = new File("d:\\o.txt");
        FileInputStream in1 = new FileInputStream(file1);
        //创建Document对象.  
        Document document = new Document();  
        //创建输出目标  
        PdfWriter.getInstance(document, new FileOutputStream("d:\\" + "SamplePDF.pdf"));  
        //打开Document.  
        document.open();  
        byte[] bytes=new byte[in1.available()];
        in1.read(bytes);
        
        
       
        document.add(new Paragraph(new String(bytes)));
        //关闭document报错
        document.close();
        in1.close();
这样不报错 但是不支持中文
baidu_28726667 2016-12-22
  • 打赏
  • 举报
回复
引用 2 楼 bcsflilong 的回复:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
 
  
public class test1 {
    public static void main(String[] args) throws DocumentException, IOException {
        File file1 = new File("d:\\o.txt");
        FileInputStream in1 = new FileInputStream(file1);
        //创建Document对象.  
        Document document = new Document();  
        //创建输出目标  
        BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法二:使用iTextAsian.jar中的字体    
        //BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        //方法三:使用资源字体(ClassPath)    
        ////BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            
        Font font = new Font(baseFont);  
        PdfWriter.getInstance(document, new FileOutputStream("d:\\" + "SamplePDF.pdf"));  
        //打开Document.  
        document.open();  
        byte[] bytes=new byte[in1.available()];
        in1.read(bytes);
        
        
       
        document.add(new Paragraph(new String(bytes),font));
        //关闭document报错
        document.close();
        in1.close();
    }
}
这样中文就可以了
感谢回答。 BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 这个里面. 第一个参数用的是windows字体, 第二个搜了下好像是编码。这个编码是中文必须用这个吗? 另外第三个NOT_EMBEDDED和EMBEDDED 究竟是影响了什么东西?!?!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧