【问题标题】:How to generate a pdf in landscape mode from a html output using itext 5.1.1如何使用 itext 5.1.1 从 html 输出中以横向模式生成 pdf
【发布时间】:2015-04-06 13:53:05
【问题描述】:

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

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

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

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

示例 xml 文件:http://www.filedropper.com/resettsample

示例 xsl 文件:http://www.filedropper.com/resettcopy

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();
          }   
          }

感谢任何有关如何实现所需输出的建议。

谢谢 桑迪普

【问题讨论】:

  • 包括你到现在为止的尝试?
  • 嗨 Piyush,我已经更新了帖子,提供了更多信息。

标签: html pdf xslt itext landscape


【解决方案1】:

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

Document document = new Document();

变成这样:

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

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

您可能需要升级您的 iText/XML Worker 版本(确保您始终使用对应的 iText 和 XML Worker 版本)。

【讨论】:

  • 谢谢布鲁诺。我选择了 ParseHTMLTable1,java 示例并实现了您上面提到的内容。我观察到的是 pdf 文档从纵向变为横向。但是,HTML 表格内容仍保留在同一位置。我希望内容(扩展/收缩)与文档方向一起调整。请让我知道如何实现这一目标,或者我的理解是否有误。谢谢。桑迪普
  • 你的理解是错误的。 PDF 不是 HTML:所有内容在页面上都有固定的位置。如果您的表格无论页面方向如何都具有相同的尺寸,则您的表格可能包含有关表格和列的宽度的信息。此外,您从未回答过@Piyush 的问题:您尝试了什么?显示使用重现问题的简单 HTML 文件。
  • 我明白你关于表格和列的宽度的观点。我正在努力。同时,我用示例场景更新了帖子。谢谢。
  • 我只需要更新 XMLWorker 和 Itextpdf jar 版本,就可以使用上面相同的代码实现所需的 pdf 横向结果。谢谢
  • @SandeepSingh 太棒了!我会更新我的答案,也许你可以接受它,这样人们就可以看到问题现在已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2019-08-11
  • 2019-01-02
相关资源
最近更新 更多