2010-08-02 3 views

ответ

1

Простым способом, который является простым, но, вероятно, не самым эффективным способом, является предоставление неподвижного документа изображению, а затем встраивание изображения в PDF с помощью iTextSharp.

Я сделал так, прежде чем успешно. Сначала я попытался преобразовать примитивы управления (фигуры) в эквиваленты PDF, но это оказалось слишком сложным.

0

Если вы можете получить его в изображение из WPF, вы можете импортировать его в iTextSharp, как в этой статье. Вы даже можете избежать файловой системы, если вы напишете ее в MemoryStream, а затем используйте это вместо использования FileStream.

http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images

+1

преобразования текста и векторной графики в изображение, чтобы затем поместить его в PDF поражения цели PDF. Вы не сможете выбирать или искать текст или увеличивать масштаб без потери качества. –

+1

Он также создает очень большой PDF-файл, если вы создаете изображение достаточного DPI, чтобы обеспечить четкую печать. – Paddy

+1

Есть ли у вас предложения? Я согласен с обоими этими заявлениями. –

0

Если вы хотите сделать это программно, ваш лучший ставка будет следующий путь XPS (Fixed Document) -> Печать в PS -> Использование Ghostscript для чтения PS и конвертировать в PDF. Если вы не заботитесь о чтении PDF в коде, вы можете распечатать любой из бесплатных PDF-принтеров, которым вы можете пройти путь назначения. Таким образом, ваш целевой файл PDF по-прежнему будет доступен для поиска, если у вас есть какой-либо тест в вашем отчете.

6

WPF FixedDocument, также известный как документ XPS, является определенным улучшением по сравнению с PDF. В нем есть много возможностей, которые PDF не хватает. В большинстве случаев лучше распространять ваш документ как XPS, а не PDF, но иногда необходимо преобразовать его из XPS в PDF, например, если вам нужно открыть документ на устройствах, которые имеют только поддержку PDF. К сожалению, большинство бесплатных инструментов для преобразования из XPS в PDF, таких как CutePDF и BullzipPDF, требуют установки драйвера принтера или не являются открытым исходным кодом.

Хорошим решением с открытым исходным кодом является использование инструмента «gxps», который является частью GhostPDL. GhostPDL является частью проекта Ghostscript и лицензируется с открытым исходным кодом под лицензией GPL2.

  1. Загрузить GhostPDL от http://ghostscript.com/releases/ghostpdl-8.71.tar.bz2 и скомпилировать его.
  2. Скопируйте исполняемый файл gxps.exe в свой проект в качестве Контента и вызовите его из своего кода с помощью Process.Start.

Ваш код может выглядеть следующим образом:

string pdfPath = ... // Path to place PDF file 

string xpsPath = Path.GetTempPath(); 
using(XpsDocument doc = new XpsDocument(xpsPath, FileAccess.Write)) 
    XpsDocument.CreateXpsDocumentWriter(doc).Write(... content ...); 

Process.Start("gxps.exe", 
       "-sDEVICE=pdfwrite -sOutputFile=" + 
        pdfPath + 
        "-dNOPAUSE " + 
        xpsPath).WaitForExit(); 

// Now the PDF file is found at pdfPath 
+1

Очень хорошо (хорошо работает, что приятно, но было бы удобно, если бы MS включила некоторые функции, подобные этому из коробки) ... – Paddy

+0

Что относительно лицензирования в этом случае? Мне не нужен проект GPL2, потому что я выполняю только программу? Есть ли еще такой инструмент, который не должен быть открытым исходным кодом, но по-прежнему свободен? – drasto

+0

GPL2 требует, чтобы ваша программа «могла разумно считаться независимой и отдельной работой» из GhostPDL, и вы не можете распространять свою работу »как часть целого, работа которого основана на« GhostPDL ». Мнения меняются в зависимости от юридических последствий этого.Если GhostPDL устанавливается отдельно от вашего приложения, и ваше приложение знает, как его вызвать, если оно присутствует, вы почти наверняка будете в безопасности. Вы также можете подумать о создании единого установщика, чтобы сохранить пользователя от выполнения двух отдельных установок. –

Смежные вопросы