为什么飞碟总是在A4纸上打印PDF?

时间:2017-08-08 22:04:08

标签: pdf itext flying-saucer

我正在尝试使用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中,但我找不到我做错了什么。

1 个答案:

答案 0 :(得分:1)

真正的问题是你(不知不觉中)使用了不再受支持的软件。任何仍然具有命名空间lowagie(iText的创始人和CTO)的东西真的已经过时了。

如果您只是想将HTML转换为pdf,为什么不直接使用iText并切断中间人?

我们有多种选择。

  1. XMLWorker(基于iText5的代码,将HTML转换为pdf)
  2. pdfHTML(基于iText7的插件,将HTML5 / CSS3转换为pdf)
  3. 这是一个使用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();
        }
    }
    

    您可以在http://itextpdf.com/itext7/pdfHTML

    找到更多信息