当前位置: 首页 > 知识库问答 >
问题:

如何使用itext 5.1.1从html输出以横向模式生成pdf

谷梁涵忍
2023-03-14

我们计划通过传递html文本作为输入,在横向模式下生成一个pdf。此外,pdf是在横向模式下生成的,而内容是在纵向模式下。以下是我们用来执行上述要求的步骤。

1)从源系统接收xml内容。

2) 使用xsl从xml生成html输出。

3)将html输出作为输入传递给pdf java类,然后该类将以横向模式生成pdf。

示例 xml 文件:.com/重置样本

样本xsl文件:.com/重置复制

java代码

          package testproject;


          import java.io.File;
          import java.io.FileOutputStream;
          import java.io.StringReader;
          import java.io.StringWriter;

          import java.text.SimpleDateFormat;

          import java.util.Date;

          import javax.xml.transform.Result;
          import javax.xml.transform.Transformer;
          import javax.xml.transform.TransformerFactory;
          import javax.xml.transform.stream.StreamResult;
          import javax.xml.transform.stream.StreamSource;

          import com.itextpdf.text.Document;
          import com.itextpdf.text.PageSize;
          import com.itextpdf.text.RectangleReadOnly;
          import com.itextpdf.text.pdf.PdfWriter;
          import com.itextpdf.tool.xml.XMLWorkerHelper;

          public class PDFTest {
          public static void main(String[] args) {
          try {

          new PDFTest().PDFCreateRequest();

          } catch (Exception ex) {
          ex.printStackTrace();
          }
          }


          public static void PDFCreateRequest() throws Exception {

          StringWriter stringWriter = null;
          Result result = null;
          TransformerFactory tFactory = null;
          Transformer transformer = null;
          String strXMLFile = null;
          String strXSLFile = null;
          String strHTMLString = null;
          String strFeedFolderPath = null;
          String strPDFFileName = null;
          String strPDFFileNameWithExtension = null;
          String strPDFFile = null;
          Document document = null;
          PdfWriter pdfWriter = null;

          strXMLFile = "C:\\RESETT_sample.xml";
          String timeStamp =
          new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());


          strXSLFile = "C:\\RESETT_Copy.xsl";
          stringWriter = new StringWriter();
          result = new StreamResult(stringWriter);
          tFactory = TransformerFactory.newInstance();

          transformer = tFactory.newTransformer(new StreamSource(strXSLFile));

          transformer.transform(new StreamSource(strXMLFile), result);

          strHTMLString = stringWriter.toString();
          System.out.println("###### [HTML output " + strHTMLString);

          strPDFFileName = "RESETT_" + timeStamp;
          strFeedFolderPath = "C:\\pdfdocuments";

          strPDFFileNameWithExtension = strPDFFileName + ".pdf";
          strPDFFile =
          strFeedFolderPath + File.separator + strPDFFileNameWithExtension;

          // This is for PDF Landscape output
          document =
          new Document(new RectangleReadOnly(842, 595), 10, 10, 75, 20);


          // This is for PDF Portrait output
          document = new Document(PageSize.A4, 10, 10, 75, 20);

          pdfWriter =
          PdfWriter.getInstance(document, new FileOutputStream(strPDFFile));
          document.open();
          XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document,
          new StringReader(strHTMLString));
          document.close();
          }   
          }

任何关于如何实现所需输出的建议都将受到欢迎。

谢谢,桑迪普

共有1个答案

慕容宏邈
2023-03-14

转到XML Worker示例并获取您想要的任何示例,但更改以下行:

Document document = new Document();

变成这样的东西:

Document document = new Document(PageSize.A4.rotate());

这将导致文档处于横向而不是纵向。

您可能需要升级 iText/XML 工作线程的版本(确保始终使用相应的 iText 和 XML 工作线程版本)。

 类似资料:
  • 问题内容: 我有一个HTML报告,由于列很多,因此需要横向打印。是否有一种方法可以执行此操作,而无需用户更改文档设置? 在浏览器中有哪些选择。 问题答案: 在CSS中,您可以设置@page属性,如下所示。 @page是CSS 2.1规范的一部分,但是问题的答案并未突出显示@page{size:landscape}是否已过时?: CSS 2.1不再指定size属性。CSS3 Paged Media模

  • 我有下面给我的html,当我把这个转换成PDF使用飞碟,它不适合A4的肖像大小。如何生成横向pdf文件。 我使用下面给定的代码将html转换为pdf

  • 问题内容: 我试图对我的应用程序强制使用“横向”模式,因为我的应用程序绝对不是针对“人像”模式设计的。我怎样才能做到这一点? 问题答案: 现在可以使用HTML5 Webapp清单。 见下文。 原始答案: 您不能将网站或Web应用程序锁定在特定方向。它违反了设备的自然行为。 您可以使用CSS3媒体查询来 检测 设备方向,如下所示: 或通过绑定JavaScript方向更改事件,如下所示: 2014年1

  • 问题内容: 我有一个HTML报告,由于列很多,因此需要横向打印。是否有一种方法可以执行此操作,而无需用户更改文档设置? 在浏览器中有哪些选项。 问题答案: 在CSS中,您可以设置@page属性,如下所示。 @page是CSS 2.1规范的一部分,但是问题的答案并未突出显示[@Page{size:landscape}是否已过时?: CSS 2.1不再指定size属性。CSS3 Paged Media

  • 我尝试使用jOOQ作为模式生成器来生成DDL语句,然后再生成SQL insert语句。 底层数据来自静态CSV文件,我基本上希望编写一个静态SQL脚本,其中包括创建模式和插入数据的语句;只是一个转储文件。 例如,我有一个包含表definition的Groovy类: 如果我想添加主键和可能的外键、索引等,它会变得更加复杂。 在调用时没有添加这些内容,这是预期的行为吗? 注意:我手动创建,因为我没有源

  • 问题内容: 我试图输出简单的html unicode字符,例如从表达式中输出。 我尝试使用,但无法使其显示在HTML中。 html代码未注入到span balise中 不会解释html代码(html字符未出现在控制台中,但是如果我不使用控制器中的表达式并直接调用,则可以在控制台中看到正确解释的HTML字符,但仍未注入进入跨接栏杆) 如何从表达式输出html字符? 我导入脚本并将依赖项添加到我的应用