Сохранить существующий документ PDF в файл - PullRequest
2 голосов
/ 07 января 2020

В настоящее время я пытаюсь разделить файл PDF, а затем сохранить каждый ne PdfDocument в новый файл. Проблема в том, что я не могу прикрепить новый PdfWriter к существующему PdfDocument. Это код, который я сейчас использую для открытия и разделения файла PDF (просто пример кода макета):

IList<int> splitByPage = new List<int>() { 1,2,3};
PdfDocument pdfDoc = new PdfDocument(new PdfReader(@"C:\temp\test.pdf"));
PdfSplitter splitter = new PdfSplitter(pdfDoc);
IList<PdfDocument> splittedDocuments = splitter.SplitByPageNumbers(splitByPage);

Это работает, и у меня есть набор PdfDocument объектов. Теперь я хочу сохранить их в новые файлы. Я нашел решение в java, где можно создать новый экземпляр PdfWriter на основе заданных Document и OutputStream, но в. net Я не нашел эквивалента этому. Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 07 января 2020

Короче говоря, вам нужно расширить, как класс PdfSplitter обрабатывает документы, создав новый экземпляр PdfWriter в методе GetNextPdfWriter.

public static readonly String DEST = "splitDocument1_{0}.pdf";


public void Split()
{
    IList<int> splitByPage = new List<int>() {1, 2, 3};
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(@"C:\temp\hello.pdf"));
    PdfSplitter splitter = new PdfSplitter(pdfDoc);
    IList<PdfDocument> splittedDocuments = new CustomPdfSplitter(pdfDoc, DEST).SplitByPageNumbers(splitByPage);

    foreach (PdfDocument doc in splittedDocuments)
    {
        doc.Close();
    }

    pdfDoc.Close();
}

private class CustomPdfSplitter : PdfSplitter
{
    private String dest;
    private int partNumber = 1;

    public CustomPdfSplitter(PdfDocument pdfDocument, String dest) : base(pdfDocument)
    {
        this.dest = dest;
    }

    protected override PdfWriter GetNextPdfWriter(PageRange documentPageRange)
    {
        return new PdfWriter(String.Format(dest, partNumber++));
    }
}

Я не смог найти в Интернете документацию для GetNextPdfWriter, но здесь она из исходного кода :

/// <summary>This method is called when another split document is to be created.</summary>
/// <remarks>
/// This method is called when another split document is to be created.
/// You can override this method and return your own
/// <see cref="T:iText.Kernel.Pdf.PdfWriter" />
/// depending on your needs.
/// </remarks>
/// <param name="documentPageRange">the page range of the original document to be included in the document being created now.
/// </param>
/// <returns>the PdfWriter instance for the document which is being created.</returns>
protected internal virtual PdfWriter GetNextPdfWriter(PageRange documentPageRange)

Помимо примера на Github , я также мог найти пример из FAQ по счетчику громкости (третий пример).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...