简体   繁体   中英

itextsharp: unexpected elements on copied pages

Here is known code that splits PDF document:

        try
        {
            FileInfo file = new FileInfo(@"d:\С.pdf");
            string name = file.Name.Substring(0, file.Name.LastIndexOf("."));
            // we create a reader for a certain document
            PdfReader reader = new PdfReader(@"d:\С.pdf");
            // we retrieve the total number of pages
            int n = reader.NumberOfPages;
            int digits = 1 + (n / 10);
            System.Console.WriteLine("There are " + n + " pages in the original file.");
            Document document;
            int pagenumber;
            string filename;

            for (int i = 0; i < n; i++)
            {
                pagenumber = i + 1;
                filename = pagenumber.ToString();
                while (filename.Length < digits) filename = "0" + filename;
                filename = "_" + filename + ".pdf";
                // step 1: creation of a document-object
                document = new Document(reader.GetPageSizeWithRotation(pagenumber));
                // step 2: we create a writer that listens to the document
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(name + filename, FileMode.Create));
                // step 3: we open the document
                document.Open();
               PdfContentByte cb = writer.DirectContent;
                PdfImportedPage page = writer.GetImportedPage(reader, pagenumber);
                int rotation = reader.GetPageRotation(pagenumber);
                if (rotation == 90 || rotation == 270)
                {
                    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height);
                }
                else
                {
                    cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                }
                // step 5: we close the document
                document.Close();
            }
        }
        catch (DocumentException de)
        {
            System.Console.Error.WriteLine(de.Message);
        }
        catch (IOException ioe)
        {
            System.Console.Error.WriteLine(ioe.Message);
        }

Here is left top corner of one splitted page: 在此处输入图片说明

You can see here (and in other corners) unexpected lines,rounds.. How can I avoid them?

As explained many times before ( ITextSharp include all pages from the input file , Itext pdf Merge : Document overflow outside pdf (Text truncated) page and not displaying , and so on), you should read chapter 6 of my book iText in Action (you can find the C# version of the examples here ).

You are using a combination of Document , PdfWriter and PdfImportedPage to split a PDF. Please tell me who made you do it this way, so that I can curse the person who inspired you (because I've answered this question hundreds of times before, and I'm getting tired of repeating myself). These classes aren't a good choice for that job:

  • you lose all interactivity,
  • you need to rotate the content yourself if the page is in landscape (you already discovered this),
  • you need to take the original page size into account,
  • ...

Your problem is similar to this one Itext pdf Merge : Document overflow outside pdf (Text truncated) page and not displaying . Apparently the original document you're trying to split contains a MediaBox and a CropBox. When you look at your original document, only the content inside the CropBox is shown. When you look at your copy, the content inside the MediaBox is shown, unveiling "printer marks". These printer marks show where the page needs to be cut in a publishing environment. When printing books or magazines, the pages on which content is printed are usually bigger than the final page. The extra content is cut off before assembling the book or magazine.

Long story short: read the documentation, replace PdfWriter with PdfCopy , replace AddTemplate() with AddPage() .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM