iText.Layout.Document忽略合并的pdf

时间:2018-09-21 11:02:02

标签: c# itext itext7

我创建包含文本,图像和现有pdf的pdf。通过将现有的pdf合并到pdf中来添加它们。问题是,如果先添加pdf,然后添加图像,则iText.Layout.Document不会考虑合并的pdf占用的空间,而是在“文档标题”段之后添加图像(请参见示例)。

这将创建乱序图像,有时甚至会重叠图像和合并的pdf。我需要正确的顺序并且没有重叠,该如何解决?

using (var stream = new MemoryStream())
using (var writer = new PdfWriter(stream).SetSmartMode(true))
using (var pdf = new PdfDocument(writer))
using (var doc = new Document(pdf))
{
    doc.Add(new Paragraph("Document Title")

    //pdf is added via merging, results in pdf being on the second page which is ok
    using (var ms = new MemoryStream(somePdfByteArray))
    using (var reader = new PdfReader(ms))
    using (var pdfdoc = new PdfDocument(reader))
    {
        PdfMerger merger = new PdfMerger(pdf);
        merger.Merge(pdfdoc, 1, pdfdoc.GetNumberOfPages());
    }
    //then image is added but it is added BEFORE the pdf which is the problem
    doc.Add(new Image(ImageDataFactory.Create(someImageByteArray)));
}

1 个答案:

答案 0 :(得分:2)

如果由于性能问题而无法使用注释中建议的方法(在内存中创建文档进行合并/追加),并且您不介意在文档的新页面上添加内容,则可以尝试以下方法:

public static void main(String[] args) throws Exception {
    PdfDocument pdfDocument = new PdfDocument(new PdfWriter(DEST));
    addContent(new Paragraph("Document Title"), pdfDocument);
    mergePdf(new PdfDocument(new PdfReader(SRC)), pdfDocument);
    addContent(new Div().add(new Image(ImageDataFactory.create("path_to_image"))), pdfDocument);
    pdfDocument.close();
}

public static void mergePdf(PdfDocument in, PdfDocument pdfDocument) throws Exception {
    in.copyPagesTo(1, in.getNumberOfPages(), pdfDocument, new PdfPageFormCopier());
}

public static void addContent(IBlockElement content, PdfDocument pdfDocument) throws Exception {
    Document document = new Document(pdfDocument);
    pdfDocument.addNewPage();
    document.add(new AreaBreak(AreaBreakType.LAST_PAGE));
    document.add(content);
}

我用Java编写了代码示例,但是iText for Java和.NET共享完全相同的代码库,因此这不成问题。

在这种方法中,我们强制iText在高级Document类上添加内容之前添加新页面。如果要使用此方法添加图像,则必须将它们包装在IBlockElement中,此方法才能起作用。最合适的元素是 Div 一个。

关于, 凯文