首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML到PDF转换

HTML到PDF转换
EN

Stack Overflow用户
提问于 2013-09-16 10:28:38
回答 4查看 2.1K关注 0票数 0
代码语言:javascript
复制
package example;

import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.html.simpleparser.StyleSheet;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

/*import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPTable;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.html.simpleparser.StyleSheet;
import com.lowagie.text.pdf.PdfWriter;*/

public class clas3 {
  public static void main(String[] args) throws Exception, IOException {
    Document document = new Document();
    StyleSheet st = new StyleSheet();
    st.loadTagStyle("body", "encoding", "30,10");
    PdfWriter.getInstance(document, new FileOutputStream("C:/Users/Jason/Desktop/html4.pdf"));
    document.open();
    try{HTMLWorker htmlWorker = new HTMLWorker(document); 
    FileReader xy=new FileReader("C:/Users/Jason/Desktop/SELECT Operation.htm");
    //String zy=String.format("<table><tr>"+xy+"</tr></table>"); 
    //StringReader hy= new StringReader(zy);



    PdfPCell cell;
    List p = new ArrayList();
    p = htmlWorker.parseToList(xy, st);
    Phrase p1 = new Phrase(); 

    for (int k = 0; k < p.size(); ++k){
         PdfPTable tb = (PdfPTable)((Element)p.get(k));
         tb.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
         System.out.println("1");
         document.add(tb);
         System.out.println(((Element)p.get(k)).toString());
         document.addTitle("jack");
         //p1.add((com.itextpdf.text.Element)p.get(k)); 
    }
    //cell = new PdfPCell(p1); 
    //document.add(cell);
    }catch(IOException e){}catch(Exception e){}
      //document.add((Element) p.get(k));}
    document.close();
  }
}

这是我的HTML到PDF代码,我收到了这个错误

代码语言:javascript
复制
Exception in thread "main" ExceptionConverter: java.io.IOException: The document has no pages.at com.itextpdf.text.pdf.PdfPages.writePageTree(PdfPages.java:113)
    at com.itextpdf.text.pdf.PdfWriter.close(PdfWriter.java:1217)
    at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:787)
    at com.itextpdf.text.Document.close(Document.java:420)
    at example.clas3.main(clas3.java:57)

请帮帮忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-11-20 15:36:57

从外观上看,您解析的HTML似乎是不正确的,因此错误itextpdf报告

在向前迈进之前,你需要纠正这一点。

您可以做的一件事是使用chrome或mozilla上的开发人员选项来查找html代码中的问题。这对你有很大的帮助

票数 1
EN

Stack Overflow用户

发布于 2013-09-16 12:17:28

对于此问题:当文档关闭时,会将相关页面写入文件。但是html可能有一些问题,例如你的html是不正确的,所以不能解析到正确的页面,itextpdf会报告这个错误,确保你有正确的HTML,应该是好的。

票数 0
EN

Stack Overflow用户

发布于 2018-02-06 18:17:32

看起来很复杂。尝试使用另一个库。下面是代码的示例:

代码语言:javascript
复制
import com.bcl.easypdf.printer.*;
import java.io.File;

public class TestPrinter
{
   public static void main(String[] args) throws Exception
   {
      if(args.length != 2)
         return;

      File inputFile = new File(args[0]);
      String inputFileName = inputFile.getCanonicalPath();

      File outputFile = new File(args[1]);
      String outputFileName = outputFile.getCanonicalPath();

      Printer printer = new Printer();
      printer.useLoader = false;
      try
      {
         IEPrintJob printjob = printer.getIEPrintJob();
         printjob.PrintOut(inputFileName, outputFileName);
      }
      catch(PrinterException ex)
      {
         System.out.println(ex.getMessage());
      }
      finally
      {
         printer.dispose();
      }
   }
}

这是HTML到

如果您需要使用元数据:

代码语言:javascript
复制
{
         IEPrintJob printjob = printer.getIEPrintJob();
         PDFSetting pdfSettings = printjob.getPDFSetting();
         pdfSettings.setMetaData(true);
         pdfSettings.setMetaDataTitle("title");
         pdfSettings.setMetaDataAuthor("authior");
         pdfSettings.setMetaDataSubject("subject");
         pdfSettings.setMetaDataKeywords("kw");
         pdfSettings.setMetaDataCreator("creator");
         printjob.PrintOut(inputFileName, outputFileName);
      }

用于加密:

代码语言:javascript
复制
 try
      {
         IEPrintJob printjob = printer.getIEPrintJob();
         PDFSetting pdfSettings = printjob.getPDFSetting();
         pdfSettings.setSecurity(true);
         pdfSettings.setSecurityUserPassword("123");
         pdfSettings.setSecurityOwnerPassword("456");
         pdfSettings.setSecurityEncryption(prnSecEncryption.PRN_SEC_ENCRYPT_128BITS);
         pdfSettings.setSecurityAnnotation(prnSecAnnotationPerm.PRN_SEC_ANNOT_PERM_FULL);
         pdfSettings.setSecurityExtraction(prnSecExtractionPerm.PRN_SEC_EXTR_PERM_FULL);
         pdfSettings.setSecurityModification(prnSecModificationPerm.PRN_SEC_MODIFY_PERM_FULL);
         pdfSettings.setSecurityPrinting(prnSecPrintingPerm.PRN_SEC_PRINT_PERM_FULL);
         printjob.PrintOut(inputFileName, outputFileName);
      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18825805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档