Вопрос по itext, c#, winforms – Вот решение, которое сработало для меня ... Нужно немного почистить, что теперь произойдет после длинных выходных.

2

ужно добавить несколько PDF-файлов (каждая отдельная страница) в мой основной PDF-файл. Они должны быть добавлены после определенного номера страницы и не добавлены в конец.

Как я

1: объединить PDF с определенным номером страницы

2: pdfCopy.AddDocument недоступен. Я протестировал с версиями 5.4.3, 5.4.5 и 5.5.10. Что мне здесь не хватает? Все говорят, чтобы использовать 5.X, который я ...

'PdfCopy' does not contain a definition for 'AddDocument' and no extension method 'AddDocument' accepting a first argument of type 'PdfCopy' could be found (are you missing a using directive or an assembly reference?)

3: Как обрабатывать, когда pageToInsert в больше, чем общее количество страниц в источнике?

Я уже посмотрел тонны документов. Все говорят использовать PdfCopy и .AddDocument ...

Объединение нескольких PDF-файлов с помощью iTextSharp в c # .net

http://weblogs.sqlteam.com/mladenp/archive/2014/01/10/simple-merging-of-pdf-documents-with-itextsharp-5-4-5.aspx

вот мой первый взгляд на это ....

using System;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

namespace PdfMergeTest
{
    public partial class Form1 : Form
    {
        private const string baseFile = "baseFile.tmp";
        private const string baseTempPdfFileName = "temp.pdf";

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnMerge_Click(object sender, EventArgs e)
        {
            if (!CheckBasePaths())
                return;

            //get the files to merge to baseFile
            var filesToMerge = GetAllFilesToMerge();
            if (filesToMerge.Length == 0)
                return;

            //get basefile to which we need to merge the above files, it is with .tmp ext
            var baseFileWithPath = GetBaseFile();
            if (string.IsNullOrWhiteSpace(baseFileWithPath))
                return;

            //temp base pdf
            var tempPdfWithPath = GetBaseTempFile();
            if (string.IsNullOrWhiteSpace(tempPdfWithPath))
                return;

            //loop through the files to merge and merge into baseFile
            var page = 2; //page where to merge the file, we are not appending to the end. Actual code will find the page from source where to merge and will add 1 to it 
            foreach (FileInfo toMerge in filesToMerge)
            {
                //copy the base file as temp file for source; for debugging purposes at this time
                File.Copy(baseFileWithPath, tempPdfWithPath, true);

                //start merging, first at #2, second at #4, third at #6 and so on 
                MergeFiles(baseFileWithPath, tempPdfWithPath, toMerge.FullName, page);

                page += 2;
            } 
        }

        private bool CheckBasePaths()
        {
            if (string.IsNullOrWhiteSpace(txtBaseDir.Text))
            {
                MessageBox.Show("No Base Directory");
                return false;
            }

            if (string.IsNullOrWhiteSpace(txtFilesToMergeToBase.Text))
            {
                MessageBox.Show("No files to merge Directory");
                return false;
            }

            if (!Directory.Exists(txtBaseDir.Text))
            {
                MessageBox.Show("Base dir does not exist");
                return false;
            }

            if (!Directory.Exists(txtFilesToMergeToBase.Text))
            {
                MessageBox.Show("Files to merge dir does not exist");
                return false;
            }

            return true; 
        }

        private FileInfo[] GetAllFilesToMerge()
        {
            DirectoryInfo d = new DirectoryInfo(txtFilesToMergeToBase.Text);
            FileInfo[] files = d.GetFiles("*.pdf");
            if (files.Length == 0)
                MessageBox.Show("No files to merge");
            return files;
        }

        private String GetBaseFile()
        {
            var myBaseFile = Path.Combine(txtBaseDir.Text, baseFile);
            if (!File.Exists(myBaseFile))
            {
                myBaseFile = "";
                MessageBox.Show("Base file missing");
            }
            return myBaseFile;
        }

        private String GetBaseTempFile()
        {
            var myBaseTempFile = Path.Combine(txtBaseDir.Text, baseTempPdfFileName);
            return myBaseTempFile;
        }

        private void MergeFiles(string originalFile, string sourceFile, string toMergeFile, int insertPage)
        {
            Document document = null;
            PdfCopy pdfCopy = null;
            PdfReader pdfReader = null;

            try
            {
                //Step#1: create a document object
                document = new Document();

                //Step#2: create a writer that listen to the document
                pdfCopy = new PdfSmartCopy(document, new FileStream(originalFile, FileMode.Create));
                if (pdfCopy == null)
                    return;

                //Step#3: open document
                document.Open();

                //Step#4: create a reader for the toMergeFile and add document
                pdfReader = new PdfReader(toMergeFile);
                //add the entire document instead of page by page
                pdfCopy.AddDocument(pdfReader);
                pdfReader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (pdfReader != null) pdfReader.Close();
                if (pdfCopy != null) pdfCopy.Close();
                if (document != null) document.Close();
            }
        }
    }
}

Я смотрел на следующее использование.AddPage но это не то, что я хочу.

http://www.worldbestlearningcenter.com/index_files/csharp-combine-pdf-files.htm

Ваш Ответ

0   ответов

Похожие вопросы