【问题标题】:iText Merge PDF with cropboxiText 将 PDF 与裁剪框合并
【发布时间】:2011-07-11 06:21:41
【问题描述】:

有谁知道如何使用 iText 合并两个 pdf(其中一个有cropbox,另一个没有,并且它们的页面大小不同)?

这是我用于 PDF 合并的代码:

public bool MergeFiles(string destinationFile, string[] sourceFiles)
    {
        bool bSucess = true;

        if (System.IO.File.Exists(destinationFile))
            System.IO.File.Delete(destinationFile);

        string[] sSrcFile;
        sSrcFile = new string[2];


        string[] arr = new string[2];
        for (int i = 0; i <= sourceFiles.Length - 1; i++)
        {
            if (sourceFiles[i] != null)
            {
                if (sourceFiles[i].Trim() != "")
                    arr[i] = sourceFiles[i].ToString();
            }
        }

        if (arr != null)
        {

            sSrcFile = new string[2];

            for (int ic = 0; ic <= arr.Length - 1; ic++)
            {
                sSrcFile[ic] = arr[ic].ToString();
            }
        }

        string sPDFPath = Server.MapPath(@"pdftemp/");
        Scripting.FileSystemObject fso = new Scripting.FileSystemObjectClass();


        try
        {
            int f = 0;

            PdfReader reader = new PdfReader(sSrcFile[f]);
            int n = reader.NumberOfPages;
            Console.WriteLine("There are " + n + " pages in the original file.");
            Document document = new Document(PageSize.A4);

            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
            PdfDate st = new PdfDate(DateTime.Today);


            document.Open();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage page;

            int rotation;
            while (f < sSrcFile.Length)
            {
                int i = 0;
                while (i < n)
                {
                    i++;

                    document.SetPageSize(PageSize.A4);
                    document.NewPage();
                    page = writer.GetImportedPage(reader, i);

                    rotation = reader.GetPageRotation(i);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                    Console.WriteLine("Processed page " + i);
                }

                f++;
                if (f < sSrcFile.Length)
                {
                    reader = new PdfReader(sSrcFile[f]);
                    n = reader.NumberOfPages;
                    Console.WriteLine("There are " + n + " pages in the original file.");
                }
            }

            document.Close();

        }
        catch (Exception e)
        {
            bSucess = false;
        }

        return bSucess;
    }

但似乎没有处理页面之间的裁剪框差异(具有裁剪框的页面上的内容位置错误),有人有更好的代码将内容放在正确的位置吗?

【问题讨论】:

    标签: c# java pdf pdf-generation itext


    【解决方案1】:

    你做的很辛苦:

    PdfReader reader = null;
    PdfCopy copier = new PdfCopy(outputStream);
    String paths[] = ...;
    for (String path : paths) {
      reader = new PdfReader(path);
      for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); ++pageNum) {
        copier.addPage(copier.getImportedPage(reader, pageNum) );
      }
    }
    

    这将复制页面注释以及页面内容。请注意,它不会复制那些注释可能需要正常运行的文档级内容(例如表单字段验证入口点的文档脚本)。

    它会逐字复制原始页面,而不考虑各种页面框大小或旋转。

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多