c# - 使用 itextsharp.text.pdf 合并多个 itextsharp.text.pdf.PdfReader 对象后文档看起来被剪切了

标签 c# pdf-generation itext

我正在使用 iTextSharp 创建一个 List<PdfReader> _documents有几个 PDF 文档。 在此列表上使用合并创建单页文档并将其发送给客户端后,我发现 PDF 在 Adob​​e Reader 中看起来被剪切了。 当我像这样突出显示图片时,我可以看到它就在那里:

enter image description here

如果我保存它,它就会完成。

如果我保存 PdfReader 之一在列表中作为单个 PDF 文档 - 没有合并 - 它看起来不错。

enter image description here

合并函数是:

public void Merge(Stream outputStream)
{
    Document newDocument = null;

    try
    {
        newDocument = new Document();
        // Set margins and page size for the document 
        newDocument.SetMargins(50, 50, 50, 50);
        // There are a huge number of possible page sizes, including such sizes as 
        // EXECUTIVE, LEGAL, LETTER_LANDSCAPE, and NOTE 
        newDocument.SetPageSize(PageSize.A3 );

        PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, outputStream);

        newDocument.Open();
        PdfContentByte pdfContentByte = pdfWriter.DirectContent;

        if (EnablePagination)
        {
            _documents.ForEach(delegate(PdfReader doc)
            {
                _totalPages += doc.NumberOfPages;
            });
        }

        int currentPage = 1;
        foreach (PdfReader pdfReader in _documents)
        {
            for (int page = 1; page <= pdfReader.NumberOfPages; page++)
            {
                newDocument.NewPage();
                PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, page);
                pdfContentByte.AddTemplate(importedPage, 0, 0);

                if (EnablePagination)
                {
                    pdfContentByte.BeginText();
                    pdfContentByte.SetFontAndSize(_baseFont, 9);
                    pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER,
                        string.Format("{0} of {1}", currentPage++, _totalPages), 520, 5, 0);
                    pdfContentByte.EndText();
                }
            }
        }
    }
    finally
    {
        outputStream.Flush();
        if (newDocument != null)
            newDocument.Close();
        outputStream.Close();
    }
}

我怀疑它与 newDocument.SetPageSize(PageSize.A3); 有关 但我不确定,到目前为止我找不到解决方案。

最佳答案

只是一些可以尝试的想法。该问题可能与缩放或调整大小有关。比较两个文档的水平缩放比例。此外,importedPage.PdfDocument.PageSize 需要与 pdfContentByte.PdfDocument.PageSize 进行比较,并且可能会缩小。

关于c# - 使用 itextsharp.text.pdf 合并多个 itextsharp.text.pdf.PdfReader 对象后文档看起来被剪切了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739061/

相关文章:

c# - 通过禁止的 IP 地址阻止对站点的访问

c# - 比较日期时间,看看是否已经过去一小时

php - 在 Windows 中使用 phpexcel 生成 pdf

java - 使用 iText 旋转 PdfSignatureAppearance

java - 将 JSP 页面打开为 PDF 文件

c# - 如何更改通过 PrefabUtility.InstantiatePrefab 实例化的 GameObject 的父对象?

c# - 关于在 Windows 应用程序上显示 BLE 设备相对于我的 PC/扫描仪的位置的建议

c# - iTextSharp - 段落行高

php - 如何在 PHP 中将 PDF 1.5 版转换为 1.4 版

java - 使用 java 使用 XMLWorker 将损坏的 html 转换为 pdf