Как из DOCX получить PDF на asp.net* (c#)?

Перерыл кучу источников и так и не нашел внятного решения для этой задачи.
Есть файл в формате DOCX и его нужно на сервере (IIS, ASP.NET MVC) сконвертировать в формат PDF.

Если быть точнее, есть шаблон в word-е в котором присутствуют шаблонные поля, которые заменяет серверный скрипт (например текст NUMBER в шаблоне заменяется на 123). Замену провожу с помощью OpenXML SDK (с этим никакой проблемы нет). Далее созданный на основе шаблона новый документ необходимо преобразовать в формат PDF и отдать клиенту.

Нашел прекрасную библиотеку PdfSharp. Она неплохо справляется с задачами генерации PDF, но как ей можно скормить OpenXML-документ, чтобы форматирование не съехало (вернее сохранилось в принципе).

Может есть другие решения этой задачи?

Допинфо:
- коммерческие продукты не подходят;
- шифрование в pdf не нужно;
- Microsoft Office Interop справляется, но не подходит (не предназначен для серверных решений)

И еще: я не очень хорошо разбираюсь в postscript, но возможно ли использовать в качестве шаблона PDF-документ и в нем менять ключевые слова на значения (а потом генерить новый PDF-файл)? Если да, то как?
  • Вопрос задан
  • 3241 просмотр
Пригласить эксперта
Ответы на вопрос 3
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Сделайте pdf-файл в том виде, в котором вам нужно и откройте через любой редактор как xml. Увидите что там да как. Потом просто сделаете такой же xml-файл средствами C# и передадите клиенту с указанием, что это файл с расширением pdf.
Ответ написан
Zarinov
@Zarinov Автор вопроса
Если удастся правильно перенести оформление из OpenXML в PdfSharp.Pdf.PdfDocument, то задача будет решена. Но я не понимаю, что куда нужно переносить.

Как вариант модификация исходного PDF-файла с помощью того же PdfSharp, тоже облегчила бы жизнь, но как?

NUGET: PDFsharp-MigraDoc-GDI

/// <summary>
/// Генерация нового PDF
/// </summary>
private void CreateDPF()
{
	string fileResult = HostingEnvironment.MapPath("/Files/result.pdf");
	var d = new Document();
	var s = d.AddSection();
	s.PageSetup.PageFormat = PageFormat.A4;
	s.PageSetup.Orientation = Orientation.Portrait;
	s.PageSetup.TopMargin = 10;
	s.PageSetup.LeftMargin = 10;
	s.PageSetup.BottomMargin = 10;
	s.PageSetup.RightMargin = 10;
	var p = s.AddParagraph();
	p.AddText("Превед медвед!");
	var r = new PdfDocumentRenderer(true, PdfFontEmbedding.Always);
	r.Document = d;
	r.RenderDocument();
	r.PdfDocument.Save(fileResult);
}

/// <summary>
/// Генерация PDF на основе другого PDF
/// </summary>
private void ConvertDPF()
{
	string fileSource = HostingEnvironment.MapPath("/Files/source.pdf");
	string fileResult = HostingEnvironment.MapPath("/Files/result.pdf");
	using (var src = PdfReader.Open(fileSource, PdfDocumentOpenMode.Import))
	using (var res = new PdfDocument())
	{
		foreach (PdfPage page in src.Pages)
		{
			// что-то нужно сделать с этой page
			res.AddPage(page);
		}
		res.Save(fileResult);
	}			
}
Ответ написан
Комментировать
@iseewhatyoudidthere
Можете еще посмотреть в сторону iTextSharp
https://www.nuget.org/packages/iTextSharp/
С блекджэком и шлюхами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы