Как заменить текст в PDF с C #? - PullRequest
6 голосов
/ 22 августа 2011

Я видел много решений здесь, но ни одно не является ясным или хорошим ответом.

Вот мой простой вопрос в надежде получить прямой ответ.

У меня есть файл PDF (шаблон), созданный с текстом, похожим на этот:

{FIRSTNAME} {LASTNAME} {АДРЕС} {PHONENUMBER}

возможно ли иметь код C #, который заменяет эти шаблоны текстом моего выбора?

Нет полей, нет других сложных вещей.

Есть ли какая-нибудь библиотека с открытым исходным кодом, помогающая мне достичь этого?

Ответы [ 4 ]

6 голосов
/ 06 марта 2012

Эта тема мертва, однако я публикую свое решение для других потерянных душ, которые могут столкнуться с этой проблемой в будущем.К сожалению, моя компания не разрешает публиковать код в Интернете, поэтому я опишу решение:).

Поэтому в основном вам нужно использовать PdfSharp и изменить этот образец для замены текста впоток, но вы должны принять во внимание, что текст может быть разбит на несколько скобок (конвертировать поток в строку, чтобы увидеть, что формат).

Затем, с кодом, похожим на этот образец , перебирайте исходный pdf страницу за страницей и изменяйте текущую страницу путем поиска элементов PdfContent внутри элементов PdfReference и замены текста в потоке содержимого.

4 голосов
/ 22 августа 2011

«Проблема» с документами PDF заключается в том, что они по своей сути не подходят для редактирования. Особенно те без полей. Лучше всего сделать шаг назад, посмотреть на ваш процесс и посмотреть, есть ли способ заменить текст до того, как был создан PDF. Очевидно, что вы не всегда можете иметь эту свободу.

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

Я знаю, что вы ищете решение OpenSource, поэтому я не хочу предлагать вам коммерческое решение. Мы предлагаем один называется PDFKit.NET. Он позволяет извлекать весь контент на странице в виде так называемых фигур (текст, изображения, кривые и т. Д.). См. Метод Page.CreateShapes в ссылке на тип. Затем вы можете программно перемещаться и редактировать эту структуру фигур, а затем снова записывать ее в PDF.

Вот оно: http://www.tallcomponents.com/pdfkit

Раскрытие информации: я являюсь учредителем TallComponents, поставщиком этого компонента

2 голосов
/ 05 ноября 2015

Для простого текста используйте библиотеку iTextSharp .Код, который заменяет одну строку другой, приведен ниже.Обратите внимание, что это заменит только простой текст и может работать не во всех случаях.

    //using iTextSharp.text.pdf;
    void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText)
    {
        using (PdfReader reader = new PdfReader(OrigFile))
        {
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                byte[] contentBytes = reader.GetPageContent(i);
                string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING);
                contentString = contentString.Replace(origText, replaceText);
                reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING));
            }
            new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close();
        }
    }
2 голосов
/ 22 августа 2011

Как указано в аналогичная тема это не совсем простой способ.Кажется, проще всего получить файл DocX и использовать библиотеку DocX , которая позволяет легко менять слова и затем конвертировать DocX в PDF (с использованием принтера PDF Creator или около того).

Или используйте pdf sharp / migradoc для создания новых документов.

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