代码之家  ›  专栏  ›  技术社区  ›  peirix

风景和肖像pdf与飞碟/iText

  •  18
  • peirix  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  25
  •   peirix    16 年前

    @page land { size:landscape; }
    @page port { size:portrait; }
    .landscapePage { page:land; }
    .portraitPage { page:port; }
    

    瞧!

        2
  •  16
  •   Marcus    15 年前

    <div class="portraitPage">
        <p>Some page content in portrait</p>
    </div>
    <div class="landscapePage">
        <p>Some page content in landscape</p>
    </div>
    

    它将正确格式化纵向页面和横向页面,但横向页面中的内容将仅与纵向页面一样宽,即使

    .landscapePage { page:land; width: 29.7cm; }
    

        3
  •  1
  •   shrey    11 年前

    您可以在运行时动态处理页面大小。请按照以下步骤操作

    FileOutputStream fos = new FileOutputStream(file);
    ITextRenderer renderer = new ITextRenderer();
    StringBuilder htmls = new StringBuilder();
    htmls.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    htmls.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
    htmls.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
    htmls.append("<head><style type=\"text/css\">");
    htmls.append("@page{ size: "+request.getParameter("pageType")}");
    htmls.append("</style></head>");
    htmls.append("<body><div>dynamic pdf data</div></body></html>");
    renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\Calibri.ttf","UTF-8",BaseFont.NOT_EMBEDDED);
    renderer.setDocumentFromString(htmls.toString());
    renderer.layout();
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".pdf\"");
    renderer.createPDF(outputStream);
    renderer.createPDF(fos);
    
    推荐文章