我们计划通过传递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();
}
}
任何关于如何实现所需输出的建议都将受到欢迎。
谢谢,桑迪普
转到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字符? 我导入脚本并将依赖项添加到我的应用