我正在尝试使用flyingsaucer将html文档保存为PDF,但是当我从Adobe Reader查看文档属性时,生成的文档总是最终具有A4尺寸(页面大小:8.26 x 11.69 in)。
我确实阅读了文档,并且传递了css @page {size:letter;}样式。虽然它确实对输出有影响,但Adobe Reader中的页面大小始终保持为8.26 x 11.69。例如,如果我将页面大小设置为合法,我的PDF仍然是A4的大小,但文档的顶部缺失,好像它已从“纸张”上掉下来。
我不确定这个问题是在问题方面还是飞碟方面。我使用的是相当旧版本,所以我的第一步是升级到最新的9.1.6版飞碟。我也从itext 2.0.8转到openPDF 1.0.1,但我仍然有同样的行为。
我还在调试器中跟踪了ITextRenderer中的com.lowagie.text.Document创建,此时传递的文档大小是正确的。这让我觉得问题可能出在openPDF / iText中,但我找不到我做错了什么。
答案 0 :(得分:1)
真正的问题是你(不知不觉中)使用了不再受支持的软件。任何仍然具有命名空间lowagie(iText的创始人和CTO)的东西真的已经过时了。
如果您只是想将HTML转换为pdf,为什么不直接使用iText并切断中间人?
我们有多种选择。
这是一个使用pdfHTML的相当广泛的代码示例:
public void createPdf(String src, String dest, String resources) throws IOException {
try {
FileOutputStream outputStream = new FileOutputStream(dest);
WriterProperties writerProperties = new WriterProperties();
//Add metadata
writerProperties.addXmpMetadata();
PdfWriter pdfWriter = new PdfWriter(outputStream, writerProperties);
PdfDocument pdfDoc = new PdfDocument(pdfWriter);
pdfDoc.getCatalog().setLang(new PdfString("en-US"));
//Set the document to be tagged
pdfDoc.setTagged();
pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
//Set meta tags
PdfDocumentInfo pdfMetaData = pdfDoc.getDocumentInfo();
pdfMetaData.setAuthor("Joris Schellekens");
pdfMetaData.addCreationDate();
pdfMetaData.getProducer();
pdfMetaData.setCreator("iText Software");
pdfMetaData.setKeywords("example, accessibility");
pdfMetaData.setSubject("PDF accessibility");
//Title is derived from html
// pdf conversion
ConverterProperties props = new ConverterProperties();
FontProvider fp = new FontProvider();
fp.addStandardPdfFonts();
fp.addDirectory(resources);//The noto-nashk font file (.ttf extension) is placed in the resources
props.setFontProvider(fp);
props.setBaseUri(resources);
//Setup custom tagworker factory for better tagging of headers
DefaultTagWorkerFactory tagWorkerFactory = new AccessibilityTagWorkerFactory();
props.setTagWorkerFactory(tagWorkerFactory);
HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);
pdfDoc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
找到更多信息