iTextSharp - Форма выбора метода выбора страниц - PullRequest
0 голосов
/ 30 марта 2010

Я написал приложение для обработки большой загрузки PDF-файлов путем анализа данных из файла CSV. У меня проблема в том, что я хочу сохранить первую страницу PDF и только первую страницу. Когда я использую PdfReader reader.SelectPages("1"), это приводит к сглаживанию полей формы. Если я это закомментирую, все будет нормально.

Есть идеи, почему этот метод приведет к сглаживанию всех полей формы? Однако он правильно экспортирует одну страницу.

Вот небольшая выдержка:

PdfReader reader = new PdfReader(formFile);
reader.SelectPages("1");
string newFile = Environment.CurrentDirectory + @"\Out" + documentCount  + ".pdf";
PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create), '\0', true);
AcroFields fields = stamper.AcroFields;

Если я закомментирую вторую строку, проблем вообще не будет. Я думаю, это для людей, которые знают, как использовать iTextSharp.

Приветствия

1 Ответ

1 голос
/ 02 апреля 2010

Если вы просто хотите извлечь страницы из существующего PDF, я рекомендую вам взглянуть на код, который я нашел в статье блога Джеймса Уэлча Как извлечь страницы из документа PDF .

Вот оригинальный код из блога:

private static void ExtractPages(string inputFile, string outputFile, int start, int end) {
    // get input document
    PdfReader inputPdf = new PdfReader(inputFile);

    // retrieve the total number of pages
    int pageCount = inputPdf.NumberOfPages;

    if (end < start || end > pageCount) {
        end = pageCount;
    }

    // load the input document
    Document inputDoc = new Document(inputPdf.GetPageSizeWithRotation(1));

    // create the filestream
    using (FileStream fs = new FileStream(outputFile, FileMode.Create)) {
        // create the output writer
        PdfWriter outputWriter = PdfWriter.GetInstance(inputDoc, fs);
        inputDoc.Open();
        PdfContentByte cb1 = outputWriter.DirectContent;

        // copy pages from input to output document
        for (int i = start; i <= end; i++) {
            inputDoc.SetPageSize(inputPdf.GetPageSizeWithRotation(i));
            inputDoc.NewPage();

            PdfImportedPage page =
                outputWriter.GetImportedPage(inputPdf, i);
            int rotation = inputPdf.GetPageRotation(i);

            if (rotation == 90 || rotation == 270) {
                cb1.AddTemplate(page, 0, -1f, 1f, 0, 0,
                    inputPdf.GetPageSizeWithRotation(i).Height);
            } else {
                cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
            }
        }

        inputDoc.Close();
    }
}
...