0

我在一个程序中写信并以 PDF 格式导出。我最近实现了一个小型控制台程序,它应该遍历每个页面并将我的特殊设计的字母(包含我的地址等)设置为背景。

问题是,我的信件是用 Calibri 写的。在使用 pdf 压模之前,原始 PDF 看起来很棒,在设置背景之后,(未修改的文本)的样式看起来有点不同。

看截图,我的意思。

截屏

我无法向我解释,因此我认为这可能是一个错误。你有什么建议吗?

我的代码在这里。

public static void main(String[] args) throws IOException, DocumentException {
    PdfBackgroundSetter.setBackgroundToPdf(args[0], args[1], args[2]);
}

public static void setBackgroundToPdf(String inputContentPdfPath, String outputPdfPath, String inputBackgroundPdfPath) throws IOException, DocumentException {
    PdfReader inputContentReader = new PdfReader(inputContentPdfPath);
    PdfStamper outputStamper = new PdfStamper(inputContentReader, new FileOutputStream(outputPdfPath));

    PdfReader inputBackgroundReader = new PdfReader(inputBackgroundPdfPath);
    PdfImportedPage backgroundPage = outputStamper.getImportedPage(inputBackgroundReader, 1);

    int numberOfPages = inputContentReader.getNumberOfPages();

    for (int i = 1; i <= numberOfPages; i++) {
        outputStamper.getUnderContent(i).addTemplate(backgroundPage, 0, 0);
    }
    outputStamper.close();
    inputContentReader.close();
    inputBackgroundReader.close();
}

稍微修改(匿名)的 PDF 文件可以在这里找到:

内容.pdf

背景.pdf

4

1 回答 1

0

正如@Chris 已经说过的,这本质上是 Adob​​e Reader / Acrobat 引入的工件。它尤其取决于相关的 Adob​​e Acrobat/Reader 版本,并且可以通过不在背景 PDF 中使用透明度组来防止。

细节

我只能在某些 Adob​​e 软件版本(Acrobat 9.5)中重现该问题,但不能在当前版本中重现该问题,但我在 Adob​​e Reader XI 中看不到该问题。

Acrobat 9.5 中的纯内容和与背景合并的内容:

Acrobat 9.5 中的内容Acrobat 9.5 中带背景的内容

Reader XI 中的纯内容和与背景合并的内容:

阅读器 XI 中的内容Reader XI 中的背景内容

该工件似乎与在背景文件中使用透明度组的事实有关。删除了背景文件中的所有透明度组后,我得到了这个:

在 Acrobat 9.5 中,纯内容和与背景合并的内容没有透明度组:

Acrobat 9.5 中的内容Acrobat 9.5 中带有背景且没有透明度组的内容

在最新版本的 Adob​​e Acrobat 和 Reader 中,透明度组的处理实际上已经有了许多改进。我主要知道与实际透明度问题和淘汰组相关的此类改进,但这似乎是另一个。

于 2014-07-15T12:56:10.583 回答