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

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

胥英奕
2023-03-14

我正在尝试使用flyingsaucer将html文档保存为PDF,但当我查看Adobe Reader中的文档属性(页面大小:8.26 x 11.69英寸)时,生成的文档最终总是具有A4维度。

我确实阅读了文档,我正在传递css@page{size:letter;}风格虽然它确实对输出有影响,但在Adobe Reader中,页面大小始终保持在8.26 x 11.69。例如,如果我将页面大小设置为legal,我的PDF仍然是A4大小,但文档顶部缺失,就像它从“纸张”上掉下来一样。

我不确定问题是出在itext端还是飞碟端。我使用的是一个相当旧的版本,所以我的第一步是升级到最新的9.1.6版本的飞碟。我也从itext 2.0.8迁移到了openPDF 1.0.1,但我仍然得到了相同的行为。

我还在调试器中跟踪到com。洛瓦吉。文本在ITextRenderer中创建文档,此时传递的文档大小是正确的。这让我觉得这个问题可能在openPDF/iText中,但我找不到我做错了什么。

共有2个答案

洪弘毅
2023-03-14

真正的问题是你(无意中)正在使用不再受支持的软件。任何仍然具有名称空间lowagie(iText的创始人和首席技术官)的东西都已经过时了。

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

我们为您提供多种选择。

  1. XMLWorker(基于iText5的代码,将HTML转换为pdf)

这是一个使用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

云弘壮
2023-03-14

事实证明,PDF生成正确地使用了@page size声明,问题发生在我们软件的后期。我没有注意到的是,在生成PDF后,调用了另一种方法将多个PDF合并为一个。这个方法可能不应该被调用,但那是另一回事。

底线是这个方法创建了一个新的com。洛瓦吉。文本Document(),默认情况下创建A4大小的文档,然后在pdf的所有页面上迭代,使用pdfWriter将页面添加到新文档中。getImportedPage(pdfReader,currentPage)。这些导入的页面没有保留其原始大小。

我通过在创建合并文档对象时传递第一页的页面大小来修复它:

document = new Document(pdfReader.getPageSize(1));
 类似资料:
  • 使用飞碟以PDF格式打印图像。 超文本标记语言代码: 当我使用飞碟将HTML转换为PDF时。生成的PDF不会打印图像。 我需要使用任何特定的软件包来打印PDF格式的图像吗。如果你有任何问题,请告诉我。

  • 我正在使用飞碟将超文本标记语言转换为PDF。我想在我的超文本标记语言中使用像CheckBox这样的超文本标记语言输入属性,并将其打印在生成的PDF中。但是当我用html编写复选框代码并生成PDF时,没有用PDF打印的复选框。 套餐: 我需要使用任何特定的包来打印PDF中的复选框吗。如果你有任何问题,请告诉我。任何帮助都将不胜感激。非常感谢。

  • 问题内容: 我正在阅读一个python脚本,该脚本接受XML文件的输入并输出XML文件。但是,我不了解打印语法。可有人请解释什么的呢? 问题答案: 该方法格式化字符串字面量 和它的新功能。 甲 格式的字符串文字 或 F-串 是前缀字符串文字或。这些字符串可能包含替换字段,这些替换字段由花括号分隔。尽管其他字符串文字始终具有恒定值,但是格式化的字符串实际上是在运行时评估的表达式。 格式化字符串文字的

  • 我正在使用飞碟/iText生成报告。现在,报告有一个条件,即如果发生特定情况,报告应移动到pdf的下一页,并在pdf上添加数据,等等<问候Pawan

  • 问题内容: 我生成了x的两个矩阵: 第一矩阵:和。 第二矩阵:和。 使用以下代码,第一个矩阵花费了8.52秒完成: 使用此代码,第二个矩阵花费了259.152秒来完成: 运行时间显着不同的原因是什么? 正如评论所说,仅打印需要秒,而给。 正如其他指出它对他们正常工作的人一样,例如,我尝试了Ideone.com,这两段代码以相同的速度执行。 测试条件: 我从 Netbeans 7.2 运行了此测试,

  • 所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。