0

PDF ドキュメントを分割する既知のコードは次のとおりです。

        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);
        }

分割されたページの左上隅は次のとおりです。 ここに画像の説明を入力

ここ (および他の隅) に予期しない線や丸みが見られます.どうすればそれらを回避できますか?

4

1 に答える 1

1

以前に何度も説明したように ( ITextSharp には入力ファイルのすべてのページが含まれますItext pdf Merge : PDF (テキストが切り捨てられた) ページ外のドキュメント オーバーフローと表示されないなど)、私の本iText in Actionの第 6 章を読む必要があります(あなたは例の C# バージョンは、ここにあります)。

との組み合わせを使用しDocumentてPDF を分割しています。あなたにインスピレーションを与えた人を呪うことができるように、誰があなたをこのようにさせたのか教えてください(私はこの質問に何百回も答えており、繰り返すのにうんざりしています)。これらのクラスは、その仕事には適していません。PdfWriterPdfImportedPage

  • すべてのインタラクティブ性を失い、
  • ページが横向きの場合は、コンテンツを自分で回転させる必要があります (既に発見済みです)。
  • 元のページ サイズを考慮する必要があります。
  • ...

あなたの問題は、このItext pdf Merge : Document overflow outside pdf (Text truncated) page and notdisplayに似ています。分割しようとしている元のドキュメントには、MediaBox と CropBox が含まれているようです。元のドキュメントを見ると、CropBox 内のコンテンツのみが表示されます。コピーを見ると、MediaBox 内のコンテンツが表示され、「印刷マーク」が明らかになります。これらの印刷マークは、発行環境でページを切り取る必要がある場所を示します。本や雑誌を印刷する場合、コンテンツが印刷されるページは通常、最終ページよりも大きくなります。本や雑誌を組み立てる前に、余分なコンテンツは切り取られます。

簡単に言えば、ドキュメントを読んで、 に置き換えPdfWriterPdfCopy、 に置き換えAddTemplate()AddPage()ください。

于 2013-03-09T11:57:55.103 に答える